private void ConnectDatabase()
{
if (Connection != null)
{
try
{
if (Connection.State != System.Data.ConnectionState.Open)
{
Logger.Log("MySQLDatabaseInternal.ConnectDatabase: Reconnecting to the database...");
Connection.Open();
FailedQueries = 0;
return;
}
else if (FailedQueries >= FAILED_QUERY_LIMIT)
{
Logger.Log("MySQLDatabaseInternal.ConnectDatabase: Too many consecutive failed queries, abandoning existing connection.");
Connection.Dispose();
Connection = null;
}
else if ((FailedQueries > 0) || (((uint)Environment.TickCount - LastQueryTick) >= QUERY_PING_LIMIT))
{
if (FailedQueries > 0)
Logger.Log("MySQLDatabaseInternal.ConnectDatabase: Confirming database aliveness with ping after a failed query...");
if (Connection.Ping())
{
LastQueryTick = (uint)Environment.TickCount;
return;
}
Logger.Log("MySQLDatabaseInternal.ConnectDatabase: Connection failed ping, forcing reconnect...");
Connection.Dispose();
Connection = null;
}
else
{
return;
}
}
catch (Exception e)
{
Logger.Log("MySQLDatabaseInternal.ConnectDatabase: Trying new connection due to exception opening existing connection: {0}", e);
Connection.Dispose();
Connection = null;
}
}
Logger.Log("MySQLDatabaseInternal.ConnectDatabase: Connecting to the database...");
MySqlConnection NewConnection = new MySqlConnection(ConnectionString);
bool Succeeded = false;
try
{
NewConnection.Open();
Succeeded = true;
FailedQueries = 0;
LastQueryTick = (uint)Environment.TickCount;
}
finally
{
if (!Succeeded)
NewConnection.Dispose();
else
Connection = NewConnection;
}
}