Rewrite of Eventhandleing, Threaded

This commit is contained in:
BlubbFish 2018-09-11 12:04:43 +00:00
parent 55f7b609b1
commit 877bce4d1a
5 changed files with 66 additions and 38 deletions

View File

@ -27,5 +27,9 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
}
}
}
public override void EventLibSetter() { }
protected override void LibUpadteThread(Object state) { }
}
}

View File

@ -14,6 +14,7 @@ using LitJson;
namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
class Mqtt : Mqtt<ZwayController> {
protected Boolean mqttConnect = false;
public override event ModulEvent Update;
public Mqtt(ZwayController zwave, InIReader settings) : base(zwave, settings) { }
@ -21,15 +22,15 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
#region Mqtt
protected override void Connect() {
this.mqtt = ABackend.GetInstance(this.config["settings"], ABackend.BackendType.Data);
this.mqtt.MessageIncomming += this.EventInput;
this.library.Update += this.EventOutput;
this.mqtt.MessageIncomming += this.MqttUpdate;
this.mqttConnect = true;
}
protected override void Disconnect() {
this.mqttConnect = false;
if (this.mqtt != null) {
this.mqtt.MessageIncomming -= this.EventInput;
this.mqtt.MessageIncomming -= this.MqttUpdate;
}
this.library.Update -= this.EventOutput;
if (this.mqtt != null) {
this.mqtt.Dispose();
}
@ -38,7 +39,14 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
#endregion
#region Events
protected virtual void EventOutput(Object sender, DeviceUpdateEvent e) {
public override void EventLibSetter() {
this.library.Update += this.HandleLibUpdate;
}
protected override void LibUpadteThread(Object state) {
try {
if(this.mqttConnect) {
DeviceUpdateEvent e = state as DeviceUpdateEvent;
String topic = "";
String data = "";
if (e.Parent.GetType().HasInterface(typeof(IMqtt))) {
@ -51,8 +59,10 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
this.Update?.Invoke(this, new MqttEvent(topic, data));
}
}
} catch { }
}
protected virtual void EventInput(Object sender, BackendEvent e) {
protected virtual void MqttUpdate(Object sender, BackendEvent e) {
if (e.From.ToString().StartsWith("zwavebot/devices/") && (e.From.ToString().EndsWith("/set") || e.From.ToString().EndsWith("/get"))) {
Match m = new Regex("^zwavebot/devices/(\\d+)/(\\d+)/(\\d+)/[gs]et$|^zwavebot/devices/(\\d+)/(\\d+)/(\\d+)/(\\d+)/[gs]et$").Match(e.From.ToString());
String id = "";

View File

@ -19,23 +19,26 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
protected override void LibraryUpdateHook(String id) {
foreach (KeyValuePair<String, ACommandClass> item in this.overtakeritems) {
item.Value.Polling = false;
item.Value.Update -= this.ChangedEvent;
item.Value.Update -= this.HandleLibUpdate;
}
this.overtakeritems.Clear();
ACommandClass c = this.library.GetCommandClass(id);
if (c != null) {
this.overtakeritems.Add(id, c);
c.Polling = true;
c.Update += this.ChangedEvent;
c.Update += this.HandleLibUpdate;
}
}
private void ChangedEvent(Object sender, DeviceUpdateEvent e) {
if(sender.GetType().HasAbstract(typeof(ACommandClass))) {
if (this.events.ContainsKey(((ACommandClass)sender).Id)) {
this.SetValues(sender, ((ACommandClass)sender).Id, this.events[((ACommandClass)sender).Id]);
protected override void LibUpadteThread(Object state) {
try {
DeviceUpdateEvent e = state as DeviceUpdateEvent;
if (e.Parent.GetType().HasAbstract(typeof(ACommandClass))) {
if (this.events.ContainsKey(((ACommandClass)e.Parent).Id)) {
this.SetValues(e.Parent, ((ACommandClass)e.Parent).Id, this.events[((ACommandClass)e.Parent).Id]);
}
}
} catch { }
}
protected override void SetValueHook(String id, String prop, String value) {
@ -49,5 +52,7 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
}
}
}
public override void EventLibSetter() { }
}
}

View File

@ -20,12 +20,15 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
}
#region Events
protected override void EventOutput(Object sender, DeviceUpdateEvent e) {
protected override void LibUpadteThread(Object state) {
try {
if (this.mqttConnect) {
DeviceUpdateEvent e = state as DeviceUpdateEvent;
String topic = "";
String data = "";
if (e.Parent.GetType().HasInterface(typeof(ISenml))) {
ISenml sensor = (ISenml)e.Parent;
topic = sensor.SenmlTopic() + this.SenmlGuid+ "/senml";
topic = sensor.SenmlTopic() + this.SenmlGuid + "/senml";
data = sensor.ToSenml();
}
if (topic != "" && data != null && data != "") {
@ -33,8 +36,10 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
this.Update?.Invoke(this, new SenmlEvent(topic, data));
}
}
} catch { }
}
protected override void EventInput(Object sender, BackendEvent e) { }
protected override void MqttUpdate(Object sender, BackendEvent e) { }
#endregion
}
}

View File

@ -37,5 +37,9 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
}
this.Update?.Invoke(this, new StatusPollingEvent("Polling", "all nodes"));
}
public override void EventLibSetter() { }
protected override void LibUpadteThread(Object state) { }
}
}