public IMessage Clone()
        {
            RegisteredClientsListMessage result = new RegisteredClientsListMessage();

            result.Group   = this.mGroup;
            result.Clients = new Collection <ICollaborativeClientDetails>();
            foreach (var collaborativeClientDetails in mClients)
            {
                var currClient = (CollaborativeClientDetails)collaborativeClientDetails;
                var newClient  = new CollaborativeClientDetails();
                newClient.ClientIPAddress  = currClient.ClientIPAddress;
                newClient.ClientListenPort = currClient.ClientListenPort;
                result.Clients.Add(newClient);
            }
            return(result);
        }
コード例 #2
0
        public bool Parse(Byte[] data)
        {
            //parse the message from "incoming data packet"
            String messageContent = Encoding.UTF8.GetString(data);
            //////////////////////////////////////////////////////////////////////////
            //Data validation
            XmlDocument xmlDoc = new XmlDocument();

            try
            {
                xmlDoc.LoadXml(messageContent);
            }
            catch (XmlException ex)
            {
                System.Diagnostics.Debug.WriteLine("There was an xml parsing error in the received message : " + ex.Message);
                return(false);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("There was an error in the received message : " + ex.Message);
                return(false);
            }

            MessageType type = MessageType.EmptyMessage;

            XmlElement messageElement = xmlDoc.DocumentElement;

            if (messageElement.Name == "message")
            {
                foreach (XmlNode node in messageElement.ChildNodes)
                {
                    if (node.Name == "type")
                    {
                        type = (MessageType)Enum.Parse(typeof(MessageType), node.InnerText);
                        break;
                    }
                }
            }

            if (type != MessageType.RegisterMessage)
            {
                System.Diagnostics.Debug.WriteLine("The supplied data was the wrong message type!");
                return(false);
            }

            //////////////////////////////////////////////////////////////////////////
            // The real data parsing
            this.mGroup  = "";
            this.mClient = null;
            this.mClient = new CollaborativeClientDetails();

            foreach (XmlNode node in messageElement.ChildNodes)
            {
                if (node.Name == "group")
                {
                    this.mGroup = node.InnerText;
                }
                else if (node.Name == "clientdetails")
                {
                    foreach (XmlNode detailsNode in node.ChildNodes)
                    {
                        if (detailsNode.Name == "name")
                        {
                            this.mClient.ClientName = detailsNode.InnerText;
                        }
                        else if (detailsNode.Name == "ipaddress")
                        {
                            this.mClient.ClientIPAddress = detailsNode.InnerText;
                        }
                        else if (detailsNode.Name == "listenport")
                        {
                            this.mClient.ClientListenPort = int.Parse(detailsNode.InnerText);
                        }
                    }
                }
            }

            //////////////////////////////////////////////////////////////////////////
            return(true);
        }