Beispiel #1
0
        /// <summary>
        /// Loop do servidor.
        /// </summary>
        public static void Loop()
        {
            try {
                // Recebe os dados do login server
                LoginNetwork.ReceivedData();

                // Verifica e tenta uma nova conexão com o world server
                WorldNetwork.WorldServerConnect();

                // Recebe os dados do world server
                WorldNetwork.WorldServerReceiveData();

                // Verifica cada ip bloqueado, se o tempo expirou remove da lista
                GeoIp.CheckIpBlockedTime();

                if (Environment.TickCount >= tick + 1000)
                {
                    CPS   = count;
                    tick  = Environment.TickCount;
                    count = 0;
                }

                count++;
            }
            catch {
            }
        }
Beispiel #2
0
        /// <summary>
        /// Loop do servidor.
        /// </summary>
        public static void Loop()
        {
            try {
                //Recebe os dados do world server
                WorldNetwork.ReceivedData();

                // Verifica e tenta uma nova conexão com o game server
                GameNetwork.GameServerConnect();

                // Recebe os dados do game server
                GameNetwork.GameServerReceiveData();

                // Percorre todos os hexid e verifica se o tempo limite já foi ultrapassado ...
                // Se verdadeiro, é retirado da lista
                Authentication.VerifyHexID();

                // Percorre todos os hexid de jogadores, se ambos hexid estiverem corretos, aceita a conexão
                Authentication.VerifyPlayerHexID();

                if (Environment.TickCount >= tick + 1000)
                {
                    CPS   = count;
                    tick  = Environment.TickCount;
                    count = 0;
                }

                count++;
            }
            catch (Exception ex) {
                throw new Exception($"Ocorreu um erro: {ex.Message}", ex);
            }
        }
Beispiel #3
0
 /// <summary>
 /// Limpa os dados e encerra.
 /// </summary>
 public static void Close()
 {
     Common_DB.Close();
     WorldNetwork.Shutdown();
     GameNetwork.Shutdown();
     Classe.Clear();
     Configuration.Clear();
     Authentication.Clear();
     ProhibitedNames.Clear();
     FileLog.Close();
 }
Beispiel #4
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();
        }
Beispiel #5
0
        /// <summary>
        /// Inicializa o servidor
        /// </summary>
        public void InitializeServer()
        {
            trayIcon = new NotifyIcon();
            trayMenu = new ContextMenu();

            LuaScript.LuaConfig.InitializeConfig();

            Configuration.ParseConfigFile($"{Environment.CurrentDirectory}\\{Settings.FILE_CONFIG}");

            Settings.Discovery = Configuration.GetString("Discovery");
            WriteLog($"Discovery: {Settings.Discovery}", Color.Black);

            Settings.Port = Configuration.GetInt32("Port");
            WriteLog($"Port: {Settings.Port}", Color.Black);

            Settings.MaxConnection = Configuration.GetInt32("MaximumConnections");
            WriteLog($"MaxConnection: {Settings.MaxConnection}", Color.Black);

            Settings.ConnectionTimeOut = Configuration.GetInt32("ConnectionTimeOut");
            WriteLog($"ConnectionTimeOut: {Settings.ConnectionTimeOut}", Color.Black);

            Settings.LogSystem = Configuration.GetByte("LogSystem");
            WriteLog($"LogSystem: {Settings.LogSystem}", Color.Black);

            Settings.Sleep = Configuration.GetInt32("Sleep");
            WriteLog($"Sleep: {Settings.Sleep}", Color.Black);

            Settings.Version = Configuration.GetString("CheckVersion");
            WriteLog($"Version: {Settings.Version}", Color.BlueViolet);

            GeoIp.Enabled = Configuration.GetBoolean("GeoIp");
            var result = (GeoIp.Enabled == true) ? "Ativado" : "Desativado";

            WriteLog($"GeoIp: {result}", Color.BlueViolet);

            CheckSum.Enabled = Configuration.GetBoolean("CheckSum");
            result           = (CheckSum.Enabled == true) ? "Ativado" : "Desativado";
            WriteLog($"CheckSum: {result}", Color.BlueViolet);

            //1 - enabled
            result = (Settings.LogSystem == 1) ? "LogSystem: Ativado" : "LogSystem: Desativado";
            WriteLog("LogSystem: Desativado.", Color.Black);

            if (Settings.LogSystem == 1)
            {
                FileLog.OpenFileLog();
            }

            Authentication.Player = new HashSet <PlayerData>();

            InitializeServerConfig();
            InitializeDatabaseConfig();

            var tempError = string.Empty;

            if (!Common_DB.Open(out tempError))
            {
                WriteLog(tempError, Color.Red);
            }
            else
            {
                WriteLog("Connectado ao banco de dados", Color.Green);
            }

            WriteLog("Conectando World Server.", Color.Green);

            WorldNetwork.InitializeWorldServer();

            WriteLog("Login Server Start.", Color.Green);

            LoginNetwork.InitializeServer();

            GeoIp.ReadFile();

            #region Tray System
            trayMenu.MenuItems.Add("Mostrar", ShowForm);
            trayMenu.MenuItems.Add("Sair", quit_MenuItem_Click);

            trayIcon.Text = "Connect Server @";
            trayIcon.Icon = this.Icon;

            trayIcon.ContextMenu = trayMenu;
            #endregion
        }
Beispiel #6
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);
            }
        }
Beispiel #7
0
        public void InitializeServer()
        {
            trayIcon = new NotifyIcon();
            trayMenu = new ContextMenu();

            Configuration.ParseConfigFile(Settings.FILE_CONFIG);

            // CARREGA TODAS AS INFORMAÇÕES DE CONFIURAÇÃO
            Settings.WorldServerName = Configuration.GetString("WorldServerName");
            WriteLog($"World Server Name: {Settings.WorldServerName}", Color.CornflowerBlue);
            Text = $"World Server @ {Settings.WorldServerName}";

            Settings.Discovery = Configuration.GetString("Discovery");
            WriteLog($"Discovery: {Settings.Discovery}", Color.Black);

            Settings.Port = Configuration.GetInt32("Port");
            WriteLog($"Port: {Settings.Port}", Color.Black);

            Settings.MaxConnection = Configuration.GetInt32("MaximumConnections");
            WriteLog($"MaxConnection: {Settings.MaxConnection}", Color.Black);

            Settings.ConnectionTimeOut = Configuration.GetInt32("ConnectionTimeOut");
            WriteLog($"ConnectionTimeOut: {Settings.ConnectionTimeOut}", Color.Black);

            Settings.LogSystem = Configuration.GetBoolean("LogSystem");
            WriteLog($"LogSystem: {Settings.LogSystem}", Color.Black);

            Settings.Sleep = Configuration.GetInt32("Sleep");
            WriteLog($"Sleep: {Settings.Sleep}", Color.Black);

            LuaConfig.InitializeConfig();

            WriteLog($"Create Character: {GameSettings.CharacterCreation}", Color.MediumVioletRed);
            WriteLog($"Delete Character: {GameSettings.CharacterDelete}", Color.MediumVioletRed);

            InitializeServerConfig();

            if (Settings.LogSystem == true)
            {
                WriteLog("LogSystem - Ativado.", Color.Green);
                FileLog.Open();
            }
            else
            {
                WriteLog("LogSystem - Desativado.", Color.Black);
            }

            WriteLog("Carregando config do mysql", Color.Black);

            string tempError = string.Empty;

            Common_DB.Server   = Configuration.GetString("MySQL_IP");
            Common_DB.Port     = Configuration.GetInt32("MySQL_Port");
            Common_DB.Username = Configuration.GetString("MySQL_User");
            Common_DB.Password = Configuration.GetString("MySQL_Pass");
            Common_DB.Database = Configuration.GetString("MySQL_DB");

            // Tenta fazer a conexão com o banco de dados
            if (!Common_DB.Open(out tempError))
            {
                WriteLog(tempError, Color.Red);
            }
            else
            {
                WriteLog("Connectado ao banco de dados", Color.Green);
            }


            Authentication.HexID  = new HashSet <HexaID>();
            Authentication.Player = new HashSet <PlayerData>();

            InitializeGuild();
            InitializeClasse();

            WorldNetwork.InitializeServer();
            GameNetwork.InitializeGameServer();

            WriteLog("World Server Start.", Color.Green);

            //################# sysTray ########################
            trayMenu.MenuItems.Add("Mostrar", ShowForm);
            trayMenu.MenuItems.Add("Sair", quit_MenuItem_Click);

            trayIcon.Text = "World Server @";
            trayIcon.Icon = this.Icon;

            trayIcon.ContextMenu = trayMenu;
        }