private void Dispatch(ProtoMessage msg) { if (msg == null) { return; } var type = msg.Type; var server = msg.Server; Dictionary <int, IMessageHandler> serverHandlers; _msgHandlers.TryGetValue(server, out serverHandlers); if (serverHandlers == null) { return; } IMessageHandler handler; serverHandlers.TryGetValue(type, out handler); if (handler == null) { return; } handler.Handle(msg); }
/// <summary> /// 解析Packet消息。 /// </summary> /// <param name="packet"></param> /// <param name="server"></param> /// <returns></returns> public static ProtoMessage Decode(Packet packet, Server server) { if (packet == null) { return(null); } ProtoMessage msg = null; switch (server) { case Server.PServer: msg = CmdType.CreatePServerEmptyMsg(packet.type); break; case Server.HServer: case Server.GServer: msg = CmdType.CreateHServerAndGServerEmptyMsg(packet.type); break; } if (msg == null) { return(null); } if (packet.content != null) { using (var mem = new MemoryStream()) { mem.Write(packet.content, 0, packet.content.Length); mem.Seek(0, SeekOrigin.Begin); msg.Content = Serializer.Deserialize(mem, null, msg.Model); mem.Close(); } } return(msg); }
public static Packet Encode(ProtoMessage msg) { if (msg == null) { return(null); } var packet = new Packet(); packet.type = msg.Type; if (msg.Content != null) { using (var mem = new MemoryStream()) { Serializer.Serialize(mem, msg.Content); mem.Seek(0, SeekOrigin.Begin); packet.content = mem.ToArray(); mem.Close(); } } return(packet); }