Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        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);
        }