/// <summary> /// Disconnects and destroys all database clients. /// </summary> internal void DestroyClients() { lock (this) { for (int i = 0; i < mClients.Length; i++) { DatabaseClient tClient = mClients[i]; if (tClient != null) { tClient.Destroy(); mClients[i] = null; } } } }
public DatabaseClient GetClient() { lock (this) { if (mClients.Length > 2) { for (uint i = 0; i < mClients.Length; i++) { if (mClientAvailable[i]) { mClientAvailable[i] = false; mClientStarvationCounter = 0; if (mClients[i].State == ConnectionState.Closed) { try { var StateConn = mClients[i].Connect(); if (StateConn == ConnectionState.Connecting) { Log.WriteLine(LogLevel.Debug, "Opening connection for database client #" + mClients[i].mHandle); } else if (StateConn == ConnectionState.Open) { mClients[i].Destroy(); mClients[i] = new DatabaseClient(i, this); mClients[i].Connect(); } else if (StateConn == ConnectionState.Closed) { //TODO Caching Console.WriteLine("Caching client Message"); return(mClients[i]); } else if (StateConn == ConnectionState.Broken) { mClients[i].Destroy(); mClients[i] = new DatabaseClient(i, this); mClients[i].Connect(); } } catch (Exception ex) { Log.WriteLine(LogLevel.Exception, "{0}", ex.Message); } } if (mClients[i].State == ConnectionState.Open) { mClients[i].UpdateLastActivity(); if (!mClients[i].IsBusy) { mClients[i].IsBusy = true; return(mClients[i]); } } } } } mClientStarvationCounter++; if (mClientStarvationCounter >= (mClients.Length + 1) / 2) { mClientStarvationCounter = 0; SetClientAmount((uint)(mClients.Length + 1 * 1.3f)); return(GetClient()); } var pAnonymous = new DatabaseClient(0, this); var StateConns = pAnonymous.Connect(); if (StateConns == ConnectionState.Connecting) { pAnonymous.IsBusy = true; Log.WriteLine(LogLevel.Debug, "Opening connection for database clientanon"); } else if (StateConns == ConnectionState.Open) { pAnonymous.Destroy(); pAnonymous = new DatabaseClient(0, this); pAnonymous.Connect(); } else if (StateConns == ConnectionState.Closed) { //TODO Caching Console.WriteLine("Caching client Message"); return(pAnonymous); } else if (StateConns == ConnectionState.Broken) { pAnonymous.Destroy(); pAnonymous = new DatabaseClient(0, this); pAnonymous.Connect(); } // pAnonymous.Connect(); Log.WriteLine(LogLevel.Debug, "Handed out anonymous client."); return(pAnonymous); } }