EG/plugins/user/realtime_communication/plugin.py
2025-12-12 16:16:15 +08:00

391 lines
13 KiB
Python

"""
实时通信插件主文件
为EG引擎提供实时通信功能
"""
import time
from typing import Dict, Any
# 导入各个模块
from .core.websocket_server import WebSocketServer
from .clients.client_manager import ClientManager
from .messaging.message_router import MessageRouter
from .rooms.room_manager import RoomManager
from .protocol.protocol_handler import ProtocolHandler
from .auth.auth_manager import AuthManager
from .serialization.data_serializer import DataSerializer
from .monitoring.communication_monitor import CommunicationMonitor
from .config.comm_config import CommConfig
from .events.event_handler import EventHandler
from .editor.comm_editor import CommEditor
class RealtimeCommunicationPlugin:
"""
实时通信插件主类
整合所有通信功能模块
"""
def __init__(self, engine):
"""
初始化实时通信插件
Args:
engine: EG引擎实例
"""
self.engine = engine
self.enabled = False
self.initialized = False
# 插件信息
self.plugin_info = {
"name": "Realtime Communication Plugin",
"version": "1.0.0",
"author": "EG Plugin System",
"description": "为EG引擎提供实时通信功能"
}
# 插件状态
self.plugin_state = {
"initialized_modules": [],
"last_update": 0.0,
"total_messages": 0,
"active_connections": 0
}
# 插件统计
self.plugin_stats = {
"messages_sent": 0,
"messages_received": 0,
"connections_accepted": 0,
"connections_dropped": 0,
"errors": 0
}
# 功能模块
self.websocket_server = None
self.client_manager = None
self.message_router = None
self.room_manager = None
self.protocol_handler = None
self.auth_manager = None
self.data_serializer = None
self.monitor = None
self.config_manager = None
self.event_handler = None
self.editor = None
print("✓ 实时通信插件已创建")
def initialize(self) -> bool:
"""
初始化插件
Returns:
是否初始化成功
"""
try:
print("正在初始化实时通信插件...")
# 初始化配置管理器
self.config_manager = CommConfig(self)
if self.config_manager.initialize():
self.plugin_state["initialized_modules"].append("config_manager")
else:
print("✗ 配置管理器初始化失败")
return False
# 初始化认证管理器
self.auth_manager = AuthManager(self)
if self.auth_manager.initialize():
self.plugin_state["initialized_modules"].append("auth_manager")
else:
print("✗ 认证管理器初始化失败")
return False
# 初始化数据序列化器
self.data_serializer = DataSerializer(self)
if self.data_serializer.initialize():
self.plugin_state["initialized_modules"].append("data_serializer")
else:
print("✗ 数据序列化器初始化失败")
return False
# 初始化协议处理器
self.protocol_handler = ProtocolHandler(self)
if self.protocol_handler.initialize():
self.plugin_state["initialized_modules"].append("protocol_handler")
else:
print("✗ 协议处理器初始化失败")
return False
# 初始化客户端管理器
self.client_manager = ClientManager(self)
if self.client_manager.initialize():
self.plugin_state["initialized_modules"].append("client_manager")
else:
print("✗ 客户端管理器初始化失败")
return False
# 初始化消息路由器
self.message_router = MessageRouter(self)
if self.message_router.initialize():
self.plugin_state["initialized_modules"].append("message_router")
else:
print("✗ 消息路由器初始化失败")
return False
# 初始化房间管理器
self.room_manager = RoomManager(self)
if self.room_manager.initialize():
self.plugin_state["initialized_modules"].append("room_manager")
else:
print("✗ 房间管理器初始化失败")
return False
# 初始化WebSocket服务器
self.websocket_server = WebSocketServer(self)
if self.websocket_server.initialize():
self.plugin_state["initialized_modules"].append("websocket_server")
else:
print("✗ WebSocket服务器初始化失败")
return False
# 初始化事件处理器
self.event_handler = EventHandler(self)
if self.event_handler.initialize():
self.plugin_state["initialized_modules"].append("event_handler")
else:
print("✗ 事件处理器初始化失败")
return False
# 初始化监控系统
self.monitor = CommunicationMonitor(self)
if self.monitor.initialize():
self.plugin_state["initialized_modules"].append("monitor")
else:
print("✗ 监控系统初始化失败")
return False
# 初始化编辑器接口
self.editor = CommEditor(self)
if self.editor.initialize():
self.plugin_state["initialized_modules"].append("editor")
else:
print("✗ 编辑器接口初始化失败")
return False
self.initialized = True
print("✓ 实时通信插件初始化完成")
return True
except Exception as e:
print(f"✗ 实时通信插件初始化失败: {e}")
self.plugin_stats["errors"] += 1
import traceback
traceback.print_exc()
return False
def enable(self) -> bool:
"""
启用插件
Returns:
是否启用成功
"""
try:
if not self.initialized:
print("✗ 实时通信插件未初始化")
return False
print("正在启用实时通信插件...")
# 启用各模块(按依赖顺序)
modules_to_enable = [
("config_manager", self.config_manager),
("auth_manager", self.auth_manager),
("data_serializer", self.data_serializer),
("protocol_handler", self.protocol_handler),
("client_manager", self.client_manager),
("message_router", self.message_router),
("room_manager", self.room_manager),
("event_handler", self.event_handler),
("monitor", self.monitor),
("editor", self.editor),
("websocket_server", self.websocket_server)
]
for module_name, module in modules_to_enable:
if module and not module.enable():
print(f"{module_name} 启用失败")
return False
elif module:
print(f"{module_name} 已启用")
self.enabled = True
print("✓ 实时通信插件已启用")
return True
except Exception as e:
print(f"✗ 实时通信插件启用失败: {e}")
self.plugin_stats["errors"] += 1
import traceback
traceback.print_exc()
return False
def disable(self):
"""禁用插件"""
try:
print("正在禁用实时通信插件...")
# 禁用各模块(按依赖顺序倒序)
modules_to_disable = [
("websocket_server", self.websocket_server),
("editor", self.editor),
("monitor", self.monitor),
("event_handler", self.event_handler),
("room_manager", self.room_manager),
("message_router", self.message_router),
("client_manager", self.client_manager),
("protocol_handler", self.protocol_handler),
("data_serializer", self.data_serializer),
("auth_manager", self.auth_manager),
("config_manager", self.config_manager)
]
for module_name, module in modules_to_disable:
if module:
module.disable()
print(f"{module_name} 已禁用")
self.enabled = False
print("✓ 实时通信插件已禁用")
except Exception as e:
print(f"✗ 实时通信插件禁用失败: {e}")
self.plugin_stats["errors"] += 1
import traceback
traceback.print_exc()
def finalize(self):
"""清理插件资源"""
try:
print("正在清理实时通信插件资源...")
# 禁用插件
if self.enabled:
self.disable()
# 清理各模块
modules_to_finalize = [
self.websocket_server,
self.client_manager,
self.message_router,
self.room_manager,
self.protocol_handler,
self.auth_manager,
self.data_serializer,
self.monitor,
self.config_manager,
self.event_handler,
self.editor
]
for module in modules_to_finalize:
if module:
module.finalize()
self.initialized = False
print("✓ 实时通信插件资源已清理")
except Exception as e:
print(f"✗ 实时通信插件资源清理失败: {e}")
import traceback
traceback.print_exc()
def update(self, dt: float):
"""
更新插件状态
Args:
dt: 时间增量(秒)
"""
try:
if not self.enabled:
return
current_time = time.time()
# 更新各模块
if self.websocket_server:
self.websocket_server.update(dt)
if self.client_manager:
self.client_manager.update(dt)
if self.message_router:
self.message_router.update(dt)
if self.room_manager:
self.room_manager.update(dt)
if self.monitor:
self.monitor.update(dt)
if self.editor:
self.editor.update(dt)
self.plugin_state["last_update"] = current_time
except Exception as e:
print(f"✗ 实时通信插件更新失败: {e}")
self.plugin_stats["errors"] += 1
import traceback
traceback.print_exc()
def get_plugin_info(self) -> Dict[str, Any]:
"""
获取插件信息
Returns:
插件信息字典
"""
return self.plugin_info.copy()
def get_plugin_state(self) -> Dict[str, Any]:
"""
获取插件状态
Returns:
插件状态字典
"""
return self.plugin_state.copy()
def get_plugin_stats(self) -> Dict[str, Any]:
"""
获取插件统计信息
Returns:
插件统计字典
"""
return {
"info": self.plugin_info.copy(),
"state": self.plugin_state.copy(),
"stats": self.plugin_stats.copy()
}
def reset_stats(self):
"""重置插件统计信息"""
try:
self.plugin_stats = {
"messages_sent": 0,
"messages_received": 0,
"connections_accepted": 0,
"connections_dropped": 0,
"errors": 0
}
print("✓ 插件统计信息已重置")
except Exception as e:
print(f"✗ 插件统计信息重置失败: {e}")
# 插件导出
plugin = RealtimeCommunicationPlugin