Beispiel #1
0
        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);
                        });
                    }
                }
            }
        }
Beispiel #2
0
 public void AddServer(ServerCore server)
 {
     _servers.Add(server);
 }