391 lines
13 KiB
Python
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 |