예제 #1
0
        /// <summary>
        /// Handles all packets received by the game auth server.
        /// </summary>
        /// <param name="client">The socket client.</param>
        /// <param name="Packet">The packet.</param>
        /// <returns>ALWAYS returns false.</returns>
        private static bool HandlePacket(SocketClient client, DataPacket Packet)
        {
            if (Packet.PacketID == 9001)
            {
                if (Packet.ReadString(4, 16) == Program.Config.ReadString("ServerPassword"))
                {
                    string Account = Packet.ReadString(20, 16);
                    int DatabaseUID = Packet.ReadInt32(36);
                    if (DatabaseUID == 0)
                        return false;
                    uint EntityUID = Packet.ReadUInt32(40);
                    if (EntityUID == 0)
                        return false;

                    if (Core.Kernel.Clients.Contains(EntityUID))
                    {
                        UIDCollection.TryRemove(EntityUID);
                        return false;
                    }

                    if (UIDCollection.Contains(EntityUID))
                    {
                        int secondkey;
                        if (UIDCollection.TryGetSecondKey(EntityUID, out secondkey))
                        {
                            if (DatabaseUID == secondkey)
                                UIDCollection.TryRemove(EntityUID);
                        }
                        return false;
                    }

                    if (UIDCollection.Contains(DatabaseUID))
                    {
                        uint firstkey;
                        if (UIDCollection.TryGetFirstKey(DatabaseUID, out firstkey))
                        {
                            UIDCollection.TryRemove(DatabaseUID);
                        }
                    }

                    UIDCollection.TryAdd(EntityUID, DatabaseUID, DateTime.Now.AddMinutes(10));
                    //	return false;
                }
            }
            return false;
        }