feat: Step 4 - 聊天 WebSocket 事件 (v0.9.3)

- 创建 chat_handlers.py 聊天事件处理器
- 实现 6 个 C→S 事件:
  - chat.send.create - 创建聊天会话
  - chat.send.join - 加入会话
  - chat.send.leave - 离开会话
  - chat.send.message - 发送消息
  - chat.send.typing - 正在输入
  - chat.send.read - 消息已读
- 实现 7 个 S→C 事件:
  - chat.created - 会话已创建
  - chat.joined - 已加入会话
  - chat.left - 已离开会话
  - chat.message - 收到消息
  - chat.typing - 对方正在输入
  - chat.read - 消息已读确认
  - chat.closed - 会话被关闭
- 创建 ChatConnectionManager 管理连接
- 注册聊天事件处理器
- 更新版本号到 0.9.3
This commit is contained in:
2026-03-15 10:34:40 +08:00
parent 608e53ed2f
commit b74ec0b73d
2 changed files with 402 additions and 0 deletions

View File

@@ -20,6 +20,7 @@ connection_manager = ConnectionManager()
def register_handlers(socketio):
"""注册 Socket.IO 事件处理器"""
# ==================== 连接事件 ====================
@socketio.on('connect')
def handle_connect():
"""客户端连接"""
@@ -38,10 +39,13 @@ def register_handlers(socketio):
if sid in connection_manager.socket_sessions:
del connection_manager.socket_sessions[sid]
# ==================== 认证事件 ====================
@socketio.on('auth')
def handle_auth(data):
"""处理认证"""
from flask import request
from app.models import User
sid = request.sid
token = data.get('token')
@@ -71,11 +75,13 @@ def register_handlers(socketio):
except Exception as e:
emit('auth_error', {'code': 'INVALID_TOKEN', 'message': str(e)})
# ==================== 心跳事件 ====================
@socketio.on('ping')
def handle_ping(data):
"""心跳响应"""
emit('pong', {'timestamp': datetime.utcnow().timestamp()})
# ==================== 会话事件 ====================
@socketio.on('session.create')
def handle_session_create(data):
"""创建会话"""
@@ -124,6 +130,7 @@ def register_handlers(socketio):
'participants': [session.user_id, session.primary_agent_id]
})
# ==================== 消息事件 ====================
@socketio.on('message.send')
def handle_message_send(data):
"""发送消息"""
@@ -180,3 +187,7 @@ def register_handlers(socketio):
db.session.commit()
emit('message.acked', {'message_id': message_id, 'status': status})
# ==================== 聊天事件 (Step 4) ====================
from app.socketio.chat_handlers import register_chat_handlers
register_chat_handlers(socketio)