Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
 public MySqlOptions()
 {
     ConnectionSettings = new MySqlConnectionSettings();
     ServerVersion      = new ServerVersion(null);
     CharSetBehavior    = CharSetBehavior.AppendToAllAnsiColumns;
     AnsiCharSetInfo    = new CharSetInfo(CharSet.Latin1);
     UnicodeCharSetInfo = new CharSetInfo(CharSet.Utf8mb4);
 }
Ejemplo n.º 3
0
 public MySqlOptions()
 {
     _lazyConnectionSettings = new Lazy <MySqlConnectionSettings>(() =>
     {
         if (_relationalOptions.Connection != null)
         {
             return(MySqlConnectionSettings.GetSettings(_relationalOptions.Connection));
         }
         return(MySqlConnectionSettings.GetSettings(_relationalOptions.ConnectionString));
     }, LazyThreadSafetyMode.PublicationOnly);
 }
Ejemplo n.º 4
0
 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;
        }
Ejemplo n.º 7
0
        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}");
            }
        }
Ejemplo n.º 8
0
        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;
        }
Ejemplo n.º 9
0
        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();
        }
Ejemplo n.º 10
0
        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;
        }
Ejemplo n.º 12
0
        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);
                }
            }
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        private void startServerButton_Click(object sender, EventArgs e)
        {
            MySqlConnectionSettings myConnSettings = _uiHandler.GetMySqlSettings();

            _gameManager.StartAsync(myConnSettings);
        }
Ejemplo n.º 15
0
        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}");
            }
        }
Ejemplo n.º 16
0
        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);
        }
Ejemplo n.º 18
0
 public MySqlDataCreationTool(ILogger logger, MySqlConnectionSettings connectionSettings)
 {
     _logger             = logger;
     _connectionSettings = connectionSettings;
 }
Ejemplo n.º 19
0
 public MySqlDbManager(MySqlConnectionSettings connectionSettings)
 {
     _connectionSettings = connectionSettings ?? throw new Exception($"mySQL connection settings cannot be NULL!");
 }
Ejemplo n.º 20
0
        public void SaveMySqlSettings()
        {
            MySqlConnectionSettings settings = GetMySqlSettings();

            SaveMySqlSettings(settings);
        }
Ejemplo n.º 21
0
        /// <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;
            }
        }