private async Task ProvisioningClient_CanReadQuestion(object Sender, CanReadEventArgs e) { CanReadQuestion Question = await Database.FindFirstDeleteRest <CanReadQuestion>(new FilterAnd( new FilterFieldEqualTo("Key", e.Key), new FilterFieldEqualTo("JID", e.JID))); if (Question is null) { Question = new CanReadQuestion() { Created = DateTime.Now, Key = e.Key, JID = e.JID, RemoteJID = e.RemoteJID, OwnerJID = XmppClient.GetBareJID(e.To), ProvisioningJID = this.provisioningClient.ProvisioningServerAddress, ServiceTokens = e.ServiceTokens, DeviceTokens = e.DeviceTokens, UserTokens = e.UserTokens, FieldNames = e.Fields, Categories = e.FieldTypes, NodeId = e.NodeId, SourceId = e.SourceId, Partition = e.Partition }; await Database.Insert(Question); MainWindow.UpdateGui(() => MainWindow.currentInstance.NewQuestion(this.Account, this.provisioningClient, Question)); } }
private void ReqCanReadResponse(CanReadEventArgs e) { object[] P = (object[])e.State; int seqnr = (int)P [0]; DateTime When = (DateTime)P [1]; string LanguageCode = (string)P [2]; string From = (string)P [3]; string Id = (string)P [4]; if (e.Result) { this.Accepted(seqnr, From, Id); DateTime Now = DateTime.Now; Job Job = new Job(e.Request, seqnr, When, From, this); this.Register(From, seqnr, Job); if (When > Now) { lock (this.queue) { while (this.queue.ContainsKey(When)) { When = When.AddTicks(gen.Next(1, 10)); } Job.When = When; this.queue [When] = Job; this.SetTimer(); } } else { Job.Start(); } } else { this.RequestRejected(seqnr, From, Id, "Readout rejected by provisioning server.", "cancel", "forbidden", "urn:ietf:params:xml:ns:xmpp-stanzas"); } }
private async void ProvisioningClient_CanReadQuestion(object Sender, CanReadEventArgs e) { try { CanReadQuestion Question = await Database.FindFirstDeleteRest <CanReadQuestion>(new FilterAnd( new FilterFieldEqualTo("Key", e.Key), new FilterFieldEqualTo("JID", e.JID))); if (Question == null) { Question = new CanReadQuestion() { Created = DateTime.Now, Key = e.Key, JID = e.JID, RemoteJID = e.RemoteJID, OwnerJID = XmppClient.GetBareJID(e.To), ProvisioningJID = this.provisioningClient.ProvisioningServerAddress, ServiceTokens = e.ServiceTokens, DeviceTokens = e.DeviceTokens, UserTokens = e.UserTokens, FieldNames = e.Fields, Categories = e.FieldTypes, NodeId = e.NodeId, SourceId = e.SourceId, Partition = e.Partition }; await Database.Insert(Question); DispatcherOperation Op = MainWindow.currentInstance.Dispatcher.BeginInvoke(new ThreadStart(() => MainWindow.currentInstance.NewQuestion(this.Account, this.provisioningClient, Question))); } } catch (Exception ex) { Log.Critical(ex); } }
private async void ProvisioningClient_CanReadQuestion(object Sender, CanReadEventArgs e) { try { CanReadQuestion Question = await Database.FindFirstDeleteRest <CanReadQuestion>(new FilterAnd( new FilterFieldEqualTo("Key", e.Key), new FilterFieldEqualTo("JID", e.JID))); if (Question == null) { Question = new CanReadQuestion() { Created = DateTime.Now, Key = e.Key, JID = e.JID, RemoteJID = e.RemoteJID, ProvisioningJid = this.provisioningClient.ProvisioningServerAddress, ServiceTokens = e.ServiceTokens, DeviceTokens = e.DeviceTokens, UserTokens = e.UserTokens, FieldNames = e.Fields, Categories = e.FieldTypes, NodeId = e.NodeId, SourceId = e.SourceId, Partition = e.Partition }; await Database.Insert(Question); await MainWindow.currentInstance.NewQuestion(Question); } } catch (Exception ex) { Log.Critical(ex); } }
private void SubscribeCanReadResponse(CanReadEventArgs e) { object[] P = (object[])e.State; int seqnr = (int)P [0]; Duration MaxAge = (Duration)P [1]; Duration MinInterval = (Duration)P [2]; Duration MaxInterval = (Duration)P [3]; ReadoutRequest Request = (ReadoutRequest)P [4]; List <Condition> Conditions = (List <Condition>)P [5]; bool Req = (bool)P [6]; string LanguageCode = (string)P [7]; string From = (string)P [8]; string Id = (string)P [9]; bool Respond = (bool)P [10]; bool Trigger = false; double Current; if (e.Result) { if (Respond) { this.Accepted(seqnr, From, Id); } List <Condition> Conditions2 = new List <Condition> (); if (Req) { Trigger = true; } lock (this.synchObj) { foreach (Condition Condition in Conditions) { if (e.Request.ReportField(Condition.FieldName)) { Conditions2.Add(Condition); if (this.currentValues.TryGetValue(Condition.FieldName, out Current) && Condition.Trigger(Condition.FieldName, Current, false)) { Trigger = true; } } } } Subscription Subscription = new Subscription(); Subscription.Key = XmppClient.StripResource(From).ToLower(); Subscription.SeqNr = seqnr; Subscription.MaxAge = MaxAge; Subscription.MinInterval = MinInterval; Subscription.MaxInterval = MaxInterval; Subscription.OrgRequest = Request; Subscription.Request = e.Request; Subscription.OrgConditions = Conditions; Subscription.Conditions = Conditions2.ToArray(); Subscription.LanguageCode = LanguageCode; Subscription.From = From; Subscription.Id = Id; this.AddSubscription(Subscription); } else { if (Respond) { this.RequestRejected(seqnr, From, Id, "Event subscription rejected by provisioning server.", "cancel", "forbidden", "urn:ietf:params:xml:ns:xmpp-stanzas"); } else { Unregister(XmppClient.StripResource(From).ToLower(), seqnr); } } if (Trigger) { DateTime Now = DateTime.Now; Job Job = new Job(e.Request, seqnr, Now, From, this); this.Register(From, seqnr, Job); Job.Start(); } this.ReevaluateNext(); }
private void CanReadResponse(CanReadEventArgs e) { object[] P = (object[])e.State; string From = (string)P [0]; Session Session = (Session)P [1]; if (e.Result) { Thread T = new Thread(() => { this.client.SendMessage(From, "Readout started...", MessageType.Chat); try { StringBuilder sb = new StringBuilder(); StringBuilder Xml = null; ISensorDataExport Export; if (Session.Html) { SensorDataHtmlExport HtmlExport; Xml = new StringBuilder(); Export = HtmlExport = new SensorDataHtmlExport(Xml, sb, true, Session.GraphWidth, Session.GraphHeight); HtmlExport.OnGridExportComplete += (o, e2) => { if (Xml.Length > 3000) { Xml.Append("</body></html>"); this.client.SendMessage(From, sb.ToString(), MessageType.Chat, Xml.ToString()); sb.Clear(); Xml.Clear(); } }; } else { SensorDataTextExport TextExport; Export = TextExport = new SensorDataTextExport(sb); TextExport.OnGridExportComplete += (o, e2) => { if (sb.Length > 5000) { this.client.SendMessage(From, sb.ToString(), MessageType.Chat); sb.Clear(); } }; } if (this.sensor != null) { this.sensor.DoReadout(e.Request, Export); } if (sb.Length > 0) { if (Xml != null) { this.client.SendMessage(From, sb.ToString(), MessageType.Chat, Xml.ToString()); } else { this.client.SendMessage(From, sb.ToString(), MessageType.Chat); } } this.client.SendMessage(From, "Readout complete.", MessageType.Chat); } catch (Exception ex) { try { this.SendErrorMessage(From, ex.Message.Replace("\r", string.Empty).Replace("\n", "<br/>"), Session); } catch (Exception ex2) { Log.Exception(ex2); } } }); T.Name = "Readout thread"; T.Priority = ThreadPriority.BelowNormal; T.Start(); } else { this.SendErrorMessage(From, "Readout rejected by provisioning server.", Session); } }