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; //} }
// 连接 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); }
/// <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); }
//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; } } } }
/// <summary> /// 注册消息 /// </summary> /// <param name="cmd"></param> public void RegisterCommand(Cmd4Rec cmd) { _NetBackMgr.RegisterCommand(cmd); }