public void SetClientAmount(uint Amount) { lock (this.Clients) { lock (this.AvailableClients) { if (Clients.Length == Amount) { return; } if (Amount < Clients.Length) { for (uint i = Amount; i < Clients.Length; i++) { Clients[i].Destroy(); Clients[i] = null; } } DatabaseClient[] _Clients = new DatabaseClient[Amount]; bool[] _AvailableClients = new bool[Amount]; for (uint i = 0; i < Amount; i++) { if (i < Clients.Length) { _Clients[i] = Clients[i]; _AvailableClients[i] = AvailableClients[i]; } else { _Clients[i] = new DatabaseClient((i + 1), this); _AvailableClients[i] = true; } } Clients = _Clients; AvailableClients = _AvailableClients; } } }
public DatabaseClient GetClient() { lock (this.Clients) { lock (this.AvailableClients) { for (uint i = 0; i < Clients.Length; i++) { if (AvailableClients[i] == true) { ClientStarvation = 0; if (Clients[i].State == ConnectionState.Closed) { try { Clients[i].Connect(); } catch (Exception e) { Console.WriteLine("Could not get database client: " + e.Message); } } if (Clients[i].State == ConnectionState.Open) { AvailableClients[i] = false; Clients[i].UpdateLastActivity(); return Clients[i]; } } } } ClientStarvation++; if (ClientStarvation >= ((Clients.Length + 1) / 2)) { ClientStarvation = 0; SetClientAmount((uint)(Clients.Length + 1 * 1.3f)); return GetClient(); } DatabaseClient Anonymous = new DatabaseClient(0, this); Anonymous.Connect(); return Anonymous; } }