有一个项目多线程通信,就选择了消息队列进行通信,所以就写了一个这样的辅助类.
1
/******************************************************************
2
* Copyright(c) KiteSoft Studio
3
* Description : MessageQueue helper class
4
* CreateDate : 2006-05-11 02:28:58
5
* Creater : Johnson Cao
6
* LastChangeDate: 2007-04-11
7
* LastChanger : Johnson Cao
8
* Version Info : 1.1
9
* Email : KiteSupport@gmail.com
10
* ******************************************************************/
11![]()
12
using System;
13
using System.Collections.Generic;
14
using System.Text;
15
using System.Messaging;
16![]()
17
namespace KiteSoft.Utils
18
{
19
/// <summary>
20
/// Message Queue helper class
21
/// </summary>
22
/// <typeparam name="T"></typeparam>
23
public class MessageQueueHelper<T> : MarshalByRefObject where T : class, new()
24
{
25
public MessageQueueHelper(string path)
26
{
27
m_AllowException = true;
28
if (MessageQueue.Exists(path))
29
m_Msq = new MessageQueue(path);
30
else
31
{
32
m_Msq = MessageQueue.Create(path);
33
m_Msq.MaximumQueueSize = CommonSettings.QueueMaxSize;
34
}
35
m_Msq.SetPermissions("Everyone", System.Messaging.MessageQueueAccessRights.FullControl);
36![]()
37
m_Msq.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) });
38
m_Msq.Label = typeof(T).Name;
39
m_Msq.ReceiveCompleted += new ReceiveCompletedEventHandler(Msq_ReceiveCompleted);
40
}
41![]()
42
~MessageQueueHelper()
43
{
44
Close();
45
}
46![]()
47
private MessageQueue m_Msq;
48
private bool m_AllowException;
49![]()
50
public bool AllowException
51
{
52
get { return m_AllowException; }
53
set { m_AllowException = value; }
54
}
55![]()
56
private bool MssageQueueReady()
57
{
58
if (m_Msq == null)
59
if (AllowException)
60
throw new Exception("The message queue is not ready.");
61
else
62
return false;
63
else
64
return true;
65
}
66![]()
67
public void Send(object msg)
68
{
69
if (!msg.GetType().Equals(typeof(T))) return;
70
if (!MssageQueueReady()) return;
71
try
72
{
73
m_Msq.Send(msg);
74
}
75
catch
76
{
77
// TODO: Send Message queue failed
78
}
79
}
80![]()
81
public void Send(object msg, string label)
82
{
83
if (!MssageQueueReady()) return;
84![]()
85
try
86
{
87
m_Msq.Send(msg, label);
88
}
89
catch
90
{
91
// TODO: Send Message queue failed
92
}
93
}
94![]()
95
public T Receive()
96
{
97
if (!MssageQueueReady()) return default(T);
98
Message m = m_Msq.Receive(MessageQueueTransactionType.Single);
99
return m.Body as T;
100
}
101![]()
102
public IList<T> ReceiveAll()
103
{
104
if (!MssageQueueReady()) return null;
105
Message[] ms = m_Msq.GetAllMessages();
106
IList<T> list = new List<T>();
107
foreach (Message m in ms)
108
{
109
list.Add(m.Body as T);
110
}
111![]()
112
return list;
113
}
114![]()
115
public T Peek()
116
{
117
if (!MssageQueueReady()) return default(T);
118
//m_Msq.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) });
119
Message m = m_Msq.Peek();
120
return m.Body as T;
121
}
122![]()
123
public void AsynchronismReceive()
124
{
125
if (!MssageQueueReady()) return;
126
m_Msq.BeginReceive();
127
}
128![]()
129
public void EndReceive()
130
{
131
if (!MssageQueueReady()) return;
132
}
133![]()
134
private void Msq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
135
{
136
MessageQueue mq = (MessageQueue)sender;
137
Message m = mq.EndReceive(e.AsyncResult);
138
if (ReceiveEvent != null)
139
ReceiveEvent(this, new ReceiveEventArgs<T>(m.Body as T));
140
mq.BeginReceive();
141
}
142![]()
143
public event ReceiveEventHandler ReceiveEvent;
144![]()
145
public delegate void ReceiveEventHandler(object sender, ReceiveEventArgs<T> e);
146![]()
147
public void Close()
148
{
149
if (m_Msq != null)
150
m_Msq.Close();
151
}
152
}
153![]()
154
public class ReceiveEventArgs<T> : EventArgs where T : class
155
{
156
public ReceiveEventArgs(T result)
157
{
158
m_Result = result;
159
}
160![]()
161
private T m_Result;
162
public T Result
163
{
164
get { return m_Result; }
165
//set { m_Result = value; }
166
}
167
}
168
}
169![]()
170
171![]()
/****************************************************************** 2
* Copyright(c) KiteSoft Studio 3
* Description : MessageQueue helper class 4
* CreateDate : 2006-05-11 02:28:58 5
* Creater : Johnson Cao 6
* LastChangeDate: 2007-04-11 7
* LastChanger : Johnson Cao 8
* Version Info : 1.1 9
* Email : KiteSupport@gmail.com 10
* ******************************************************************/ 11

12
using System; 13
using System.Collections.Generic; 14
using System.Text; 15
using System.Messaging; 16

17
namespace KiteSoft.Utils 18
{ 19
/// <summary> 20
/// Message Queue helper class 21
/// </summary> 22
/// <typeparam name="T"></typeparam> 23
public class MessageQueueHelper<T> : MarshalByRefObject where T : class, new() 24
{ 25
public MessageQueueHelper(string path) 26
{ 27
m_AllowException = true; 28
if (MessageQueue.Exists(path)) 29
m_Msq = new MessageQueue(path); 30
else 31
{ 32
m_Msq = MessageQueue.Create(path); 33
m_Msq.MaximumQueueSize = CommonSettings.QueueMaxSize; 34
} 35
m_Msq.SetPermissions("Everyone", System.Messaging.MessageQueueAccessRights.FullControl); 36

37
m_Msq.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) }); 38
m_Msq.Label = typeof(T).Name; 39
m_Msq.ReceiveCompleted += new ReceiveCompletedEventHandler(Msq_ReceiveCompleted); 40
} 41

42
~MessageQueueHelper() 43
{ 44
Close(); 45
} 46

47
private MessageQueue m_Msq; 48
private bool m_AllowException; 49

50
public bool AllowException 51
{ 52
get { return m_AllowException; } 53
set { m_AllowException = value; } 54
} 55

56
private bool MssageQueueReady() 57
{ 58
if (m_Msq == null) 59
if (AllowException) 60
throw new Exception("The message queue is not ready."); 61
else 62
return false; 63
else 64
return true; 65
} 66

67
public void Send(object msg) 68
{ 69
if (!msg.GetType().Equals(typeof(T))) return; 70
if (!MssageQueueReady()) return; 71
try 72
{ 73
m_Msq.Send(msg); 74
} 75
catch 76
{ 77
// TODO: Send Message queue failed 78
} 79
} 80

81
public void Send(object msg, string label) 82
{ 83
if (!MssageQueueReady()) return; 84

85
try 86
{ 87
m_Msq.Send(msg, label); 88
} 89
catch 90
{ 91
// TODO: Send Message queue failed 92
} 93
} 94

95
public T Receive() 96
{ 97
if (!MssageQueueReady()) return default(T); 98
Message m = m_Msq.Receive(MessageQueueTransactionType.Single); 99
return m.Body as T; 100
} 101

102
public IList<T> ReceiveAll() 103
{ 104
if (!MssageQueueReady()) return null; 105
Message[] ms = m_Msq.GetAllMessages(); 106
IList<T> list = new List<T>(); 107
foreach (Message m in ms) 108
{ 109
list.Add(m.Body as T); 110
} 111

112
return list; 113
} 114

115
public T Peek() 116
{ 117
if (!MssageQueueReady()) return default(T);118
//m_Msq.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) }); 119
Message m = m_Msq.Peek(); 120
return m.Body as T; 121
} 122

123
public void AsynchronismReceive() 124
{ 125
if (!MssageQueueReady()) return; 126
m_Msq.BeginReceive(); 127
} 128

129
public void EndReceive() 130
{ 131
if (!MssageQueueReady()) return; 132
} 133

134
private void Msq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e) 135
{ 136
MessageQueue mq = (MessageQueue)sender; 137
Message m = mq.EndReceive(e.AsyncResult); 138
if (ReceiveEvent != null) 139
ReceiveEvent(this, new ReceiveEventArgs<T>(m.Body as T)); 140
mq.BeginReceive(); 141
} 142

143
public event ReceiveEventHandler ReceiveEvent; 144

145
public delegate void ReceiveEventHandler(object sender, ReceiveEventArgs<T> e); 146

147
public void Close() 148
{ 149
if (m_Msq != null) 150
m_Msq.Close(); 151
} 152
} 153

154
public class ReceiveEventArgs<T> : EventArgs where T : class 155
{ 156
public ReceiveEventArgs(T result) 157
{ 158
m_Result = result; 159
} 160

161
private T m_Result; 162
public T Result 163
{ 164
get { return m_Result; } 165
//set { m_Result = value; } 166
} 167
} 168
} 169

170
171




浙公网安备 33010602011771号