From cc31ed6be9b67448959208eef2805ab4f88928d5 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sat, 15 Apr 2017 21:19:07 +0000 Subject: [PATCH] Save changes to logfile if supplied with logfile name --- client.py | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/client.py b/client.py index 683a9ff..f395794 100644 --- a/client.py +++ b/client.py @@ -4,6 +4,7 @@ import os import string import sys import threading +import time import websocket from websocket import WebSocketException as WSException @@ -13,17 +14,19 @@ from utils import Position from clientchunkpool import ClientChunkPool class Client(): - def __init__(self, address): + def __init__(self, address, logfile=None): self.stopping = False + + self.map_ = None + self.chunkmap = None self.chunkmap_active = False self.address = f"ws://{address}/" self._drawevent = threading.Event() self.pool = ClientChunkPool(self) - #self.map_ = Map(sizex, sizey, self.pool) - #self.chunkmap = Chunkmap(sizex, sizey, self.pool) # size changeable by +/-? - #self.sock = socket.Socket(...) + self.logfile = logfile + self.log_messages = [] def launch(self, stdscr): # connect to server @@ -61,7 +64,7 @@ class Client(): while not self.stopping: self._drawevent.wait() self._drawevent.clear() - stdscr.noutrefresh() + with self.map_ as m: m.draw() @@ -75,10 +78,23 @@ class Client(): #m.noutrefresh() curses.doupdate() + + if self.logfile: + self.save_log(self.logfile) def redraw(self): self._drawevent.set() + def log(self, message): + if self.logfile: + self.log_messages.append(message) + + def save_log(self, filename): + with open(filename, "w") as f: + f.write(f"[[[ {int(time.time())} ]]]\n") + for msg in self.log_messages: + f.write(msg + "\n") + def input_thread(self, scr): while True: i = scr.get_wch() @@ -90,6 +106,11 @@ class Client(): elif i == 267: # F3 self.map_.alternating_colors = not self.map_.alternating_colors self.redraw() + elif i == 268: + self.stdscr_visible = not self.stdscr_visible + if self.stdscr_visible: self.stdscr.redrawwin() + else: self.map_.redraw() + self.redraw() elif i == 269: # F5 self.map_.redraw() # scrolling the map (10 vertical, 20 horizontal) @@ -118,6 +139,8 @@ class Client(): #self.map_.write(i) elif isinstance(i, str) and len(i) == 1 and ord(i) > 31 and (i not in string.whitespace or i == " "): self.map_.write(i) + + self.log(f"K: {i!r}") def connection_thread(self): while True: @@ -153,14 +176,17 @@ class Client(): self._ws.send(json.dumps(message)) def main(argv): - if len(argv) != 2: + if len(argv) == 2: + client = Client(argv[1]) + elif len(argv) == 3: + client = Client(argv[1], argv[2]) + else: print("Usage:") - print(f" {argv[0]} address") + print(f" {argv[0]} address [logfile]") return os.environ.setdefault('ESCDELAY', '25') # only a 25 millisecond delay - client = Client(argv[1]) curses.wrapper(client.launch) if __name__ == "__main__":