51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
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 |