Exemplo n.º 1
0
        private void addParentIdColumns(DiscoverQuery dq, DataTable dt, XmlNode n)
        {
            XmlNode     myNode = n;
            xmlaElement e;

            while (myNode.ParentNode != null)
            {
                myNode = myNode.ParentNode;
                e      = dq.Elements.FindByName(myNode.Name);
                foreach (XmlNode innerNode in myNode.ChildNodes)
                {
                    if (innerNode.Name == "ID")
                    {
                        dt.Columns.Add(PARENT_PREFIX + myNode.Name + "ID");
                    }
                    //TODO - coonverting the .Contains call to BinarySearch would
                    //       allow for the injection of a custom implementation of IComparer
                    //       in order to do a case insensitive search.
                    if (e != null &&
                        e.Fields.Contains(innerNode.Name) &&
                        !dt.Columns.Contains(myNode.Name + innerNode.Name))
                    {
                        dt.Columns.Add(myNode.Name + innerNode.Name);
                    }
                }
            }
        }
Exemplo n.º 2
0
        protected DiscoveryResponse Handle(DiscoverQuery message)
        {
            var  pinNumber      = message.AsInt(MessageProperties.PinNumber);
            bool pinInWriteMode = IsPinInWriteMode(pinNumber);

            return(new DiscoveryResponse(RequierdProperties(), pinInWriteMode ? new PowerState(ReadWriteMode.Write) : new PowerState(ReadWriteMode.Read)));
        }
Exemplo n.º 3
0
        protected DiscoveryResponse Discover(DiscoverQuery message)
        {
            return(new DiscoveryResponse(RequierdProperties(), new PowerState(),
                                         new VolumeState()

                                         ));
        }
Exemplo n.º 4
0
 protected DiscoveryResponse Discover(DiscoverQuery message)
 {
     return(new DiscoveryResponse(RequierdProperties(), new PowerState(ReadWriteMode.Write),
                                  new VolumeState(ReadWriteMode.Write),
                                  new MuteState(ReadWriteMode.Write),
                                  new InputSourceState(ReadWriteMode.Write)
                                  ));
 }
Exemplo n.º 5
0
 protected DiscoveryResponse Discover(DiscoverQuery message)
 {
     return(new DiscoveryResponse(RequierdProperties(), new PowerState(),
                                  new VolumeState(),
                                  new MuteState(),
                                  new InputSourceState(),
                                  new SurroundSoundState(),
                                  new DescriptionState()
                                  ));
 }
Exemplo n.º 6
0
        private void RegisterPinNumber(DiscoverQuery message)
        {
            var pin = message.AsByte(MessageProperties.PinNumber);
            var registrationMessage = new byte[] { 1, pin };

            if (!_state.ContainsKey(pin))
            {
                _state.Add(pin, 0);
            }

            MessageBroker.SendToService(I2cCommand.Create(_i2cAddress, registrationMessage));
        }
 private void EnsureExplicitLeafColumnsExist(DiscoverQuery dq, DataTable dt, XmlNode n)
 {
     foreach (var ele in dq.Elements)
     {
         if (ele.Next != null)
         {
             continue;
         }
         foreach (var fld in ele.Fields)
         {
             if (dt.Columns.Contains(fld))
             {
                 continue;
             }
             dt.Columns.Add(fld);
         }
     }
 }
Exemplo n.º 8
0
        private void addParentIdValues(DiscoverQuery dq, DataTable dt, string[] data, XmlNode fld)
        {
            int     colIdx = -1;
            XmlNode myNode;

            myNode = fld;
            xmlaElement e;

            while (myNode.ParentNode != null)
            {
                myNode = myNode.ParentNode;
                e      = dq.Elements.FindByName(myNode.Name);
                foreach (XmlNode innerNode in myNode.ChildNodes)
                {
                    if (innerNode.Name == "ID")
                    {
                        colIdx = dt.Columns.IndexOf(PARENT_PREFIX + myNode.Name + "ID");
                        if (colIdx > -1)
                        {
                            data[colIdx] = innerNode.FirstChild.Value;
                        }
                    }
                    //TODO - coonverting the .Contains call to BinarySearch would
                    //       allow for the injection of a custom implementation of IComparer
                    //       in order to do a case insensitive search.
                    if (e != null && e.Fields.Contains(innerNode.Name))
                    {
                        colIdx = dt.Columns.IndexOf(myNode.Name + innerNode.Name);
                        if (colIdx > -1)
                        {
                            data[colIdx] = innerNode.FirstChild.Value;
                        }
                    }
                }
            }
        }
Exemplo n.º 9
0
        protected DiscoveryResponse Discover(DiscoverQuery message)
        {
            RegisterPinNumber(message);

            return(new DiscoveryResponse(RequierdProperties(), new HumidityState(ReadWriteMode.Read)));
        }
Exemplo n.º 10
0
        private async Task InitializeAdapters()
        {
            var discoveryRequests = (await _adapters.WhenAll(adapter => MessageBroker.Request <DiscoverQuery, DiscoveryResponse>(DiscoverQuery.CreateQuery(adapter), adapter.Uid)).ConfigureAwait(false));

            foreach (var discovery in discoveryRequests)
            {
                discovery.Input.AddRequierdProperties(discovery.Result.RequierdProperties);

                Subscribe <Event>(discovery.Input.GetRoutingFilter());
            }

            _componentState = new ComponentState(discoveryRequests.ToDictionary(k => k.Input, v => v.Result));
        }
Exemplo n.º 11
0
        protected DiscoveryResponse Discover(DiscoverQuery message)
        {
            RegisterPinNumber(message);

            return(new DiscoveryResponse(RequierdProperties(), new CurrentState()));
        }
Exemplo n.º 12
0
        public DataTable Parse(XmlDocument doc, string filter, bool prepareOnly, string whereClause)
        {
            DiscoverQuery dq;
            DataTable     dt = new DataTable();

            string[] elements;
            elements = filter.Split((@"\").ToCharArray());
            dq       = new DiscoverQuery(elements);
            XmlNodeList e;

            // We basically grab all the elements that match the last
            // item type in the path. So if you ask for '\Database\Dimensions\Dimension'
            // we get all the 'Dimension' elements and then in the next step we
            // spin through them to see if they are under the appropriate
            // parent elements.
            //e = doc.GetElementsByTagName(elements[elements.Length - 1]);
            e = doc.GetElementsByTagName(dq.Elements.Last.Value.Name);

            /*
             * Get elements matching last item in the filter
             * work up the parentNode properties, making sure
             * that they match the path.
             */
            List <XmlNode> finalList = new List <XmlNode>();

            for (int i = 0; i < e.Count; i++)
            {
                Context.CheckCancelled();

                XmlNode     node       = e.Item(i);
                XmlNode     parentNode = node;
                xmlaElement xe         = dq.Elements.Last.Value;

                while (xe != null)
                {
                    parentNode = parentNode.ParentNode;
                    if (xe.Previous != null &&
                        string.Compare(parentNode.Name, xe.Previous.Name, true) != 0)    // Case insensitive compare
                    {
                        break;
                    }
                    else if (xe.Previous == null)
                    {
                        finalList.Add(node);
                    }
                    xe = xe.Previous;
                }
            }

            // Now we generate the data table based on the data in one of the nodes
            bool tableBuilt = false;

            foreach (XmlNode n in finalList)
            {
                if (!tableBuilt)
                {
                    // Only build the table based on this node if it is not empty
                    // or if it is the last node in the collection
                    if ((n.HasChildNodes) || (finalList.IndexOf(n) == finalList.Count))
                    {
                        foreach (XmlNode fld in n.ChildNodes)
                        {
                            Context.CheckCancelled();

                            //TODO - coonverting the .Contains call to BinarySearch would
                            //       allow for the injection of a custom implementation of IComparer
                            //       in order to do a case insensitive search.
                            if (fld.NodeType == XmlNodeType.Element &&
                                (!fld.HasChildNodes ||
                                 (fld.HasChildNodes &&
                                  (fld.ChildNodes.Count == 1) &&
                                  (fld.FirstChild.NodeType == XmlNodeType.Text)
                                 )
                                ) &&
                                (!dt.Columns.Contains(fld.Name)))
                            {
                                // Only add nodes that are elements and have 0 or 1 children (do not add collections)
                                dt.Columns.Add(new DataColumn(fld.Name));
                            }
                        }

                        // Add attributes from last node
                        if (n.Attributes.Count > 0)
                        {
                            foreach (XmlAttribute xa in n.Attributes)
                            {
                                dt.Columns.Add(n.LocalName + "." + xa.LocalName);
                            }
                        }
                        addParentIdColumns(dq, dt, n);
                        tableBuilt = true;
                        // If this is a prepare call, we only need to return an empty table
                        //if (prepareOnly)
                        //{
                        //    return dt;
                        //}
                    }
                }
            }

            // loop throught the collection of nodes again to populate the table
            foreach (XmlNode n in finalList)
            {
                DataRow  dr   = dt.NewRow();
                string[] data = new string[dr.ItemArray.Length];

                foreach (XmlNode fld in n.ChildNodes)
                {
                    Context.CheckCancelled();

                    if ((dr.Table.Columns.IndexOf(fld.Name) >= 0) &&
                        (fld.HasChildNodes && fld.ChildNodes.Count == 1))
                    {
                        data[dr.Table.Columns.IndexOf(fld.Name)] = fld.FirstChild.InnerText;
                    }
                    addParentIdValues(dq, dt, data, fld);
                }
                if (!n.HasChildNodes)
                {
                    // we have found a empty node, just add any ancestor fields
                    addParentIdValues(dq, dt, data, n);
                }

                // Extract Attributes
                if (n.Attributes.Count > 0)
                {
                    foreach (XmlAttribute xa in n.Attributes)
                    {
                        data[dr.Table.Columns.IndexOf(n.LocalName + "." + xa.LocalName)] = xa.Value;
                    }
                }
                dr.ItemArray = data;
                dt.Rows.Add(dr);
            }

            if (whereClause.Length > 0)
            {
                dt.DefaultView.RowFilter = whereClause;
                dt = dt.DefaultView.ToTable();
            }
            return(dt);
        }
Exemplo n.º 13
0
 protected DiscoveryResponse Handle(DiscoverQuery discoverQuery)
 {
     return(new DiscoveryResponse(new string[] { MessageProperties.PinNumber }, new PowerState()));
 }
Exemplo n.º 14
0
 protected DiscoveryResponse Handle(DiscoverQuery discoverQuery)
 {
     return(new DiscoveryResponse(new PowerState()));
 }
Exemplo n.º 15
0
 protected DiscoveryResponse Discover(DiscoverQuery message)
 {
     return(new DiscoveryResponse(new PowerState()));
 }
Exemplo n.º 16
0
 protected DiscoveryResponse Discover(DiscoverQuery message)
 {
     return(new DiscoveryResponse(new InfraredReceiverState(), new InfraredSenderState()));
 }