from datetime import datetime import time from flask import Blueprint, make_response, request, jsonify, session, has_request_context from flask_socketio import SocketIO, Namespace, emit, send, join_room, leave_room from libs.noSys.noSysModule import NoSysModule class EventsSocketio(): def __init__(self, module:NoSysModule): self.module = module self.namespace = f"/ws/{self.module.name}" self.socketio:SocketIO = None def register_events(self, socketio:SocketIO): self.socketio = socketio self.default_events() self.events() def default_events(self): @self.socketio.on("health", namespace=self.namespace) def on_health(*args, **kwargs): self.emit("health", {"status": "ok"}) @self.socketio.on("ping", namespace=self.namespace) def on_ping(data=None): self.emit("pong", {"ts": time.time(), "echo": data}) def emit(self, event:str, data=None, room=None, **kwargs): target = None if room: target = room elif has_request_context(): target = request.sid self.socketio.emit(event, data, to=target, namespace=self.namespace, **kwargs) def on(self, event: str): def decorator(handler): @self.socketio.on(event, namespace=self.namespace) def wrapper(*args, **kwargs): try: return handler(*args, **kwargs) except Exception as e: self.error(str(e)) return wrapper return decorator def events(self): pass