Пример #1
0
    public void ProcessMsg()
    {
        if (ServerSocketMgr.MsgQue.Count == 0)
        {
            return;
        }

        var msg = ServerSocketMgr.MsgQue.Dequeue();

        Debug.Log("Server.ProcessMsg cmd:" + msg.Cmd);


        if (ServerSocketMgr.RecMsgDic.TryGetValue(msg.Cmd, out Func <Cmd4Rec> commandFunc))
        {
            Cmd4Rec cmd4Rec = commandFunc();
            cmd4Rec.Process(msg.Data);
        }

        //switch (msg.Cmd)
        //{
        //    case 666:

        //        if (ServerSocketMgr.RecMsgDic.TryGetValue(msg.Cmd, out Func<Cmd4Rec> commandFunc))
        //        {
        //            Cmd4Rec cmd4Rec = commandFunc();
        //            cmd4Rec.Process(msg.Data);
        //        }
        //        break;
        //}
    }
Пример #2
0
    // 连接
    public bool VConnect(string ip, int port)
    {
        LogMgr.I("TcpSocketMgr", "Connect", "IP = " + ip + "/n" + " Port = " + port, BeShowLog);
        try {
            if (BeConnect())
            {
                //如果当前有连接,就先关闭当期连接,在开启新的连接
                System.Threading.Thread.Sleep(10);
                this.Closed("ReConnectServer");
                System.Threading.Thread.Sleep(200);
            }
            IPEndPoint remoteServer = new IPEndPoint(IPAddress.Parse(ip), port);
            _Socket         = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            _Socket.NoDelay = true;
            BeSocketConnect = false;
            _Socket.BeginConnect(remoteServer, OnConnect, _Socket);
        } catch (System.Exception ex) {
            // 将断开连接消息压到解码队列
            //QueueDisconnect();
            this.Closed(ex.Message);
            Debug.LogError("网络链接异常:" + ex.Message);

            Cmd4Rec cmd = new Cmd4Rec();
            cmd.MsgID   = HEAD_MSG;
            cmd.Content = string.Format("error {0}", ex.Message);
            AbsNetMgr.Cmd4RecQueue.Enqueue(cmd);
            //NetWorkMessageResp.AddCommandSys (cmd);
            return(false);
        }
        return(true);
    }
Пример #3
0
 /// <summary>
 /// 注册Cmd4Rec到AbsNetMgr.Cmd4RecQueue
 /// AbsNetMgr.Cmd4RecQueue队列在主循环解析时就会执行具体消息返回逻辑
 /// </summary>
 /// <param name="cmd">Cmd.</param>
 public void RegisterCommand(Cmd4Rec cmd)
 {
     if (cmd == null)
     {
         return;
     }
     AbsNetMgr.Cmd4RecQueue.Enqueue(cmd);
 }
Пример #4
0
 //TODO 这里需要通过调用interface中的VTick来调用,这段是用来处理本地收到的cmd(首先收到byte[],然后转换成cmd存到队列里)队列中的cmd
 // tick
 public void VTick(uint nLimitedCount)
 {
     if (null != RecMsgCallback)
     {
         for (int i = 0; i < nLimitedCount; ++i)
         {
             if (AbsNetMgr.Cmd4RecQueue.Count > 0)
             {
                 Cmd4Rec msg = AbsNetMgr.Cmd4RecQueue.Dequeue();
                 RecMsgCallback(msg);
             }
             else
             {
                 break;
             }
         }
     }
 }
Пример #5
0
 /// <summary>
 /// 注册消息
 /// </summary>
 /// <param name="cmd"></param>
 public void RegisterCommand(Cmd4Rec cmd)
 {
     _NetBackMgr.RegisterCommand(cmd);
 }