协议说明

战斗场景通过Socket收发消息包,游戏中的消息收发大多数采用Tcp协议.为优化移动逻辑,移动消息包通过Udp或Kcp协议收发:

其中Tcp,Udp协议直接采用GameBox中的逻辑,Kcp采用开源逻辑实现.

  1. TcpConnection,UdpConnection继承Connection基类和接口IProtocolHost.
  2. KcpConnection只继承Connection.

这样做的原因是,GameBox提供给上层处理收发的逻辑在接口中实现.如果采用Gamebox逻辑必须实现IProtocolHost来处理这部分逻辑.而开源的Kcp协议不需要这样处理.它们共同继承Connection可以在基类中处理通用逻辑(比如缓冲区大小等)

public void Pack(IObjectReader reader, IByteArray writer)
        {
            var message = reader.ReadOne() as SendPackage;
            var byteArray = Pack(message);
            writer.WriteBytes(byteArray.Bytes, 0, byteArray.Length);
        }

        public void Unpack(IByteArray reader, IObjectWriter writer)
        {
            _receiveArray.WriteBytes(reader.ReadBytes());
            Unpack();
        }

消息包结构

消息包由消息头+消息体组成.其中消息头由6个字节组成:

消息头(6字节):3个字节表示消息体大小+1位表示是否压缩+2位表示消息ID.

游戏中所有收发的消息都是通过Protobuf来序列化和反序列化,通过MsgHandler注册消息id以便收到消息后触发.

GameBox消息发送流程如下:

消息接收流程如下:

results matching ""

    No results matching ""