using System; using System.Data; using MySql.Data.MySqlClient; using DuckEmulator.HabboHotel.Inside.Storage.MySql.Database.Interfaces; using DuckEmulator.HabboHotel.Inside.Storage.MySql.Database.SessionDetails; namespace DuckEmulator.HabboHotel.Inside.Storage.MySql.Database { class DatabaseClient : IDisposable { private MySqlConnection connection; private int connectionID; private DatabaseManager dbManager; private IQueryAdapter info; private ConnectionState state; public DatabaseClient(DatabaseManager _dbManager, int id) { dbManager = _dbManager; connectionID = id; connection = new MySqlConnection(dbManager.getConnectionString()); connection.StateChange += connecionStateChanged; } #region IDisposable Members public void Dispose() { info = null; } #endregion private void connecionStateChanged(object sender, StateChangeEventArgs e) { state = e.CurrentState; } public void connect() { connection.Open(); } public void disconnect() { if (connection != null) { if (connection.State == ConnectionState.Open) { connection.Close(); } } } public ConnectionState getConnectionState() { return state; } internal int getID() { return connectionID; } internal MySqlCommand getNewCommand() { return connection.CreateCommand(); } internal IQueryAdapter getQueryReactor() { return info; } internal MySqlTransaction getTransaction() { return connection.BeginTransaction(); } internal bool isAvailable() { return (info == null); } public void prepare(bool autoCommit) { if (autoCommit) { info = new TransactionQueryReactor(this); } else { info = new NormalQueryReactor(this); } } internal void reportDone() { Dispose(); } } }