home · contact · privacy
More TUI client refactoring.
[plomrogue2] / plomrogue_client / tui.py
index 9f28a04c542ba586ad3650679c43c70b3fd24734..3ed1b62772d0e635db5574a7e2f804f0f26b1c51 100644 (file)
@@ -33,24 +33,17 @@ class TUI:
         self.size = self.size - YX(self.size.y % 4, 0)
         self.size = self.size - YX(0, self.size.x % 4)
 
+    def log(self, msg):
+        self._log += [msg]
+        self.do_refresh = True
+
     def init_loop(self):
         curses.curs_set(0)  # hide cursor
         self.stdscr.timeout(10)
         self.reset_size()
 
-    def run_loop(self, stdscr):
-        self.stdscr = stdscr
-        self.init_loop()
-        while True:
-            try:
-                self.loop()
-            except AbortOnGetkey:
-                continue
-            self.do_refresh = True
-
-    def log(self, msg):
-        self._log += [msg]
-        self.do_refresh = True
+    def draw_screen(self):
+        self.stdscr.clear()
 
     def get_key_and_keycode(self):
         try:
@@ -69,6 +62,24 @@ class TUI:
                 raise AbortOnGetkey
         return key, keycode
 
+    def run_loop(self, stdscr):
+        self.stdscr = stdscr
+        self.init_loop()
+        while True:
+            self.on_each_loop_start()
+            for msg in self.socket.get_message():
+                self.handle_server_message(msg)
+            if self.do_refresh:
+                self.draw_screen()
+                self.do_refresh = False
+            try:
+                key, keycode = self.get_key_and_keycode()
+            except AbortOnGetkey:
+                continue
+            self.on_key(key, keycode)
+            self.do_refresh = True
+
+
 
 def msg_into_lines_of_width(msg, width):
     chunk = ''