协议说明
战斗场景通过Socket收发消息包,游戏中的消息收发大多数采用Tcp协议.为优化移动逻辑,移动消息包通过Udp或Kcp协议收发:
其中Tcp,Udp协议直接采用GameBox中的逻辑,Kcp采用开源逻辑实现.
- TcpConnection,UdpConnection继承Connection基类和接口IProtocolHost.
- 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消息发送流程如下:

消息接收流程如下:
