/// <summary>
        /// Checks if the concentrator contains a given node (that the user is allowed to see).
        /// </summary>
        /// <param name="To">Address of server.</param>
        /// <param name="NodeID">Node ID</param>
        /// <param name="SourceID">Optional Source ID</param>
        /// <param name="Partition">Optional Partition</param>
        /// <param name="ServiceToken">Optional Service token.</param>
        /// <param name="DeviceToken">Optional Device token.</param>
        /// <param name="UserToken">Optional User token.</param>
        /// <param name="Callback">Method to call when response is returned.</param>
        /// <param name="State">State object to pass on to callback method.</param>
        public void ContainsNode(string To, string NodeID, string SourceID, string Partition, string ServiceToken, string DeviceToken, string UserToken,
                                 BooleanResponseEventHandler Callback, object State)
        {
            StringBuilder Xml = new StringBuilder();

            Xml.Append("<containsNode xmlns='");
            Xml.Append(ConcentratorServer.NamespaceConcentrator);
            Xml.Append("'");
            this.AppendNodeAttributes(Xml, NodeID, SourceID, Partition);
            this.AppendTokenAttributes(Xml, ServiceToken, DeviceToken, UserToken);
            Xml.Append("'/>");

            this.client.SendIqGet(To, Xml.ToString(), (sender, e) =>
            {
                this.BooleanResponse(e, "containsNodeResponse", Callback, State);
            }, State);
        }
        private void BooleanResponse(IqResultEventArgs e, string ExpectedElement, BooleanResponseEventHandler Callback, object State)
        {
            XmlElement E;

            if (!e.Ok || (E = e.FirstElement) == null || E.LocalName != ExpectedElement || !CommonTypes.TryParse(E.InnerText, out bool Response))
            {
                e.Ok     = false;
                Response = false;
            }

            if (Callback != null)
            {
                try
                {
                    Callback(this, new BooleanResponseEventArgs(Response, e));
                }
                catch (Exception ex)
                {
                    Log.Critical(ex);
                }
            }
        }
 /// <summary>
 /// Checks if the concentrator contains a given node (that the user is allowed to see).
 /// </summary>
 /// <param name="To">Address of server.</param>
 /// <param name="Node">Node</param>
 /// <param name="ServiceToken">Optional Service token.</param>
 /// <param name="DeviceToken">Optional Device token.</param>
 /// <param name="UserToken">Optional User token.</param>
 /// <param name="Callback">Method to call when response is returned.</param>
 /// <param name="State">State object to pass on to callback method.</param>
 public void ContainsNode(string To, IThingReference Node, string ServiceToken, string DeviceToken, string UserToken,
                          BooleanResponseEventHandler Callback, object State)
 {
     this.ContainsNode(To, Node.NodeId, Node.SourceId, Node.Partition, ServiceToken, DeviceToken, UserToken, Callback, State);
 }