示例#1
0
        private static void ExecuteCommand(NetworkStream stream, List <byte> container, bool AsyncExecution,
                                           OnMessageEventHandler onMessage, OnErrorEventHandler onError)
        {
begin:
            for (var i = 0; i < container.Count - 1; i++)
            {
                if (container[i] == 0x0d && container[i + 1] == 0x0a)
                {
                    if (onMessage != null)
                    {
                        var command = Encoding.UTF8.GetString(container.ToArray(), 0, i);
                        if (AsyncExecution)
                        {
                            ThreadPool.QueueUserWorkItem(h => ExecuteMessage(stream, command, onMessage, onError));
                        }
                        else
                        {
                            ExecuteMessage(stream, command, onMessage, onError);
                        }
                    }
                    container.RemoveRange(0, i + 2);
                    goto begin;
                }
            }
        }
示例#2
0
 private static void ExecuteMessage(NetworkStream stream, string command,
                                    OnMessageEventHandler onMessage, OnErrorEventHandler onError)
 {
     try
     {
         onMessage(stream, command);
     }
     catch (Exception ex)
     {
         if (onError != null)
         {
             onError(stream, ex);
         }
     }
 }
示例#3
0
 /// <summary>
 /// 读取对方传送的数据,分隔为一个或者多个命令行(以换行回车为结束符号),然后回调onMessage委托方法。
 /// </summary>
 /// <param name="stream"></param>
 /// <param name="h"></param>
 /// <param name="buffer"></param>
 /// <param name="container"></param>
 /// <param name="AsyncExecution"></param>
 /// <param name="onMessage"></param>
 /// <param name="onError"></param>
 internal static void ExecuteRead(NetworkStream stream, IAsyncResult h, byte[] buffer, List <byte> container,
                                  bool AsyncExecution, OnMessageEventHandler onMessage, OnErrorEventHandler onError)
 {
     try
     {
         var len = stream.EndRead(h);
         for (var i = 0; i < len; i++)
         {
             container.Add(buffer[i]);
         }
         ExecuteCommand(stream, container, AsyncExecution, onMessage, onError);
     }
     catch (Exception ex)
     {
         if (onError != null)
         {
             onError(stream, ex);
         }
     }
 }
示例#4
0
    /// <summary>
    /// 注册方法
    /// </summary>
    /// <param name="Message">消息头</param>
    /// <param name="go">消息接收物体</param>
    /// <param name="eventHandler">事件回调</param>
    public void RegisterMessages(string Message, GameObject go, OnMessageEventHandler eventHandler)
    {
        if (eventHandler == null)
        {
            Debug.LogError("请注册一个方法" + go + eventHandler);
            return;
        }

        if (!CenterPool.ContainsKey(Message))
        {
            centerPool.Add(Message, new Dictionary <GameObject, OnMessageEventHandler>());
        }


        if (!centerPool[Message].ContainsKey(go))
        {
            centerPool[Message].Add(go, eventHandler);
        }
        else
        {
            Debug.Log("已经注册了方法");
        }
    }