Tcp连接依赖Gamebox中的Network服务和字节流预分配,在初始化注册服务时便已完成该操作.

        public TcpConnection()
        {
            GameWorld.Instance.OnApplicationQuit(Disconnect);
            new ServiceTask(new[]
            {
                typeof(IByteStorage),
                typeof(INetworkManager)
            }).Start().Continue(t =>
            {
                _iNetworkManager = ServiceCenter.GetService<INetworkManager>();
                return null;
            });
        }

通过Http连接,会获得游戏服务器地址和房间key.首先开始Tcp协议的Socket连接返回的地址.如果连接成功会:

  1. 开始心跳包,检测客户端和服务器一直保持连接.
  2. 主动发送房间登录消息(携带房间key).
TcpConnection.cs:
private void OnServerStateChange(string state)
     {
         switch (state)
         {
             case Connected:
                 Debuger.Log("OnTeamServerState" + Connected);
                 ServerConnected();
                 break;
             case Connecting:
                 Debuger.Log("OnTeamServerState" + Connecting);
                 break;
             case Disconnected:
                 var str = Singleton.GetInstance<Localization>().Get(ExcelManager.settings_error[1].error);
                 Service.UIManager.ShowPop(str);
                 Debuger.Log("OnTeamServerState" + Disconnected);
                 break;
         }
     }

     private void ServerConnected()
        {
            heartBeatMsg = new HeartBeatMsg((int)MsgTypeCmd.HeartBeat);
            new RoomLoginMsg((int)MsgTypeCmd.Login);
        }

服务器返回战斗场景数据,开始战场数据处理,本地场景加载,战场UI加载等逻辑.

为优化移动逻辑,可以选择采用Tcp,Udp,Kcp协议处理移动消息:

            MsgBindTCPSession msgBindTcpSession = new MsgBindTCPSession();
            msgBindTcpSession.id = HttpAgent.ID;
            msgBindTcpSession.key = HttpAgent.RoomServerkey;
            if (Connection.ESocketType == Connection.ESocket.Kcp)
            {
                MsgHandler.Send_Kcp((int)MsgTypeCmd.BindTCPSession, msgBindTcpSession);
            }
            else if (Connection.ESocketType == Connection.ESocket.Udp)
            {
                MsgHandler.Send_Udp((int)MsgTypeCmd.BindTCPSession, msgBindTcpSession);
            }

results matching ""

    No results matching ""