public MySqlOptions() { ConnectionSettings = new MySqlConnectionSettings(); ServerVersion = null; // We explicitly use `utf8mb4` in all instances, where charset based calculations need to be done, but accessing annotations // isn't possible (e.g. in `MySqlTypeMappingSource`). // This is also being used as the universal fallback character set, if no character set was explicitly defined for the model, // which will result in similar behavior as in previous versions and ensure that databases use a decent/the recommended charset // by default, if none was explicitly set. DefaultCharSet = CharSet.Utf8Mb4; // NCHAR and NVARCHAR are prefdefined by MySQL. NationalCharSet = CharSet.Utf8Mb3; // Optimize space and performance for GUID columns. DefaultGuidCollation = "ascii_general_ci"; ReplaceLineBreaksWithCharFunction = true; DefaultDataTypeMappings = new MySqlDefaultDataTypeMappings(); // Throw by default if a schema is being used with any type. SchemaNameTranslator = null; // TODO: Change to `true` for EF Core 5. IndexOptimizedBooleanColumns = false; LimitKeyedOrIndexedStringColumnLength = true; StringComparisonTranslations = false; }
public MySqlOptions() { ConnectionSettings = new MySqlConnectionSettings(); ServerVersion = new ServerVersion(null); CharSetBehavior = CharSetBehavior.AppendToAllAnsiColumns; AnsiCharSetInfo = new CharSetInfo(CharSet.Latin1); UnicodeCharSetInfo = new CharSetInfo(CharSet.Utf8mb4); }
public MySqlOptions() { _lazyConnectionSettings = new Lazy <MySqlConnectionSettings>(() => { if (_relationalOptions.Connection != null) { return(MySqlConnectionSettings.GetSettings(_relationalOptions.Connection)); } return(MySqlConnectionSettings.GetSettings(_relationalOptions.ConnectionString)); }, LazyThreadSafetyMode.PublicationOnly); }
public MySqlOptions() { _lazyConnectionSettings = new Lazy <MySqlConnectionSettings>(() => { if (_relationalOptions.Connection != null) { return(MySqlConnectionSettings.GetSettings(_relationalOptions.Connection, _mySqlRetryNoDependendiciesExecutionStrategy)); } return(MySqlConnectionSettings.GetSettings(_relationalOptions.ConnectionString, _mySqlRetryNoDependendiciesExecutionStrategy)); }); }
public MySqlOptions() { _lazyConnectionSettings = new Lazy <MySqlConnectionSettings>(() => { if (_relationalOptions.Connection != null) { return(MySqlConnectionSettings.GetSettings(_relationalOptions.Connection)); } return(MySqlConnectionSettings.GetSettings(_relationalOptions.ConnectionString)); }); }
public MySqlOptions() { ConnectionSettings = new MySqlConnectionSettings(); ServerVersion = new ServerVersion(null); CharSetBehavior = CharSetBehavior.AppendToAllColumns; // We do not use the MySQL versions's default, but explicitly use `utf8mb4` // if not changed by the user. CharSet = CharSet.Utf8Mb4; // NCHAR and NVARCHAR are prefdefined by MySQL. NationalCharSet = CharSet.Utf8Mb3; ReplaceLineBreaksWithCharFunction = true; }
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 MySqlOptions() { ConnectionSettings = new MySqlConnectionSettings(); ServerVersion = new ServerVersion(null); CharSetBehavior = CharSetBehavior.AppendToAllColumns; // We do not use the MySQL versions's default, but explicitly use `utf8mb4` // if not changed by the user. CharSet = CharSet.Utf8Mb4; // NCHAR and NVARCHAR are prefdefined by MySQL. NationalCharSet = CharSet.Utf8Mb3; ReplaceLineBreaksWithCharFunction = true; DefaultDataTypeMappings = new MySqlDefaultDataTypeMappings(); // Throw by default if a schema is being used with any type. SchemaNameTranslator = null; }
private void SaveMySqlSettings(MySqlConnectionSettings mySqlConnSettings) { FileDataManager fdm = new FileDataManager(this); fdm.InsertOrUpdateValueByKey("mysql_server", mySqlConnSettings.Server); fdm.InsertOrUpdateValueByKey("mysql_port", mySqlConnSettings.Port.ToString()); fdm.InsertOrUpdateValueByKey("mysql_database", mySqlConnSettings.Database); fdm.InsertOrUpdateValueByKey("mysql_user", mySqlConnSettings.User); fdm.InsertOrUpdateValueByKey ( "mysql_pass", ( !String.IsNullOrWhiteSpace(mySqlConnSettings.Pass) ? Crypto.EncryptStringAES(mySqlConnSettings.Pass, GlobalData.PassKey) : "" ) ); fdm.SaveData(); }
public void RunMySqlDataInstaller() { bool createTables = _uiRefContainer.MySqlInstallerCreateTablesCheckBox.Checked; bool createBasicData = _uiRefContainer.MySqlInstallerCreateDataCheckBox.Checked; if (!createTables && !createBasicData) { return; } if (MessageBox.Show("Are you sure?", "mySQL data", MessageBoxButtons.YesNo) != DialogResult.Yes) { return; } ShowTab("overviewTabPage"); MySqlConnectionSettings connSettings = GetMySqlSettings(); MySqlDataCreationTool dbCreationTool = new MySqlDataCreationTool(this, connSettings); dbCreationTool.CreateMySqlDataAsync(createTables, createBasicData); }
public MySqlOptions() { ConnectionSettings = new MySqlConnectionSettings(); ServerVersion = null; // We do not use the MySQL versions's default, but explicitly use `utf8mb4` // if not changed by the user. CharSet = CharSet.Utf8Mb4; // NCHAR and NVARCHAR are prefdefined by MySQL. NationalCharSet = CharSet.Utf8Mb3; ReplaceLineBreaksWithCharFunction = true; DefaultDataTypeMappings = new MySqlDefaultDataTypeMappings(); // Throw by default if a schema is being used with any type. SchemaNameTranslator = null; // TODO: Change to `true` for EF Core 5. IndexOptimizedBooleanColumns = false; LimitKeyedOrIndexedStringColumnLength = true; }
private async void CheckMySqlConnectionAsync() { _uiHandler.ShowTab("overviewTabPage"); _uiHandler.UpdateLog("Checking mySQL connection..."); MySqlConnectionSettings myConnSettings = _uiHandler.GetMySqlSettings(); using (MySqlDbManager dbManager = new MySqlDbManager(myConnSettings)) { _uiHandler.UpdateLog("Estabilishing mySQL connection..."); BoxedData startConnData = await dbManager.StartConnectionTaskStart(); bool startConnSuccess = (bool)startConnData.Data; _uiHandler.UpdateLog(startConnSuccess ? "Connection started!" : "Connection starting failed!"); if (!String.IsNullOrEmpty(startConnData.Msg)) { _uiHandler.UpdateLog(startConnData.Msg); } BoxedData checkConnData = await dbManager.CheckConnectionTaskStart(); bool checkConnSuccess = (bool)checkConnData.Data; _uiHandler.UpdateLog(checkConnSuccess ? "Connection successfully estabilished!" : "Connection not estabilished!"); if (!String.IsNullOrEmpty(checkConnData.Msg)) { _uiHandler.UpdateLog(checkConnData.Msg); } BoxedData closeConnData = await dbManager.CloseConnectionTaskStart(); bool closeConnSuccess = (bool)closeConnData.Data; _uiHandler.UpdateLog(closeConnSuccess ? "Connection closed!" : "Cannot close current connection!"); if (!String.IsNullOrEmpty(closeConnData.Msg)) { _uiHandler.UpdateLog(closeConnData.Msg); } } }
protected virtual MySqlDefaultDataTypeMappings ApplyDefaultDataTypeMappings(MySqlDefaultDataTypeMappings defaultDataTypeMappings, MySqlConnectionSettings connectionSettings) { defaultDataTypeMappings ??= DefaultDataTypeMappings; if (connectionSettings.TreatTinyAsBoolean || defaultDataTypeMappings.ClrBoolean == MySqlBooleanType.Default) { defaultDataTypeMappings = defaultDataTypeMappings.WithClrBoolean(MySqlBooleanType.TinyInt1); } else if (defaultDataTypeMappings.ClrBoolean != MySqlBooleanType.Bit1 && defaultDataTypeMappings.ClrBoolean != MySqlBooleanType.None) { defaultDataTypeMappings = defaultDataTypeMappings.WithClrBoolean(MySqlBooleanType.Bit1); } if (defaultDataTypeMappings.ClrDateTime == MySqlDateTimeType.Default) { defaultDataTypeMappings = defaultDataTypeMappings.WithClrDateTime( ServerVersion.SupportsDateTime6 ? MySqlDateTimeType.DateTime6 : MySqlDateTimeType.DateTime); } if (defaultDataTypeMappings.ClrDateTimeOffset == MySqlDateTimeType.Default) { defaultDataTypeMappings = defaultDataTypeMappings.WithClrDateTimeOffset( ServerVersion.SupportsDateTime6 ? MySqlDateTimeType.DateTime6 : MySqlDateTimeType.DateTime); } if (defaultDataTypeMappings.ClrTimeSpan == MySqlTimeSpanType.Default) { defaultDataTypeMappings = defaultDataTypeMappings.WithClrTimeSpan( ServerVersion.SupportsDateTime6 ? MySqlTimeSpanType.Time6 : MySqlTimeSpanType.Time); } return(defaultDataTypeMappings); }
private void startServerButton_Click(object sender, EventArgs e) { MySqlConnectionSettings myConnSettings = _uiHandler.GetMySqlSettings(); _gameManager.StartAsync(myConnSettings); }
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}"); } }
protected virtual MySqlDefaultDataTypeMappings ApplyDefaultDataTypeMappings(MySqlDefaultDataTypeMappings defaultDataTypeMappings, MySqlConnectionSettings connectionSettings) { defaultDataTypeMappings ??= DefaultDataTypeMappings; // Explicitly set MySqlDefaultDataTypeMappings values take precedence over connection string options. if (connectionSettings.TreatTinyAsBoolean.HasValue && defaultDataTypeMappings.ClrBoolean == MySqlBooleanType.Default) { defaultDataTypeMappings = defaultDataTypeMappings.WithClrBoolean( connectionSettings.TreatTinyAsBoolean.Value ? MySqlBooleanType.TinyInt1 : MySqlBooleanType.Bit1); } if (defaultDataTypeMappings.ClrDateTime == MySqlDateTimeType.Default) { defaultDataTypeMappings = defaultDataTypeMappings.WithClrDateTime( ServerVersion.Supports.DateTime6 ? MySqlDateTimeType.DateTime6 : MySqlDateTimeType.DateTime); } if (defaultDataTypeMappings.ClrDateTimeOffset == MySqlDateTimeType.Default) { defaultDataTypeMappings = defaultDataTypeMappings.WithClrDateTimeOffset( ServerVersion.Supports.DateTime6 ? MySqlDateTimeType.DateTime6 : MySqlDateTimeType.DateTime); } if (defaultDataTypeMappings.ClrTimeSpan == MySqlTimeSpanType.Default) { defaultDataTypeMappings = defaultDataTypeMappings.WithClrTimeSpan( ServerVersion.Supports.DateTime6 ? MySqlTimeSpanType.Time6 : MySqlTimeSpanType.Time); } return(defaultDataTypeMappings); }
protected virtual MySqlDefaultDataTypeMappings ApplyDefaultDataTypeMappings(MySqlDefaultDataTypeMappings defaultDataTypeMappings, MySqlConnectionSettings connectionSettings) { defaultDataTypeMappings ??= DefaultDataTypeMappings; if (connectionSettings.TreatTinyAsBoolean) { defaultDataTypeMappings = defaultDataTypeMappings.WithClrBoolean(MySqlBooleanType.TinyInt1); } else if (defaultDataTypeMappings.ClrBoolean != MySqlBooleanType.Bit1 && defaultDataTypeMappings.ClrBoolean != MySqlBooleanType.None) { defaultDataTypeMappings = defaultDataTypeMappings.WithClrBoolean(MySqlBooleanType.Bit1); } return(defaultDataTypeMappings); }
public MySqlDataCreationTool(ILogger logger, MySqlConnectionSettings connectionSettings) { _logger = logger; _connectionSettings = connectionSettings; }
public MySqlDbManager(MySqlConnectionSettings connectionSettings) { _connectionSettings = connectionSettings ?? throw new Exception($"mySQL connection settings cannot be NULL!"); }
public void SaveMySqlSettings() { MySqlConnectionSettings settings = GetMySqlSettings(); SaveMySqlSettings(settings); }
/// <summary> /// Starts the game and its management/handlers etc. /// </summary> public async void StartAsync(MySqlConnectionSettings mySqlConnSettings) { if (_loadingInProgress) { _logger.UpdateLog("Game loading in progress!"); return; } _loadingInProgress = true; try { if (this.State == GameState.Active) { _logger.UpdateLog("The game is already active!"); return; } _mySqlConnSettings = mySqlConnSettings; int counter; try { //GAME DATA using (MySqlDbManager gwdDbManager = new MySqlDbManager(_mySqlConnSettings)) { #region Connection starting //CONNECTION STARTING _logger.UpdateLog("Starting connection for data loading..."); bool connectionSuccess = false; using (BoxedData connStartData = await gwdDbManager.StartConnectionTaskStart()) { if (!String.IsNullOrEmpty(connStartData.Msg)) { _logger.UpdateLog(connStartData.Msg); } connectionSuccess = (bool)connStartData.Data; } if (!connectionSuccess) { throw new Exception("connection not estabilished!"); } #endregion #region Account data //ACCOUNT DATA _accountData = new AccountData(_logger); _accountData.LoadAccountsAsync(gwdDbManager); while (!_accountData.IsLoaded) { await Task.Factory.StartNew(() => Thread.Sleep(1000)); if (_accountData.LoadingError) { throw new Exception("account data loading failure!"); } } //_accountData.ShowAccountsInLog(); //NOTE: only for testing (shows secret account details)! #endregion #region Game world data //GAME DATA LOADING _gameWorldData = new GameWorldData(_logger); _gameWorldData.LoadWorldDataAsync(gwdDbManager); counter = 0; while (!_gameWorldData.IsLoaded) { await Task.Factory.StartNew(() => Thread.Sleep(1000)); counter++; if (_gameWorldData.LoadingError) { throw new Exception("game world data loading failure!"); } } _logger.UpdateLog($"Game data loading ended in {counter} seconds."); #endregion } //PLAYER HANDLER _playerHandler = new PlayerHandler(_logger); //GAME STATE HANDLER _gameStateHandler = new GameStateHandler(_logger, _gameWorldData, _gameWorldData, _playerHandler); //CHAT HANDLER _chatHandler = new ChatHandler(_logger, _gameWorldData, _playerHandler); //COMMAND HANDLER _commandHandler = new CommandHandler(_logger); _commandHandler.RegisterCommandHandlingStrategy(new CmdPingStrategy()); _commandHandler.RegisterCommandHandlingStrategy(new MoveCharRequestStrategy(_logger, _gameStateHandler, _gameWorldData, _playerHandler)); _commandHandler.RegisterCommandHandlingStrategy(new CmdChatStrategy(_logger, _chatHandler)); _commandHandler.RegisterCommandHandlingStrategy(new SwitchPlaceRequestStrategy(_logger, _gameStateHandler, _gameWorldData, _gameWorldData, _playerHandler)); _commandHandler.RegisterCommandHandlingStrategy(new CmdGetLocationCharsStrategy(_logger, _gameWorldData)); _commandHandler.RegisterCommandHandlingStrategy(new CmdGetWorldDetailsStrategy(_logger, _gameWorldData)); _commandHandler.RegisterCommandHandlingStrategy(new CmdLoginStrategy(_logger, _accountData, _playerHandler)); _commandHandler.RegisterCommandHandlingStrategy(new CmdLogoutStrategy(_playerHandler)); _commandHandler.RegisterCommandHandlingStrategy(new CmdGetAccountCharsStrategy(_logger, _accountData, _gameWorldData)); _commandHandler.RegisterCommandHandlingStrategy(new CmdChooseCharacterStrategy(_logger, _accountData, _gameWorldData, _playerHandler)); //CONNECTION HANDLER _tcpConnectionHandler = TcpConnectionHandler.GetInstance(_tcpLogger, _commandHandler, _playerHandler); _tcpConnectionHandler.StartConnection(_uiHandler.GetTcpConnectionSettings()); //REGULAR OPERATION HANDLER _regularOperationHandler = new RegularOperationHandler(_logger); //ETC this.State = GameState.Active; } catch (Exception exception) { this.State = GameState.Error; _logger.UpdateLog($"An error occured during game starting: {exception.Message}"); } } finally { _logger.UpdateLog($"*** ENDED WITH GAME STATE [{this.State.ToString()}]"); _loadingInProgress = false; } }