Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="queueItem"></param>
        /// <param name="receiverConsoleId">null or empty string is a broardcast</param>
        public void Enqueue(IConsoleMessageQueueItem queueItem, string receiverConsoleId)
        {
            if (queueItem == null)
            {
                throw new ArgumentNullException("queueItem");
            }
            if (receiverConsoleId == "")
            {
                receiverConsoleId = null;
            }


            lock (_lock)
            {
                var queueElement = new ConsoleMessageQueueElement
                {
                    ReceiverConsoleId = receiverConsoleId,
                    QueueItemNumber   = ++_queueItemCounter,
                    EnqueueTime       = DateTime.Now,
                    QueueItem         = queueItem
                };


                _elements.Add(queueElement);

                SerializeMessagesToFileSystem();
            }
        }
        public bool TryDeserialize(XElement serializedObject, IXmlSerializer xmlSerializer, out object deserializedObject)
        {
            if (serializedObject == null)
            {
                throw new ArgumentNullException("serializedObject");
            }
            if (xmlSerializer == null)
            {
                throw new ArgumentNullException("xmlSerializer");
            }

            deserializedObject = null;

            if (serializedObject.Name.LocalName != "ConsoleMessageQueueElements")
            {
                return(false);
            }

            List <ConsoleMessageQueueElement> queueElements = new List <ConsoleMessageQueueElement>();

            foreach (XElement queueElement in serializedObject.Elements())
            {
                ConsoleMessageQueueElement result = new ConsoleMessageQueueElement();
                result.EnqueueTime     = DateTime.Parse(queueElement.Attribute("time").Value);
                result.QueueItemNumber = Int32.Parse(queueElement.Attribute("number").Value);
                if (queueElement.Attribute("console") != null)
                {
                    result.ReceiverConsoleId = queueElement.Attribute("console").Value;
                }

                try
                {
                    result.QueueItem = (IConsoleMessageQueueItem)xmlSerializer.Deserialize(queueElement.Elements().First());
                }
                catch (Exception ex)
                {
                    string errorInfo = string.Format("Deserialization of message #{0} failed with an '{1}' exception - the message has been dropped. Details: '{2}'", queueElement.Attribute("number").Value, ex.GetType().Name, ex.Message);
                    // pad queue to ensure sequence.
                    LoggingService.LogWarning("ConsoleMessageQueue", errorInfo);
                    result.QueueItem = new LogEntryMessageQueueItem {
                        Level = LogLevel.Error, Message = errorInfo, Sender = this.GetType()
                    };
                }

                queueElements.Add(result);
            }

            deserializedObject = queueElements;
            return(true);
        }
Пример #3
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="queueItem"></param>
        /// <param name="receiverConsoleId">null or empty string is a broardcast</param>        
        public void Enqueue(IConsoleMessageQueueItem queueItem, string receiverConsoleId)
        {
            if (queueItem == null) throw new ArgumentNullException("queueItem");
            if (receiverConsoleId == "") receiverConsoleId = null;


            lock (_lock)
            {
                var queueElement = new ConsoleMessageQueueElement
                   {
                       ReceiverConsoleId = receiverConsoleId,
                       QueueItemNumber = ++_queueItemCounter,
                       EnqueueTime = DateTime.Now,
                       QueueItem = queueItem
                   };


                _elements.Add(queueElement);

                SerializeMessagesToFileSystem();
            }
        }
        public bool TryDeserialize(XElement serializedObject, IXmlSerializer xmlSerializer, out object deserializedObject)
        {
            if (serializedObject == null) throw new ArgumentNullException("serializedObject");
            if (xmlSerializer == null) throw new ArgumentNullException("xmlSerializer");

            deserializedObject = null;

            if (serializedObject.Name.LocalName != "ConsoleMessageQueueElements") return false;

            List<ConsoleMessageQueueElement> queueElements = new List<ConsoleMessageQueueElement>();

            foreach (XElement queueElement in serializedObject.Elements())
            {
                ConsoleMessageQueueElement result = new ConsoleMessageQueueElement();
                result.EnqueueTime = DateTime.Parse(queueElement.Attribute("time").Value);
                result.QueueItemNumber = Int32.Parse(queueElement.Attribute("number").Value);
                if (queueElement.Attribute("console") != null)
                    result.ReceiverConsoleId = queueElement.Attribute("console").Value;

                try
                {
                    result.QueueItem = (IConsoleMessageQueueItem)xmlSerializer.Deserialize(queueElement.Elements().First());
                }
                catch (Exception ex)
                {
                    string errorInfo = string.Format("Deserialization of message #{0} failed with an '{1}' exception - the message has been dropped. Details: '{2}'", queueElement.Attribute("number").Value, ex.GetType().Name, ex.Message);
                    // pad queue to ensure sequence.
                    LoggingService.LogWarning("ConsoleMessageQueue", errorInfo);
                    result.QueueItem = new LogEntryMessageQueueItem { Level = LogLevel.Error, Message = errorInfo, Sender = this.GetType() }; 
                }

                queueElements.Add(result);
            }

            deserializedObject = queueElements;
            return true;
        }