Mercurial > silverbladetech
diff Messaging/Server/Listeners/MsmqListener.cs @ 29:9919ee227c93
msmq added
author | adminsh@apollo |
---|---|
date | Wed, 21 Mar 2012 22:09:18 +0000 |
parents | |
children | 7d9de5746f18 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Messaging/Server/Listeners/MsmqListener.cs Wed Mar 21 22:09:18 2012 +0000 @@ -0,0 +1,57 @@ +using System; +using System.Messaging; +using Common.Messages; +using GalaSoft.MvvmLight.Messaging; +using Server.Interfaces; + +namespace Server.Listeners +{ + public class MsmqListener : IListener + { + public bool IsListening { get; set; } + + private readonly MessageQueue _mq; + + public MsmqListener(string queueName) + { + _mq = MessageQueue.Exists(queueName) + ? new MessageQueue(queueName) + : MessageQueue.Create(queueName); + + _mq.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) }); + } + + public void Start() + { + if (IsListening) return; + + Messenger.Default.Send(new MsmqLogMessage() { Body = "Opening listener..." }); + IsListening = true; + while (IsListening) + { + try + { + var message = _mq.Receive().Body; + Messenger.Default.Send(new MsmqClientMessage()); + } + catch (MessageQueueException mqe) + { + Messenger.Default.Send(new MsmqLogMessage() { Body = mqe.Message }); + } + catch (Exception e) + { + Messenger.Default.Send(new MsmqLogMessage() { Body = e.Message }); + } + } + } + + public void Stop() + { + if (!IsListening) return; + Messenger.Default.Send(new MsmqLogMessage() { Body = "Closing listener..." }); + _mq.Close(); + IsListening = false; + Messenger.Default.Send(new MsmqLogMessage() { Body = "Closed." }); + } + } +}