import random import base64 import json import os import datetime class Model: def __init__(self, filename = "tehmodel.json"): self.sockets = {} # mapping: client -> socket self.filename = filename self.model = None if os.path.isfile(filename): with open(filename) as f: try: self.model = json.load(f) except: self.model = {} else: self.model = {} self.assert_model() def assert_model(self): if not "clients" in self.model: self.model["clients"] = {} if not "sessions" in self.model: self.model["sessions"] = {} def handle_post(self, clientid, data): print("I have received P O S T data: " + str(data)) print("let me tell everyone") for k, v in self.sockets.items(): v.send_json({"message": "nudes"}) def save(self): with open(self.filename, "w") as f: json.dump(self.model, f) if not os.path.isdir("backups"): try: os.mkdir("backups") except FileExistsError: print("backups is a file, no directory. Please delete yourself") datestring = datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%d-%H%M%S") with open(f"backups/{datestring}_{self.filename}", "w") as f: json.dump(self.model, f) def exists_client(self, clientid: str) -> bool: return clientid in self.model["clients"] def create_client(self) -> str: clientname = base64.b32encode(bytearray(random.randint(0, 0xFF) for _ in range(10)))[:16].decode().lower() newclient = {"id": clientname} self.model["clients"][clientname] = newclient return clientname def create_session(self) -> str: sessionname = base64.b32encode(bytearray(random.randint(0, 0xFF) for _ in range(10)))[:16].decode().lower() newsession = {"id": sessionname, "clients": []} self.model["sessions"][sessionname] = newsession return sessionname def subscribe(self, clientid, socket): self.sockets[clientid] = socket def unsubscribe(self, socket): for k,v in self.sockets.items(): if v == socket: self.sockets.pop(k)