/// <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); }
/// <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; }