Files
zsglpt/realtime/socketio_handlers.py

39 lines
1.2 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from __future__ import annotations
from flask_login import current_user
from flask_socketio import emit, join_room, leave_room
from services.accounts_service import load_user_accounts
from services.client_log import log_to_client
from services.state import safe_get_user_accounts_snapshot, safe_get_user_logs
def register_socketio_handlers(socketio) -> None:
@socketio.on("connect")
def handle_connect():
"""客户端连接"""
if current_user.is_authenticated:
user_id = current_user.id
join_room(f"user_{user_id}")
log_to_client("客户端已连接", user_id)
accounts = safe_get_user_accounts_snapshot(user_id)
if not accounts:
load_user_accounts(user_id)
accounts = safe_get_user_accounts_snapshot(user_id)
emit("accounts_list", [acc.to_dict() for acc in accounts.values()])
for log_entry in safe_get_user_logs(user_id):
emit("log", log_entry)
@socketio.on("disconnect")
def handle_disconnect():
"""客户端断开"""
if current_user.is_authenticated:
user_id = current_user.id
leave_room(f"user_{user_id}")