示例#1
0
        /// <summary>
        /// Fecha todas as conexões.
        /// </summary>
        public static void Close()
        {
            //Não permite nenhuma conexão (evitar possíveis erros)
            Settings.CantConnectNow = true;
            Settings.Server         = null;

            //Limpa as configurações
            Configuration.Clear();
            Authentication.Clear();
            LoginNetwork.Shutdown();
            WorldNetwork.Shutdown();
            CheckSum.Clear();

            //Fecha o arquivo de logs
            FileLog.CloseFileLog();
            Common_DB.Close();
        }
示例#2
0
        /// <summary>
        /// Verifica se a versão do cliente e nome de usuário estão corretos.
        /// </summary>
        /// <param name="hexID"></param>
        /// <param name="data"></param>
        public static void Login(string hexID, NetIncomingMessage data)
        {
            //Se o bloqueio de login estiver ativo, envia mensagem de erro para o cliente
            if (Settings.CantConnectNow)
            {
                LoginPacket.Message(hexID, (int)PacketList.LoginServer_Client_Maintenance);
                return;
            }

            //Verifica a versão do jogo; se invalido, envia mensagem de erro
            var version = data.ReadString();

            if (Settings.Version.CompareTo(version) != 0)
            {
                LoginPacket.Message(hexID, (int)PacketList.InvalidVersion);
                return;
            }

            //verifica o checksum do cliente; se invalido, envia mensagem de erro
            var checksum = data.ReadString();

            if (CheckSum.Enabled)
            {
                if (!CheckSum.Compare(version, checksum))
                {
                    LoginPacket.Message(hexID, (int)PacketList.CantConnectNow);
                    return;
                }
            }

            var pData = FindByHexID(hexID);

            pData.Username = data.ReadString().ToLower();     //lê o nome de usuário em uma variavel temporaria para distinguir do 'account
            pData.Password = data.ReadString();               //lê a senha de usuário

            //Verifica se o usuário está na lista de banidos, caso verdadeiro, envia mensagem de erro
            if (Accounts_DB.IsBanned(Accounts_DB.GetID(pData.Username)))
            {
                LoginPacket.Message(pData.HexID, (int)PacketList.LoginServer_Client_AccountBanned);
                return;
            }

            //Verifica se o nome existe no banco de dados, caso falso, envia a mensagem de erro
            if (!Accounts_DB.ExistAccount(pData.Username))
            {
                LoginPacket.Message(pData.HexID, (int)PacketList.LoginServer_Client_InvalidNamePass);
                return;
            }

            //Verifica se o usuário está ativo, caso falso, envia mensagem de erro
            if (!Accounts_DB.IsActive(pData.Username))
            {
                LoginPacket.Message(pData.HexID, (int)PacketList.LoginServer_Client_AccountDisabled);
                return;
            }

            //Envia mensagem para outros servidores para saber se há algum usuario com o mesmo nome online
            if (WorldNetwork.IsWorldServerConnected())
            {
                WorldPacket.IsPlayerConnected(pData.Username);
            }
            else //se não há nenhum servidor conectado, continua para o próximo método
            {
                Login(false, pData.Username);
            }
        }