Exemple #1
0
        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);
            }
        }
Exemple #2
0
        public void SendMessage(ServiceNo id, IMessage data, Socket socket)
        {
            Message message = new Message(id, data, socket);

            lock (mMessageLockObj)
            {
                mMessageQueue.Enqueue(message);
            }
            mResetEvent.Set();
        }
Exemple #3
0
 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());
     }
 }
Exemple #4
0
 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());
         }
     }
 }
Exemple #5
0
        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();
 }