/// <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(); }
/// <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); } }