home · contact · privacy
Server, plugin: Refactor thingproliferation (plugin integration).
[plomrogue] / roguelike-client
index 629d4dc4e448243b0842720c0d8de67af09110b7..d527a904f061e1552210a196286d73dc4c56cd19 100755 (executable)
@@ -89,6 +89,14 @@ def read_message_queue():
             redraw_windows = True
         elif message == "WORLD_UPDATED":
             query_mapcell()
+        elif message[:6] == "PLUGIN":
+            str_plugin = message[7:]
+            if (str_plugin.replace("_", "").isalnum()
+                and os.access("plugins/client/" + str_plugin + ".py",
+                    os.F_OK)):
+                exec(open("plugins/client/" + str_plugin + ".py").read())
+                return
+            raise SystemExit("Invalid plugin load path in message: " + message)
 read_message_queue.parse_thingshere = False
 
 
@@ -123,10 +131,13 @@ def cursed_main(stdscr):
         if new_open_end:
             message_queue["open_end"] = True
 
+    def set_and_redraw_windows(*ignore):
+        set_windows()
+        draw_screen()
+
     curses.noecho()
     curses.curs_set(False)
-    signal.signal(signal.SIGWINCH,
-        lambda ignore_1, ignore_2: set_windows())
+    signal.signal(signal.SIGWINCH, set_and_redraw_windows)
     set_windows()
     delay = 1
     while True: