From 621e33482140c399f883b6e858f45e9c04471729 Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Mon, 9 Nov 2020 22:45:51 +0100
Subject: [PATCH] Make curses client PING.

---
 new2/plomrogue/io_websocket.py |  2 +-
 new2/rogue_chat_curses.py      | 12 ++++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/new2/plomrogue/io_websocket.py b/new2/plomrogue/io_websocket.py
index ea16597..0a74f4e 100644
--- a/new2/plomrogue/io_websocket.py
+++ b/new2/plomrogue/io_websocket.py
@@ -13,7 +13,7 @@ class PlomWebSocket(WebSocket):
                 if self.server.clients[connection_id] == self:
                     self.server.queue.put((connection_id, self.data))
                     break
-    
+
     def handleConnected(self):
         import uuid
         print('CONNECTION FROM:', self.address)
diff --git a/new2/rogue_chat_curses.py b/new2/rogue_chat_curses.py
index ee2cae8..15d0053 100755
--- a/new2/rogue_chat_curses.py
+++ b/new2/rogue_chat_curses.py
@@ -139,8 +139,13 @@ def cmd_ANNOTATION(game, position, msg):
         game.tui.do_refresh = True
 cmd_ANNOTATION.argtypes = 'yx_tuple:nonneg string'
 
+def cmd_PONG(game):
+    pass
+cmd_PONG.argtypes = ''
+
 class Game(GameBase):
     commands = {'LOGIN_OK': cmd_LOGIN_OK,
+                'PONG': cmd_PONG,
                 'CHAT': cmd_CHAT,
                 'PLAYER_ID': cmd_PLAYER_ID,
                 'TURN': cmd_TURN,
@@ -296,6 +301,7 @@ class TUI:
 
     def loop(self, stdscr):
         import time
+        import datetime
 
         def safe_addstr(y, x, line):
             if y < self.size.y - 1 or x + len(line) < self.size.x:
@@ -492,7 +498,13 @@ class TUI:
         self.input_ = ''
         input_prompt = '> '
         connect()
+        last_ping = datetime.datetime.now()
+        interval = datetime.timedelta(seconds=30)
         while True:
+            now = datetime.datetime.now()
+            if now - last_ping > interval:
+                self.send('PING')
+                last_ping = now
             if self.do_refresh:
                 draw_screen()
                 self.do_refresh = False
-- 
2.30.2