Rewrite of Eventhandleing, Threaded
This commit is contained in:
parent
55f7b609b1
commit
877bce4d1a
@ -27,5 +27,9 @@ namespace BlubbFish.IoT.Bots.ZwayBot.Moduls {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void EventLibSetter() { }
|
||||||
|
|
||||||
|
protected override void LibUpadteThread(Object state) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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 = "";
|
||||||
|
@ -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() { }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user