private void SpreaderTick() { if (IsRunning == false) { return; } if (_servers.All(server => server.IsFull)) { return; } ServerCore prioritizedServer = _servers .Where(p => p.IsFull == false) .OrderByDescending(p => p.Data.ImportantIndex) .FirstOrDefault(); if (prioritizedServer != null) { while (_pool.Get(out var bot)) { prioritizedServer.AddPlayer(bot); break; } var donorServers = _servers .Where(p => p.Data.ImportantIndex < prioritizedServer.Data.ImportantIndex) .OrderByDescending(p => p.Data.ImportantIndex); foreach (var server in donorServers) { var bot = server.Players.FirstOrDefault(); if (bot != null) { new Timeout(bot.DisconnectWithSettingsDelay(), () => { bot.GetServer().RemovePlayer(bot); prioritizedServer.AddPlayer(bot); }); } } } }
public void AddServer(ServerCore server) { _servers.Add(server); }