[NF] Able to force loading modules, so dependencys are ok [NF] Cleanup because its now easyer to implement Zway
93 lines
3.1 KiB
C#
93 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
using BlubbFish.IoT.Zway;
|
|
using BlubbFish.Utils;
|
|
|
|
namespace ZwayBot {
|
|
class Program {
|
|
static void Main(String[] args) => new Program(args);
|
|
|
|
private ZwayController zw;
|
|
private Dictionary<String, AModul> moduls = new Dictionary<String, AModul>();
|
|
|
|
public Program(String[] args) {
|
|
Dictionary<String, String> names;
|
|
if(File.Exists("names.ini")) {
|
|
names = InIReader.GetInstance("names.ini").GetSection("names");
|
|
} else {
|
|
names = new Dictionary<String, String>();
|
|
}
|
|
if(!File.Exists("settings.ini")) {
|
|
Helper.WriteError("No settings.ini found. Abord!");
|
|
return;
|
|
}
|
|
this.zw = new ZwayController(InIReader.GetInstance("settings.ini").GetSection("zway"), names, false);
|
|
this.zw.Update += this.ZwayDataUpate;
|
|
this.ModulLoader();
|
|
this.ModulInterconnect();
|
|
this.ModulEvents();
|
|
this.WaitForShutdown();
|
|
this.ModulDispose();
|
|
}
|
|
|
|
private void ModulInterconnect() {
|
|
foreach (KeyValuePair<String, AModul> item in this.moduls) {
|
|
item.Value.Interconnect(this.moduls);
|
|
}
|
|
}
|
|
|
|
private void WaitForShutdown() {
|
|
while (true) {
|
|
System.Threading.Thread.Sleep(100);
|
|
if (Console.KeyAvailable) {
|
|
ConsoleKeyInfo key = Console.ReadKey(false);
|
|
if (key.Key == ConsoleKey.Escape) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void ModulDispose() {
|
|
foreach (KeyValuePair<String, AModul> item in this.moduls) {
|
|
item.Value.Dispose();
|
|
Console.WriteLine("Modul entladen: " + item.Key);
|
|
}
|
|
this.zw.Dispose();
|
|
}
|
|
|
|
private void ModulEvents() {
|
|
foreach (KeyValuePair<String, AModul> item in this.moduls) {
|
|
item.Value.Update += this.ModulUpdate;
|
|
}
|
|
}
|
|
|
|
private void ModulUpdate(Object sender, ModulEventArgs e) {
|
|
Console.WriteLine(e.ToString());
|
|
}
|
|
|
|
private void ModulLoader() {
|
|
Assembly asm = Assembly.GetExecutingAssembly();
|
|
foreach (Type item in asm.GetTypes()) {
|
|
if(item.Namespace == "ZwayBot.Moduls") {
|
|
Type t = item;
|
|
String name = t.Name;
|
|
if (File.Exists(name.ToLower() + ".ini")) {
|
|
this.moduls.Add(name, (AModul)t.GetConstructor(new Type[] { typeof(ZwayController), typeof(InIReader) }).Invoke(new Object[] { this.zw, InIReader.GetInstance(name.ToLower() + ".ini") }));
|
|
Console.WriteLine("Load Modul " + name);
|
|
} else if(t.HasInterface("IForceLoad")) {
|
|
this.moduls.Add(name, (AModul)t.GetConstructor(new Type[] { typeof(ZwayController), typeof(InIReader) }).Invoke(new Object[] { this.zw, null }));
|
|
Console.WriteLine("Load Modul Forced " + name);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void ZwayDataUpate(Object sender, BlubbFish.IoT.Zway.Events.DeviceUpdateEvent e) {
|
|
Console.WriteLine("-> ZW [" + e.UpdateTime + "]: " + e.Parent.ToString());
|
|
}
|
|
}
|
|
}
|