Пример #1
0
        private void GatewaySocket_PacketReceived(Packet packet)
        {
            switch ((OpCodes.GatewayServer)packet.Opcode)
            {
                #region OpCodes.GatewayServer.ServerList
            case OpCodes.GatewayServer.ServerList:
                Servers.Clear();
                while (packet.ReadByte() != 0)
                {
                    packet.ReadByte();    //server ID
                    packet.ReadAscii();   //Server Name
                }

                while (packet.ReadByte() == 1)
                {
                    var serverId        = packet.ReadShort();
                    var serverName      = packet.ReadAscii();
                    var currentCapacity = packet.ReadShort();
                    var maxCapacity     = packet.ReadShort();
                    var status          = packet.ReadByte();
                    Servers.Add(new ServerList(serverId, serverName, currentCapacity, maxCapacity, status));
                }
                break;
                #endregion

                #region OpCodes.GatewayServer.LoginReply
            case OpCodes.GatewayServer.LoginReply:
                if (packet.ReadByte() == 1)
                {
                    var sessionId = packet.ReadUInt();
                    _agentServerIp        = packet.ReadAscii();
                    _agentServerPort      = packet.ReadUShort();
                    _doAgentServerConnect = true;

                    var response = new Packet((ushort)OpCodes.GatewayServer.LoginReply, true);
                    response.WriteByte(1);
                    response.WriteUInt(sessionId);
                    response.WriteAscii("127.0.0.1");
                    response.WriteUShort(_mLocalPort);
                    packet = response;
                    packet.Lock();
                }
                break;
                #endregion
            }
            if (InvokeMethodWithSkip(GatewayPacketReceived, packet))
            {
                return;                                                      //Skip
            }
            SendFromServer(packet);
        }