// 封包,依次写入协议数据长度、协议id、协议内容 public static byte[] PackNetMsg(NetMsgData data) { ushort protoId = data.ID; MemoryStream ms = null; using (ms = new MemoryStream()) { ms.Position = 0; BinaryWriter writer = new BinaryWriter(ms); byte[] pbdata = Serialize(data.Data); ushort msglen = (ushort)pbdata.Length; writer.Write(msglen); writer.Write(protoId); writer.Write(pbdata); writer.Flush(); return(ms.ToArray()); } }
// 派发 public static void HandleMsg(byte[] buffer) { NetMsgData data = ProtoBufUtil.UnpackNetMsg(buffer); var protoID = data.ID; NetHandler callback; if (m_EventMap.TryGetValue(protoID, out callback)) { GameLog.Log("[Receive]Server :protoID:{0},data:{1}", protoID, data.Data); if (callback != null) { callback(data.Data); } } else { GameLog.Log("[Receive]收到未监听的服务器消息:protoID:{0},data:{1}", protoID, data.Data); } }
private void HandleMessage(Socket client, byte[] buffer) { NetMsgData data = ProtoBufUtil.UnpackNetMsg(buffer); var protoID = data.ID; Console.WriteLine("[Receive]{0} | {1} | {2} | {3}", client.RemoteEndPoint, data.ID, data.Data, DateTime.Now); switch (protoID) { case (OpCode.C2S_TestRequest): data.ID = OpCode.S2C_TestResponse; data.Data = "Test OK!!"; SendOneMsg(client, ProtoBufUtil.PackNetMsg(data)); Console.WriteLine($"[Send]ID:{data.ID},Data:{data.Data}"); break; default: break; } //m_msgPool.Add(data); }
// 解包,依次写出协议数据长度、协议id、协议数据内容 public static NetMsgData UnpackNetMsg(byte[] msgData) { MemoryStream ms = null; using (ms = new MemoryStream(msgData)) { BinaryReader reader = new BinaryReader(ms); ushort msgLen = reader.ReadUInt16(); ushort protoId = reader.ReadUInt16(); string pbdata = Deserialize <string>(reader.ReadBytes(msgLen)); if (msgLen <= msgData.Length - 4)//todo ?? { NetMsgData data = new NetMsgData(protoId, pbdata); return(data); } else { Console.WriteLine("协议长度错误"); } } return(null); }
public void broad_cast_zone_msg(int cmd, NetMsgData data) { }
public static void SendKCPMsg(NetMsgData data) { KCPClient.instance.Send(ProtoBufUtil.PackNetMsg(data)); GameLog.Log("[Send]ID:{0},Data:{1}", data.ID, data.Data); }