Example #1
0
        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");
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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();
        }
Example #6
0
        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);
            }
        }