public void Update() { try { m_clients.Flush(); // TODO: Save subspace if player leaves and count == 0 m_server.Run(); // Dispatch events Run(); //Check timers NukeKSC.CheckTimer(); Dekessler.CheckTimer(); //Run plugin update DMPPluginHandler.FireOnUpdate(); } catch (Exception e) { DarkLog.Error("Fatal error thrown, exception: " + e); Server.ShutDown("Crashed!"); } }
public static void ThreadMain() { try { clients = new List <ClientObject>().AsReadOnly(); Messages.WarpControl.Reset(); Messages.Chat.Reset(); Messages.ScreenshotLibrary.Reset(); SetupTCPServer(); while (Server.serverRunning) { //Process current clients foreach (ClientObject client in clients) { Messages.Heartbeat.CheckHeartBeat(client); } ModpackSystem.fetch.SendFilesToClients(); //Check timers NukeKSC.CheckTimer(); Dekessler.CheckTimer(); Messages.WarpControl.CheckTimer(); //Run plugin update DMPPluginHandler.FireOnUpdate(); Thread.Sleep(10); } } catch (Exception e) { DarkLog.Error("Fatal error thrown, exception: " + e); Server.ShutDown("Crashed!"); } try { long disconnectTime = DateTime.UtcNow.Ticks; bool sendingHighPriotityMessages = true; while (sendingHighPriotityMessages) { if ((DateTime.UtcNow.Ticks - disconnectTime) > 50000000) { DarkLog.Debug("Shutting down with " + Server.playerCount + " players, " + clients.Count + " connected clients"); break; } sendingHighPriotityMessages = false; foreach (ClientObject client in clients) { if (client.authenticated && (client.sendMessageQueueHigh.Count > 0)) { sendingHighPriotityMessages = true; } } Thread.Sleep(10); } ShutdownTCPServer(); } catch (Exception e) { DarkLog.Fatal("Fatal error thrown during shutdown, exception: " + e); throw; } }