andrew4582

MSMQWriter

Aug 21st, 2010
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.89 KB | None | 0 0
  1. using System.IO;
  2. using System.Text;
  3.  
  4. namespace System.Messaging {
  5.     /// <summary>
  6.     /// MSMQ Writer, Can be used a trace writer
  7.     /// </summary>
  8.     public class MSMQWriter:TextWriter {
  9.         /// <summary>
  10.         /// Used to to purge all messages when token is found in dequeuing messages
  11.         /// </summary>
  12.         public const string PURGE_TOKEN = "[PURGE]";
  13.  
  14.         MessageQueue _msmq;
  15.         bool _setup;
  16.         public Exception SetupError { get; set; }
  17.         readonly ActiveXMessageFormatter _formater;
  18.  
  19.         public bool IsAvailable { get; set; }
  20.         public string MessageQueuePath { get; set; }
  21.  
  22.         public MSMQWriter()
  23.             : this(null) {
  24.        
  25.             _formater = new ActiveXMessageFormatter();
  26.  
  27.         }
  28.         public MSMQWriter(string msmqPath)
  29.             : base() {
  30.             this.MessageQueuePath = msmqPath ?? @".\private$\dbmon";
  31.         }
  32.         void SetupQueue() {
  33.             try {
  34.                 if(_setup)
  35.                     return;
  36.  
  37.                 if(!MessageQueue.Exists(this.MessageQueuePath))
  38.                     MessageQueue.Create(this.MessageQueuePath);
  39.  
  40.                 _msmq = new MessageQueue();
  41.                 _msmq.Path = this.MessageQueuePath;
  42.                 _msmq.Formatter = _formater;
  43.                 IsAvailable = _msmq.CanWrite;
  44.             }
  45.             catch(Exception err) {
  46.                 SetupError = err;
  47.                 IsAvailable = false;
  48.                 throw;
  49.             }
  50.             finally {
  51.                 _setup = true;
  52.             }
  53.         }
  54.         public override void Write(char[] buffer,int index,int count) {
  55.             Send(new String(buffer,index,count));
  56.         }
  57.         public override void Write(string value) {
  58.             Send(value);
  59.         }
  60.         public void Write(string value,MessagePriority priority) {
  61.             Send(value,priority);
  62.         }
  63.         void Send(string value) {
  64.             Send(value,MessagePriority.Normal);
  65.         }
  66.        
  67.         void Send(string value,MessagePriority priority) {
  68.             if(!_setup)
  69.                 SetupQueue();
  70.  
  71.             if(!IsAvailable) {
  72.                 return;
  73.             }
  74.  
  75.             var message = new Message(value);
  76.             message.Formatter = _formater;
  77.             message.Priority = priority;
  78.             _msmq.Send(message);
  79.         }
  80.         public void WritePurgeMessage() {
  81.             if(!_setup)
  82.                 SetupQueue();
  83.  
  84.             if(!IsAvailable) {
  85.                 return;
  86.             }
  87.              
  88.             string body = _msmq.Path + PURGE_TOKEN;
  89.             var message = new Message(body);
  90.             message.Formatter = _formater;
  91.             message.Priority = MessagePriority.Highest;
  92.             _msmq.Send(message);
  93.         }
  94.         public override Encoding Encoding {
  95.             get { return Encoding.Default; }
  96.         }
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment