diff --git a/BNetServer/BNetServer.conf.dist b/BNetServer/BNetServer.conf.dist index da354315a..52a0636c4 100644 --- a/BNetServer/BNetServer.conf.dist +++ b/BNetServer/BNetServer.conf.dist @@ -92,7 +92,11 @@ WrongPass.BanType = 0 # Unix/Linux) # Default: "127.0.0.1;3306;username;password;auth" -LoginDatabaseInfo = "127.0.0.1;3306;username;password;auth" +LoginDatabaseInfo.Host = "127.0.0.1" +LoginDatabaseInfo.Port = "3306" +LoginDatabaseInfo.Username = "username" +LoginDatabaseInfo.Password = "password" +LoginDatabaseInfo.Database = "auth" # # DBQueryWorkerInterval diff --git a/Framework/Database/ConnectionObject.cs b/Framework/Database/ConnectionObject.cs new file mode 100644 index 000000000..979eebf2a --- /dev/null +++ b/Framework/Database/ConnectionObject.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +namespace Framework.Database +{ + public class ConnectionObject + { + public string Host { get; set; } + public string Port { get; set; } + public string Username { get; set; } + public string Password { get; set; } + public string Database { get; set; } + } +} diff --git a/Framework/Database/DatabaseLoader.cs b/Framework/Database/DatabaseLoader.cs index 3601dfa3a..e1d146c95 100644 --- a/Framework/Database/DatabaseLoader.cs +++ b/Framework/Database/DatabaseLoader.cs @@ -35,14 +35,16 @@ namespace Framework.Database bool updatesEnabled = database.IsAutoUpdateEnabled(_updateFlags); _open.Add(() => { - string dbString = ConfigMgr.GetDefaultValue(name + "DatabaseInfo", ""); - if (string.IsNullOrEmpty(dbString)) - { - Log.outError(LogFilter.ServerLoading, "Database {0} not specified in configuration file!", name); - return false; - } + ConnectionObject co = new ConnectionObject + { + Database = ConfigMgr.GetDefaultValue(name + "DatabaseInfo.Database", ""), + Host = ConfigMgr.GetDefaultValue(name + "DatabaseInfo.Host", ""), + Password = ConfigMgr.GetDefaultValue(name + "DatabaseInfo.Password", ""), + Port = ConfigMgr.GetDefaultValue(name + "DatabaseInfo.Port", ""), + Username = ConfigMgr.GetDefaultValue(name + "DatabaseInfo.Username", "") + }; - var error = database.Initialize(dbString); + var error = database.Initialize(co); if (error != MySqlErrorCode.None) { // Database does not exist @@ -57,7 +59,7 @@ namespace Framework.Database Log.outInfo(LogFilter.ServerLoading, "Creating database \"{0}\"...", name); string sqlString = string.Format("CREATE DATABASE `{0}` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci", name); // Try to create the database and connect again if auto setup is enabled - if (database.Apply(sqlString) && database.Initialize(dbString) == MySqlErrorCode.None) + if (database.Apply(sqlString) && database.Initialize(co) == MySqlErrorCode.None) error = MySqlErrorCode.None; } diff --git a/Framework/Database/MySqlBase.cs b/Framework/Database/MySqlBase.cs index a3849d696..f54dbd0ec 100644 --- a/Framework/Database/MySqlBase.cs +++ b/Framework/Database/MySqlBase.cs @@ -39,6 +39,16 @@ namespace Framework.Database Poolsize = poolSize; } + public MySqlConnectionInfo(ConnectionObject connectionObject, int poolSize = 10) + { + Host = connectionObject.Host; + Port = connectionObject.Port; + Username = connectionObject.Username; + Password = connectionObject.Password; + Database = connectionObject.Database; + Poolsize = poolSize; + } + public MySqlConnection GetConnection() { return new MySqlConnection(string.Format("Server={0};Port={1};User Id={2};Password={3};Database={4};Allow Zero Datetime=True;Allow User Variables=True;Pooling=true;MaximumPoolSize={5};", @@ -81,6 +91,26 @@ namespace Framework.Database } } + public MySqlErrorCode Initialize(ConnectionObject connectionObject) + { + _connectionInfo = new MySqlConnectionInfo(connectionObject); + _updater = new DatabaseUpdater(this); + + using (var connection = _connectionInfo.GetConnection()) + { + try + { + connection.Open(); + Log.outInfo(LogFilter.SqlDriver, "Connected to MySQL(ver: {0}) Database: {1}", connection.ServerVersion, _connectionInfo.Database); + return MySqlErrorCode.None; + } + catch (MySqlException ex) + { + return (MySqlErrorCode)((MySqlException)ex.InnerException).Number; + } + } + } + public void Execute(string sql, params object[] args) { Execute(new PreparedStatement(string.Format(sql, args))); diff --git a/Framework/Framework.csproj b/Framework/Framework.csproj index 966f68a7b..7b13daa42 100644 --- a/Framework/Framework.csproj +++ b/Framework/Framework.csproj @@ -131,6 +131,7 @@ + diff --git a/WorldServer/WorldServer.conf.dist b/WorldServer/WorldServer.conf.dist index ebae6265a..754c00c03 100644 --- a/WorldServer/WorldServer.conf.dist +++ b/WorldServer/WorldServer.conf.dist @@ -42,10 +42,29 @@ LogsDir = "./Logs" # "127.0.0.1;3306;username;password;characters" - (CharacterDatabaseInfo) # "127.0.0.1;3306;username;password;hotfixes" - (HotfixDatabaseInfo) -LoginDatabaseInfo = "127.0.0.1;3306;username;password;auth" -WorldDatabaseInfo = "127.0.0.1;3306;username;password;world" -CharacterDatabaseInfo = "127.0.0.1;3306;username;password;characters" -HotfixDatabaseInfo = "127.0.0.1;3306;username;password;hotfixes" +LoginDatabaseInfo.Host = "127.0.0.1" +LoginDatabaseInfo.Port = "3306" +LoginDatabaseInfo.Username = "username" +LoginDatabaseInfo.Password = "password" +LoginDatabaseInfo.Database = "auth" + +WorldDatabaseInfo.Host = "127.0.0.1" +WorldDatabaseInfo.Port = "3306" +WorldDatabaseInfo.Username = "username" +WorldDatabaseInfo.Password = "password" +WorldDatabaseInfo.Database = "world" + +CharacterDatabaseInfo.Host = "127.0.0.1" +CharacterDatabaseInfo.Port = "3306" +CharacterDatabaseInfo.Username = "username" +CharacterDatabaseInfo.Password = "password" +CharacterDatabaseInfo.Database = "characters" + +HotfixDatabaseInfo.Host = "127.0.0.1" +HotfixDatabaseInfo.Port = "3306" +HotfixDatabaseInfo.Username = "username" +HotfixDatabaseInfo.Password = "password" +HotfixDatabaseInfo.Database = "hotfixes" # # WorldServerPort