|
|
|
@ -87,7 +87,6 @@ class WebSocketManager: |
|
|
|
if channel_name not in self._channels: |
|
|
|
channel = WebSocketChannel(channel_name, max_size) |
|
|
|
self._channels[channel_name] = channel |
|
|
|
await channel.connect() |
|
|
|
logger.info(f"WebSocket管理器创建Channel: {channel_name}") |
|
|
|
|
|
|
|
# 创建适配器 |
|
|
|
@ -124,13 +123,34 @@ class WebSocketManager: |
|
|
|
if adapter_key not in self._adapters: |
|
|
|
adapter = WebSocketAdapter(client, outbound_channel, inbound_channel) |
|
|
|
self._adapters[adapter_key] = adapter |
|
|
|
await adapter.start() |
|
|
|
logger.info(f"WebSocket管理器创建适配器: {adapter_key}") |
|
|
|
|
|
|
|
except Exception as e: |
|
|
|
logger.error(f"WebSocket管理器创建客户端适配器失败: {client_name} - {e}") |
|
|
|
raise |
|
|
|
|
|
|
|
async def _start_client_channels(self, client_name: str): |
|
|
|
"""启动客户端的所有Channel和适配器 |
|
|
|
|
|
|
|
单一职责:只负责启动Channel和适配器,不处理业务逻辑 |
|
|
|
""" |
|
|
|
try: |
|
|
|
# 启动客户端的所有Channel |
|
|
|
client_channels = self.get_client_channels(client_name) |
|
|
|
for channel_name, channel in client_channels.items(): |
|
|
|
await channel.connect() |
|
|
|
logger.info(f"WebSocket管理器启动Channel: {channel_name}") |
|
|
|
|
|
|
|
# 启动客户端的所有适配器 |
|
|
|
client_adapters = self.get_client_adapters(client_name) |
|
|
|
for adapter_key, adapter in client_adapters.items(): |
|
|
|
await adapter.start() |
|
|
|
logger.info(f"WebSocket管理器启动适配器: {adapter_key}") |
|
|
|
|
|
|
|
except Exception as e: |
|
|
|
logger.error(f"WebSocket管理器启动客户端Channel失败: {client_name} - {e}") |
|
|
|
raise |
|
|
|
|
|
|
|
async def _start_heartbeat_task(self, client_name: str, heartbeat_interval: int): |
|
|
|
"""启动心跳任务 |
|
|
|
|
|
|
|
@ -283,18 +303,31 @@ class WebSocketManager: |
|
|
|
logger.error(f"WebSocket客户端 {name} 不存在") |
|
|
|
return False |
|
|
|
|
|
|
|
# 连接客户端 |
|
|
|
success = await client.connect() |
|
|
|
try: |
|
|
|
# 先连接WebSocket客户端 |
|
|
|
success = await client.connect() |
|
|
|
|
|
|
|
if success: |
|
|
|
# 连接成功后再启动客户端的所有Channel和适配器 |
|
|
|
await self._start_client_channels(name) |
|
|
|
|
|
|
|
# 最后启动心跳任务 |
|
|
|
if hasattr(client, 'heartbeat_interval'): |
|
|
|
try: |
|
|
|
await self._start_heartbeat_task(name, client.heartbeat_interval) |
|
|
|
logger.info(f"WebSocket管理器连接成功后启动心跳任务: {name}") |
|
|
|
except Exception as e: |
|
|
|
logger.error(f"心跳任务启动失败: {name} - {e}") |
|
|
|
|
|
|
|
logger.info(f"WebSocket管理器客户端连接成功: {name}") |
|
|
|
else: |
|
|
|
logger.error(f"WebSocket客户端连接失败: {name}") |
|
|
|
|
|
|
|
# 如果连接成功,启动心跳任务 |
|
|
|
if success and hasattr(client, 'heartbeat_interval'): |
|
|
|
try: |
|
|
|
await self._start_heartbeat_task(name, client.heartbeat_interval) |
|
|
|
logger.info(f"WebSocket管理器连接成功后启动心跳任务: {name}") |
|
|
|
except Exception as e: |
|
|
|
logger.error(f"心跳任务启动失败: {name} - {e}") |
|
|
|
return success |
|
|
|
|
|
|
|
return success |
|
|
|
except Exception as e: |
|
|
|
logger.error(f"WebSocket管理器连接客户端失败: {name} - {e}") |
|
|
|
return False |
|
|
|
|
|
|
|
async def disconnect_client(self, name: str) -> bool: |
|
|
|
"""断开指定客户端""" |
|
|
|
|