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