优化一下
This commit is contained in:
@@ -27,18 +27,19 @@ class GsCoreClient:
|
|||||||
if self._ws is not None:
|
if self._ws is not None:
|
||||||
return True
|
return True
|
||||||
try:
|
try:
|
||||||
logger.info(f"[GsCoreClient] 正在连接早柚核心: {self._url}")
|
# 兼容性方案:如果 Header 传参报错,尝试将 token 附加在 URL 参数中
|
||||||
|
# 格式变为: ws://ip:port/ws/abot?token=liuwei
|
||||||
|
connector_url = self._url
|
||||||
|
if "?" in connector_url:
|
||||||
|
connector_url += f"&token={self._token}"
|
||||||
|
else:
|
||||||
|
connector_url += f"?token={self._token}"
|
||||||
|
|
||||||
# 构造 Header
|
logger.info(f"[GsCoreClient] 正在尝试连接 (兼容模式): {connector_url}")
|
||||||
headers = {
|
|
||||||
"Authorization": f"Bearer {self._token}",
|
|
||||||
"Token": self._token
|
|
||||||
}
|
|
||||||
|
|
||||||
# 修复点:确保 extra_headers 正确传递
|
# 去掉 extra_headers,避免触发底层 create_connection 的参数检查
|
||||||
self._ws = await websockets.connect(
|
self._ws = await websockets.connect(
|
||||||
self._url,
|
connector_url,
|
||||||
extra_headers=headers,
|
|
||||||
max_size=10 ** 7
|
max_size=10 ** 7
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -49,11 +50,10 @@ class GsCoreClient:
|
|||||||
|
|
||||||
loop = asyncio.get_running_loop()
|
loop = asyncio.get_running_loop()
|
||||||
self._recv_task = loop.create_task(self._recv_loop())
|
self._recv_task = loop.create_task(self._recv_loop())
|
||||||
logger.success("[GsCoreClient] 连接成功且鉴权通过")
|
logger.success("[GsCoreClient] 连接成功")
|
||||||
return True
|
return True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# 如果依然报错,可能是 websockets 版本过旧,建议升级: pip install --upgrade websockets
|
logger.error(f"[GsCoreClient] 连接失败: {e}")
|
||||||
logger.error(f"[GsCoreClient] 连接或鉴权失败: {e}")
|
|
||||||
self._ws = None
|
self._ws = None
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -62,25 +62,22 @@ class GsCoreClient:
|
|||||||
try:
|
try:
|
||||||
if not self._ws:
|
if not self._ws:
|
||||||
break
|
break
|
||||||
|
|
||||||
msg = await self._ws.recv()
|
msg = await self._ws.recv()
|
||||||
msg_str = msg.decode("utf-8") if isinstance(msg, bytes) else msg
|
msg_str = msg.decode("utf-8") if isinstance(msg, bytes) else msg
|
||||||
|
|
||||||
try:
|
try:
|
||||||
payload = json.loads(msg_str)
|
payload = json.loads(msg_str)
|
||||||
if self._message_handler:
|
if self._message_handler:
|
||||||
await self._message_handler(payload)
|
await self._message_handler(payload)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(f"[GsCoreClient] 解析核心返回失败: {e}")
|
logger.exception(f"[GsCoreClient] 解析返回失败: {e}")
|
||||||
|
|
||||||
except websockets.exceptions.ConnectionClosed as e:
|
except websockets.exceptions.ConnectionClosed as e:
|
||||||
if not self._is_closing:
|
if not self._is_closing:
|
||||||
logger.warning(f"[GsCoreClient] WebSocket连接断开 ({e.code}),5秒后重连...")
|
logger.warning(f"[GsCoreClient] 连接断开 ({e.code}),5秒后重连...")
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(f"[GsCoreClient] 接收消息异常: {e}")
|
logger.exception(f"[GsCoreClient] 接收异常: {e}")
|
||||||
break
|
break
|
||||||
await asyncio.sleep(0.1)
|
await asyncio.sleep(0.1)
|
||||||
|
|
||||||
@@ -94,6 +91,7 @@ class GsCoreClient:
|
|||||||
if not await self.connect():
|
if not await self.connect():
|
||||||
return False
|
return False
|
||||||
try:
|
try:
|
||||||
|
# 显式检查连接状态
|
||||||
await self._ws.send(message.encode("utf-8"))
|
await self._ws.send(message.encode("utf-8"))
|
||||||
return True
|
return True
|
||||||
except (websockets.exceptions.ConnectionClosed, Exception) as e:
|
except (websockets.exceptions.ConnectionClosed, Exception) as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user