mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 07:03:53 +08:00
92 lines
3.3 KiB
Python
92 lines
3.3 KiB
Python
import asyncio
|
|||
|
|
import json
|
||
|
|
from typing import Dict, Any
|
||
|
|
|
||
|
|
from core.handle.textMessageHandler import TextMessageHandler
|
||
|
|
from core.handle.textMessageType import TextMessageType
|
||
|
|
from core.providers.tools.device_mcp import handle_mcp_message
|
||
|
|
|
||
|
|
TAG = __name__
|
||
|
|
|
||
|
|
class ServerTextMessageHandler(TextMessageHandler):
|
||
|
|
"""MCP消息处理器"""
|
||
|
|
|
||
|
|
@property
|
||
|
|
def message_type(self) -> TextMessageType:
|
||
|
|
return TextMessageType.SERVER
|
||
|
|
|
||
|
|
async def handle(self, conn, msg_json: Dict[str, Any]) -> None:
|
||
|
|
# 如果配置是从API读取的,则需要验证secret
|
||
|
|
if not conn.read_config_from_api:
|
||
|
|
return
|
||
|
|
# 获取post请求的secret
|
||
|
|
post_secret = msg_json.get("content", {}).get("secret", "")
|
||
|
|
secret = conn.config["manager-api"].get("secret", "")
|
||
|
|
# 如果secret不匹配,则返回
|
||
|
|
if post_secret != secret:
|
||
|
|
await conn.websocket.send(
|
||
|
|
json.dumps(
|
||
|
|
{
|
||
|
|
"type": "server",
|
||
|
|
"status": "error",
|
||
|
|
"message": "服务器密钥验证失败",
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
return
|
||
|
|
# 动态更新配置
|
||
|
|
if msg_json["action"] == "update_config":
|
||
|
|
try:
|
||
|
|
# 更新WebSocketServer的配置
|
||
|
|
if not conn.server:
|
||
|
|
await conn.websocket.send(
|
||
|
|
json.dumps(
|
||
|
|
{
|
||
|
|
"type": "server",
|
||
|
|
"status": "error",
|
||
|
|
"message": "无法获取服务器实例",
|
||
|
|
"content": {"action": "update_config"},
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
return
|
||
|
|
|
||
|
|
if not await conn.server.update_config():
|
||
|
|
await conn.websocket.send(
|
||
|
|
json.dumps(
|
||
|
|
{
|
||
|
|
"type": "server",
|
||
|
|
"status": "error",
|
||
|
|
"message": "更新服务器配置失败",
|
||
|
|
"content": {"action": "update_config"},
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
return
|
||
|
|
|
||
|
|
# 发送成功响应
|
||
|
|
await conn.websocket.send(
|
||
|
|
json.dumps(
|
||
|
|
{
|
||
|
|
"type": "server",
|
||
|
|
"status": "success",
|
||
|
|
"message": "配置更新成功",
|
||
|
|
"content": {"action": "update_config"},
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
except Exception as e:
|
||
|
|
conn.logger.bind(tag=TAG).error(f"更新配置失败: {str(e)}")
|
||
|
|
await conn.websocket.send(
|
||
|
|
json.dumps(
|
||
|
|
{
|
||
|
|
"type": "server",
|
||
|
|
"status": "error",
|
||
|
|
"message": f"更新配置失败: {str(e)}",
|
||
|
|
"content": {"action": "update_config"},
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
# 重启服务器
|
||
|
|
elif msg_json["action"] == "restart":
|
||
|
|
await conn.handle_restart(msg_json)
|