static void Main(string[] args) { Console.TreatControlCAsInput = true; masterHandler = new MasterHandler(JObject.Parse(File.ReadAllText("config.json"))); masterHandler.Start(); while (true) { if (Console.KeyAvailable) { var key = Console.ReadKey(true); if (key.Key == ConsoleKey.C && key.Modifiers.HasFlag(ConsoleModifiers.Control)) { masterHandler.Stop(); break; } } } }
public MultiServerClient(MasterHandler handler, ClientInfo info, WebSocketSession session) { this.handler = handler; this.info = info; this.session = session; timeoutTimer = new Timer(x => { if (status == ClientWorkerStatus.Connecting) { session.Close(SuperSocket.SocketBase.CloseReason.TimeOut); } }, null, 2000, Timeout.Infinite); keepAliveSw = new Stopwatch(); keepAliveTimer = new Timer(x => { if (!session.Connected) { return; } lock (keepAliveSw) { if (!keepAliveSw.IsRunning) { keepAliveSw.Start(); } if (keepAliveSw.ElapsedMilliseconds > 5000) { handler.Logger.Log($"Client {session.SessionID} is disconnected with idle of {keepAliveSw.ElapsedMilliseconds}"); keepAliveSw.Stop(); handler.RemoveClient(session.SessionID); session.Close(); status = ClientWorkerStatus.None; keepAliveTimer.Change(Timeout.Infinite, Timeout.Infinite); return; } } SendPacket(new SimplePacket() { Data = new byte[0], Type = PacketType.Nop }); }, null, 0, 1000); }