public void RegisterMessage <T>(ServiceNo id, Action <Socket, T> action) where T : IMessage { MessageHandle handle; if (MessageHandleMap.TryGetValue(id, out handle)) { } else { Type t = typeof(T); System.Reflection.PropertyInfo pi = t.GetProperty("Parser", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.Public); MessageParser parser = (MessageParser)pi.GetValue(null); handle = new MessageHandle(parser); MessageHandleMap[id] = handle; } if (handle != null) { Action <Socket, IMessage> baseAction = new Action <Socket, IMessage>((socket, message) => { action(socket, (T)message); }); handle.Add(baseAction); } }
public void SendMessage(ServiceNo id, IMessage data, Socket socket) { Message message = new Message(id, data, socket); lock (mMessageLockObj) { mMessageQueue.Enqueue(message); } mResetEvent.Set(); }
public Message(ServiceNo id, IMessage data, Socket socket) { mID = id; data.WriteTo(mMS); mData = mMS.ToArray(); mEndPointList = new List <string>(); if (socket != null) { mEndPointList.Add(socket.RemoteEndPoint.ToString()); } }
public Message(ServiceNo id, IMessage data, List <Socket> socketList) { mID = id; data.WriteTo(mMS); mData = mMS.ToArray(); mEndPointList = new List <string>(); if (socketList != null) { for (int i = 0; i < socketList.Count; i++) { mEndPointList.Add(socketList[i].RemoteEndPoint.ToString()); } } }
public void BroadcastMessage(ServiceNo id, IMessage data, List <Socket> socketList = null) { if (socketList == null) { socketList = new List <Socket>(); foreach (var v in mClientInfoMap) { socketList.Add(v.Value.mSocket); } } Message message = new Message(id, data, socketList); lock (mMessageLockObj) { mMessageQueue.Enqueue(message); } mResetEvent.Set(); }
public Message(ServiceNo id, IMessage data) { mID = id; data.WriteTo(mMS); mData = mMS.ToArray(); }