コード例 #1
0
ファイル: AccountData.cs プロジェクト: AWieczorek89/MMOGS
        public void AddAccountData(DbAccountsData accData)
        {
            if (String.IsNullOrWhiteSpace(accData.Login))
            {
                throw new Exception("Account data - login cannot be empty!");
            }
            if (accData.AccId < 0)
            {
                throw new Exception("Account data - acc_id cannot be less than 0!");
            }

            foreach (DbAccountsData data in _accountList)
            {
                if (data.Login.Equals(accData.Login, GlobalData.InputDataStringComparison))
                {
                    throw new Exception($"An account with login [{accData.Login}] already exists!");
                }

                if (data.AccId == accData.AccId)
                {
                    throw new Exception($"An account with acc_id [{accData.AccId}] already exists!");
                }
            }

            _accountList.Add(accData);
            _logger.UpdateLog($"Account data - added new account, login [{accData.Login}] level [{accData.AccessLevel}]");
        }
コード例 #2
0
        /// <summary>
        /// Adds new record in table 'accounts' (awaitable)
        /// </summary>
        public Task <BoxedData> AddAccountsDataTaskStart(DbAccountsData accountData)
        {
            var t = new Task <BoxedData>(() => AddAccountsData(accountData));

            t.Start();
            return(t);
        }
コード例 #3
0
        /// <summary>
        /// Adds new record in table 'accounts'
        /// </summary>
        public BoxedData AddAccountsData(DbAccountsData accountData)
        {
            BoxedData data  = new BoxedData();
            int       accId = -1;
            string    msg   = "";

            try
            {
                string query = @"
                    INSERT INTO `accounts`
                    (
                        `acc_login`,
                        `acc_pass`,
                        `acc_access_level`
                    )
                    VALUES
                    (
                        @login,
                        @pass,
                        @accessLevel
                    );

                    SELECT LAST_INSERT_ID() AS `acc_id`;
                ";

                lock (_connectionLock)
                {
                    using (MySqlCommand command = new MySqlCommand(query, _connection))
                    {
                        command.Parameters.AddWithValue("@login", accountData.Login);
                        command.Parameters.AddWithValue("@pass", accountData.PassEncrypted);
                        command.Parameters.AddWithValue("@accessLevel", accountData.AccessLevel);

                        using (MySqlDataReader reader = command.ExecuteReader())
                        {
                            if (reader.Read())
                            {
                                if (!Int32.TryParse(reader["acc_id"].ToString(), out accId))
                                {
                                    msg = $"Cannot convert acc_id!";
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                msg = $"Cannot insert new record in table 'accounts': {exception.Message}";
            }

            data.Data = accId;
            data.Msg  = msg;
            return(data);
        }
コード例 #4
0
        public bool Execute(PlayerDetails playerDetails)
        {
            bool                 executed  = false;
            DbAccountsData       account   = null;
            List <CharacterData> charsList = null;

            try
            {
                if (String.IsNullOrWhiteSpace(playerDetails.Login))
                {
                    CommandHandler.Send(new InfoCmdBuilder("You're not logged in!"), playerDetails);
                    throw new Exception("player is not logged in!");
                }

                if (playerDetails.CharId > -1)
                {
                    playerDetails.CharId = -1;
                    _logger.UpdateLog($"Player's char ID set to -1 by executing char list method for TCP client ID [{playerDetails.TcpClientId}]");
                }

                account = _accountData.GetAccountData(playerDetails.Login);
                if (account == null)
                {
                    CommandHandler.Send(new InfoCmdBuilder("An error occured on the server."), playerDetails);
                    throw new Exception("cannot get db account data (NULL)!");
                }

                charsList = _characterInfo.GetCharactersByAccId(account.AccId);

                foreach (CharacterData charData in charsList)
                {
                    //LOBBY CHARACTER DETAILS
                    CommandHandler.Send(new CharLobbyInfoCmdBuilder(false, charData), playerDetails);
                }

                //LIST CONFIRMATION
                CommandHandler.Send(new CharLobbyInfoCmdBuilder(true), playerDetails);

                executed = true;
            }
            catch (Exception exception)
            {
                _logger.UpdateLog($"Account characters getting error for TCP client ID [{playerDetails.TcpClientId}]: {exception.Message}");
            }

            return(executed);
        }
コード例 #5
0
ファイル: MainForm.cs プロジェクト: AWieczorek89/MMOGS
        private void newAccButton_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Are you sure?", "new account", MessageBoxButtons.YesNo) != DialogResult.Yes)
            {
                return;
            }

            try
            {
                _uiHandler.ShowTab("overviewTabPage");
                DbAccountsData          dbAccData    = _uiHandler.GetNewAccountData();
                MySqlConnectionSettings connSettings = _uiHandler.GetMySqlSettings();
                _gameManager.CreateNewAccountAsync(dbAccData, connSettings);
            }
            catch (Exception exception)
            {
                MessageBox.Show($"Cannot create new account: {exception.Message}");
            }
        }
コード例 #6
0
ファイル: AccountData.cs プロジェクト: AWieczorek89/MMOGS
        public DbAccountsData GetAccountData(string login)
        {
            DbAccountsData accountData = null;

            if (String.IsNullOrWhiteSpace(login))
            {
                return(accountData);
            }

            foreach (DbAccountsData data in _accountList)
            {
                if (data.Login.Equals(login, GlobalData.InputDataStringComparison))
                {
                    accountData = data;
                    break;
                }
            }

            return(accountData);
        }
コード例 #7
0
        public bool Execute(PlayerDetails playerDetails)
        {
            bool                 executed  = false;
            DbAccountsData       account   = null;
            List <CharacterData> charsList = null;
            int charId = -1;

            try
            {
                if (String.IsNullOrWhiteSpace(playerDetails.Login))
                {
                    CommandHandler.Send(new InfoCmdBuilder("You're not logged in!"), playerDetails);
                    throw new Exception("player is not logged in!");
                }

                if (_cmdElements.Length != 2)
                {
                    CommandHandler.Send(new InfoCmdBuilder("Character choosing - wrong command!"), playerDetails);
                    throw new Exception($"wrong command element count [{_cmdElements.Length}]");
                }

                if (String.IsNullOrWhiteSpace(_cmdElements[1]) || !Int32.TryParse(_cmdElements[1], out charId))
                {
                    CommandHandler.Send(new InfoCmdBuilder("Character choosing - wrong ID, must be numeric value!"), playerDetails);
                    throw new Exception($"cannot convert character ID from element [{_cmdElements[1]}]");
                }

                if (charId < 0)
                {
                    CommandHandler.Send(new InfoCmdBuilder("Character choosing - wrong ID, cannot be less than 0!"), playerDetails);
                    throw new Exception($"wrong character ID [{charId}] (less than 0)");
                }

                account = _accountData.GetAccountData(playerDetails.Login);

                if (_playerHandler.GetPlayerCharacterId(account.Login) > -1)
                {
                    CommandHandler.Send(new InfoCmdBuilder("You have already chosen your character (character in use)!"), playerDetails);
                    throw new Exception("other character in use!");
                }

                if (account == null)
                {
                    CommandHandler.Send(new InfoCmdBuilder("An error occured on the server."), playerDetails);
                    throw new Exception("cannot get db account data (NULL)!");
                }

                charsList = _characterInfo.GetCharactersByAccId(account.AccId);

                foreach (CharacterData charData in charsList)
                {
                    if (charData.CharId == charId)
                    {
                        _playerHandler.SetPlayerCharacter(charId, account.Login);
                        _logger.UpdateLog($"Character set to char. ID [{charId}] for player [{account.Login}]");
                        executed = true;
                    }
                }
            }
            catch (Exception exception)
            {
                _logger.UpdateLog($"Character choosing execution error for player with TCP client ID [{playerDetails.TcpClientId}]: {exception.Message}");
            }
            finally
            {
                //CHARACTER CHOOSING RESULT
                CommandHandler.Send(new CharChoosingSuccessCmdBuilder(executed), playerDetails);
            }

            return(executed);
        }
コード例 #8
0
        /// <summary>
        /// Gets data from table 'accounts'
        /// </summary>
        public BoxedData GetAccountsData(string sqlFilter = "")
        {
            BoxedData             data       = new BoxedData();
            List <DbAccountsData> resultList = new List <DbAccountsData>();
            string msg = "";

            try
            {
                int    id            = -1;
                string login         = "";
                string passEncrypted = "";
                int    accessLevel   = 0;

                string query = @"
                    SELECT
                        `acc_id`,
                        `acc_login`,
                        `acc_pass`,
                        `acc_access_level`
                    FROM
                        `accounts`
                ";

                if (!String.IsNullOrWhiteSpace(sqlFilter))
                {
                    query += $" {(!sqlFilter.ToUpper().Contains("WHERE") ? "WHERE" : "")} {sqlFilter}";
                }

                lock (_connectionLock)
                {
                    using (MySqlCommand command = new MySqlCommand(query, _connection))
                    {
                        using (MySqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                id            = reader.GetInt32("acc_id");
                                login         = reader["acc_login"].ToString();
                                passEncrypted = reader["acc_pass"].ToString();
                                accessLevel   = reader.GetInt32("acc_access_level");

                                DbAccountsData result = new DbAccountsData
                                                        (
                                    id,
                                    login,
                                    passEncrypted,
                                    DbAccountsData.PasswordType.Encrypted,
                                    accessLevel
                                                        );

                                resultList.Add(result);
                            }
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                msg = $"Cannot get data from 'accounts' table, SQL filter [{sqlFilter}]: {exception.Message}";
            }

            data.Data = resultList;
            data.Msg  = msg;
            return(data);
        }
コード例 #9
0
ファイル: GameManager.cs プロジェクト: AWieczorek89/MMOGS
        public async void CreateNewAccountAsync(DbAccountsData dbAccData, MySqlConnectionSettings connSettings)
        {
            try
            {
                if (String.IsNullOrWhiteSpace(dbAccData.Login))
                {
                    _logger.UpdateLog("Login cannot be empty!");
                    return;
                }

                bool success = false;

                using (MySqlDbManager dbManager = new MySqlDbManager(connSettings))
                {
                    BoxedData connStartData = await dbManager.StartConnectionTaskStart();

                    bool connStartSuccess = (bool)connStartData.Data;
                    if (!String.IsNullOrEmpty(connStartData.Msg))
                    {
                        _logger.UpdateLog(connStartData.Msg);
                    }

                    if (connStartSuccess)
                    {
                        BoxedData accCreationData = await dbManager.AddAccountsDataTaskStart(dbAccData);

                        int accId = (int)accCreationData.Data;

                        if (!String.IsNullOrEmpty(accCreationData.Msg))
                        {
                            _logger.UpdateLog(accCreationData.Msg);
                        }

                        if (accId > -1)
                        {
                            _logger.UpdateLog($"Created new account, acc_id [{accId}]!");

                            if (_accountData != null)
                            {
                                _accountData.AddAccountData
                                (
                                    new DbAccountsData
                                    (
                                        accId,
                                        dbAccData.Login,
                                        dbAccData.PassEncrypted,
                                        DbAccountsData.PasswordType.Encrypted,
                                        dbAccData.AccessLevel
                                    )
                                );
                            }

                            success = true;
                        }
                    }
                    else
                    {
                        _logger.UpdateLog("Cannot connect to database!");
                    }
                }

                if (success)
                {
                    _logger.UpdateLog("Account created successfully!");
                }
            }
            catch (Exception exception)
            {
                _logger.UpdateLog($"Account creation failure: {exception.Message}");
            }
        }