Example #1
0
        /// <summary>
        /// The method reads the network stream and will then decode the received WasObject.
        /// Afterwards it calls the 'WasObjectChanged' event iff the WASObject
        /// has changed (Comparison with mLastWasObject).
        /// </summary>
        private void HandleWasData(ITcpClient tcpClient)
        {
            using (MemoryStream stream = tcpClient.ReadNetworkStream(WasObject.XmlWasObjectEndTagRegex))
            {
                WasObject wasObject = null;

                try
                {
                    stream.Position = 0;
                    wasObject       = WasObject.Deserialize(stream);
                }

                catch
                {
                    string xml = Utilities.StreamToString(stream, Constants.WasEncoding);
                    wasObject = WasObject.Deserialize(xml);
                }

                this.mLogger.LogInformation("WAS XML deserialized", InformationType.WasListener_WasObjectDeserialized);

                bool wasObjectChanged = !wasObject.Equals(this.mLastWasObject);

                if (wasObjectChanged && this.WasObjectChanged != null)
                {
                    this.mLastWasObject = wasObject;

                    Thread eventThread = new Thread(new ThreadStart(delegate
                    {
                        this.WasObjectChanged(wasObject);
                    }))
                    {
                        IsBackground = true
                    };

                    eventThread.Start();
                }
            }
        }