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 { namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
class Mqtt : Mqtt<ZwayController> { class Mqtt : Mqtt<ZwayController> {
protected Boolean mqttConnect = false;
public override event ModulEvent Update; public override event ModulEvent Update;
public Mqtt(ZwayController zwave, InIReader settings) : base(zwave, settings) { } public Mqtt(ZwayController zwave, InIReader settings) : base(zwave, settings) { }
@ -21,15 +22,15 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
#region Mqtt #region Mqtt
protected override void Connect() { protected override void Connect() {
this.mqtt = ABackend.GetInstance(this.config["settings"], ABackend.BackendType.Data); this.mqtt = ABackend.GetInstance(this.config["settings"], ABackend.BackendType.Data);
this.mqtt.MessageIncomming += this.EventInput; this.mqtt.MessageIncomming += this.MqttUpdate;
this.library.Update += this.EventOutput; this.mqttConnect = true;
} }
protected override void Disconnect() { protected override void Disconnect() {
this.mqttConnect = false;
if (this.mqtt != null) { if (this.mqtt != null) {
this.mqtt.MessageIncomming -= this.EventInput; this.mqtt.MessageIncomming -= this.MqttUpdate;
} }
this.library.Update -= this.EventOutput;
if (this.mqtt != null) { if (this.mqtt != null) {
this.mqtt.Dispose(); this.mqtt.Dispose();
} }
@ -38,7 +39,14 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
#endregion #endregion
#region Events #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 topic = "";
String data = ""; String data = "";
if (e.Parent.GetType().HasInterface(typeof(IMqtt))) { 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)); 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"))) { 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()); 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 = ""; String id = "";

View File

@ -19,23 +19,26 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
protected override void LibraryUpdateHook(String id) { protected override void LibraryUpdateHook(String id) {
foreach (KeyValuePair<String, ACommandClass> item in this.overtakeritems) { foreach (KeyValuePair<String, ACommandClass> item in this.overtakeritems) {
item.Value.Polling = false; item.Value.Polling = false;
item.Value.Update -= this.ChangedEvent; item.Value.Update -= this.HandleLibUpdate;
} }
this.overtakeritems.Clear(); this.overtakeritems.Clear();
ACommandClass c = this.library.GetCommandClass(id); ACommandClass c = this.library.GetCommandClass(id);
if (c != null) { if (c != null) {
this.overtakeritems.Add(id, c); this.overtakeritems.Add(id, c);
c.Polling = true; c.Polling = true;
c.Update += this.ChangedEvent; c.Update += this.HandleLibUpdate;
} }
} }
private void ChangedEvent(Object sender, DeviceUpdateEvent e) { protected override void LibUpadteThread(Object state) {
if(sender.GetType().HasAbstract(typeof(ACommandClass))) { try {
if (this.events.ContainsKey(((ACommandClass)sender).Id)) { DeviceUpdateEvent e = state as DeviceUpdateEvent;
this.SetValues(sender, ((ACommandClass)sender).Id, this.events[((ACommandClass)sender).Id]); 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) { 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 #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 topic = "";
String data = ""; String data = "";
if (e.Parent.GetType().HasInterface(typeof(ISenml))) { if (e.Parent.GetType().HasInterface(typeof(ISenml))) {
ISenml sensor = (ISenml)e.Parent; ISenml sensor = (ISenml)e.Parent;
topic = sensor.SenmlTopic() + this.SenmlGuid+ "/senml"; topic = sensor.SenmlTopic() + this.SenmlGuid + "/senml";
data = sensor.ToSenml(); data = sensor.ToSenml();
} }
if (topic != "" && data != null && data != "") { if (topic != "" && data != null && data != "") {
@ -33,8 +36,10 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
this.Update?.Invoke(this, new SenmlEvent(topic, data)); 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 #endregion
} }
} }

View File

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