397 lines
12 KiB
Python
397 lines
12 KiB
Python
"""
|
|
网络同步插件
|
|
为EG引擎提供完整的网络同步功能
|
|
"""
|
|
|
|
from .core.sync_manager import SyncManager
|
|
from .network.network_manager import NetworkManager
|
|
from .protocol.protocol_handler import ProtocolHandler
|
|
from .sync.object_sync import ObjectSync
|
|
from .connection.connection_manager import ConnectionManager
|
|
from .serialization.data_serializer import DataSerializer
|
|
from .clock.clock_sync import ClockSync
|
|
from .prediction.prediction_manager import PredictionManager
|
|
from .config.sync_config import SyncConfig
|
|
from .editor.sync_editor import SyncEditor
|
|
from .events.event_handler import NetworkEventHandler
|
|
from .utils.network_utils import NetworkUtils
|
|
from .encryption.encryption_manager import EncryptionManager
|
|
|
|
class NetworkSyncPlugin:
|
|
"""
|
|
网络同步插件主类
|
|
整合所有网络同步功能模块
|
|
"""
|
|
|
|
def __init__(self, engine):
|
|
"""
|
|
初始化网络同步插件
|
|
|
|
Args:
|
|
engine: EG引擎实例
|
|
"""
|
|
self.engine = engine
|
|
self.name = "NetworkSync"
|
|
self.version = "1.0.0"
|
|
self.author = "EG Plugin System"
|
|
|
|
# 功能模块
|
|
self.sync_manager = None
|
|
self.network_manager = None
|
|
self.protocol_handler = None
|
|
self.object_sync = None
|
|
self.connection_manager = None
|
|
self.data_serializer = None
|
|
self.clock_sync = None
|
|
self.prediction_manager = None
|
|
self.sync_config = None
|
|
self.sync_editor = None
|
|
self.event_handler = None
|
|
self.network_utils = None
|
|
self.encryption_manager = None
|
|
|
|
# 插件状态
|
|
self.enabled = False
|
|
self.initialized = False
|
|
self.is_server = False
|
|
self.is_client = False
|
|
|
|
# 性能统计
|
|
self.stats = {
|
|
'bytes_sent': 0,
|
|
'bytes_received': 0,
|
|
'packets_sent': 0,
|
|
'packets_received': 0,
|
|
'sync_objects': 0,
|
|
'connections': 0,
|
|
'sync_errors': 0,
|
|
'latency': 0.0
|
|
}
|
|
|
|
print(f"✓ 网络同步插件 v{self.version} 已创建")
|
|
|
|
def initialize(self) -> bool:
|
|
"""
|
|
初始化插件
|
|
|
|
Returns:
|
|
是否初始化成功
|
|
"""
|
|
try:
|
|
print("正在初始化网络同步插件...")
|
|
|
|
# 初始化核心组件
|
|
self.sync_manager = SyncManager(self)
|
|
self.network_manager = NetworkManager(self)
|
|
self.protocol_handler = ProtocolHandler(self)
|
|
self.object_sync = ObjectSync(self)
|
|
self.connection_manager = ConnectionManager(self)
|
|
self.data_serializer = DataSerializer(self)
|
|
self.clock_sync = ClockSync(self)
|
|
self.prediction_manager = PredictionManager(self)
|
|
self.sync_config = SyncConfig(self)
|
|
self.sync_editor = SyncEditor(self)
|
|
self.event_handler = NetworkEventHandler(self)
|
|
self.network_utils = NetworkUtils(self)
|
|
self.encryption_manager = EncryptionManager(self)
|
|
|
|
# 初始化各个模块
|
|
modules = [
|
|
self.sync_manager,
|
|
self.network_manager,
|
|
self.protocol_handler,
|
|
self.object_sync,
|
|
self.connection_manager,
|
|
self.data_serializer,
|
|
self.clock_sync,
|
|
self.prediction_manager,
|
|
self.sync_config,
|
|
self.sync_editor,
|
|
self.event_handler,
|
|
self.network_utils,
|
|
self.encryption_manager
|
|
]
|
|
|
|
for module in modules:
|
|
if module and not module.initialize():
|
|
print(f"✗ 模块初始化失败: {module.__class__.__name__}")
|
|
return False
|
|
|
|
self.initialized = True
|
|
print("✓ 网络同步插件初始化完成")
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"✗ 网络同步插件初始化失败: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return False
|
|
|
|
def enable(self) -> bool:
|
|
"""
|
|
启用插件
|
|
|
|
Returns:
|
|
是否启用成功
|
|
"""
|
|
try:
|
|
if not self.initialized:
|
|
print("✗ 插件未初始化")
|
|
return False
|
|
|
|
print("正在启用网络同步插件...")
|
|
|
|
# 启用各个模块
|
|
modules = [
|
|
self.sync_manager,
|
|
self.network_manager,
|
|
self.protocol_handler,
|
|
self.object_sync,
|
|
self.connection_manager,
|
|
self.data_serializer,
|
|
self.clock_sync,
|
|
self.prediction_manager,
|
|
self.sync_config,
|
|
self.sync_editor,
|
|
self.event_handler,
|
|
self.network_utils,
|
|
self.encryption_manager
|
|
]
|
|
|
|
for module in modules:
|
|
if module and not module.enable():
|
|
print(f"✗ 模块启用失败: {module.__class__.__name__}")
|
|
return False
|
|
|
|
self.enabled = True
|
|
print("✓ 网络同步插件已启用")
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"✗ 网络同步插件启用失败: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return False
|
|
|
|
def disable(self):
|
|
"""禁用插件"""
|
|
try:
|
|
if not self.enabled:
|
|
return
|
|
|
|
print("正在禁用网络同步插件...")
|
|
|
|
# 禁用各个模块
|
|
modules = [
|
|
self.sync_manager,
|
|
self.network_manager,
|
|
self.protocol_handler,
|
|
self.object_sync,
|
|
self.connection_manager,
|
|
self.data_serializer,
|
|
self.clock_sync,
|
|
self.prediction_manager,
|
|
self.sync_config,
|
|
self.sync_editor,
|
|
self.event_handler,
|
|
self.network_utils,
|
|
self.encryption_manager
|
|
]
|
|
|
|
for module in modules:
|
|
if module:
|
|
module.disable()
|
|
|
|
self.enabled = False
|
|
print("✓ 网络同步插件已禁用")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 网络同步插件禁用失败: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
def finalize(self):
|
|
"""清理插件资源"""
|
|
try:
|
|
print("正在清理网络同步插件资源...")
|
|
|
|
# 清理各个模块
|
|
modules = [
|
|
self.sync_manager,
|
|
self.network_manager,
|
|
self.protocol_handler,
|
|
self.object_sync,
|
|
self.connection_manager,
|
|
self.data_serializer,
|
|
self.clock_sync,
|
|
self.prediction_manager,
|
|
self.sync_config,
|
|
self.sync_editor,
|
|
self.event_handler,
|
|
self.network_utils,
|
|
self.encryption_manager
|
|
]
|
|
|
|
for module in modules:
|
|
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
|
|
|
|
# 更新各个模块
|
|
modules = [
|
|
self.sync_manager,
|
|
self.network_manager,
|
|
self.protocol_handler,
|
|
self.object_sync,
|
|
self.connection_manager,
|
|
self.data_serializer,
|
|
self.clock_sync,
|
|
self.prediction_manager,
|
|
self.sync_config,
|
|
self.sync_editor,
|
|
self.event_handler,
|
|
self.network_utils,
|
|
self.encryption_manager
|
|
]
|
|
|
|
for module in modules:
|
|
if module:
|
|
module.update(dt)
|
|
|
|
except Exception as e:
|
|
print(f"✗ 网络同步插件更新失败: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
def start_server(self, port: int = 7777) -> bool:
|
|
"""
|
|
启动服务器
|
|
|
|
Args:
|
|
port: 服务器端口
|
|
|
|
Returns:
|
|
是否启动成功
|
|
"""
|
|
try:
|
|
if not self.enabled:
|
|
print("✗ 插件未启用")
|
|
return False
|
|
|
|
if self.network_manager.start_server(port):
|
|
self.is_server = True
|
|
self.is_client = False
|
|
print(f"✓ 服务器已启动,端口: {port}")
|
|
return True
|
|
else:
|
|
print("✗ 服务器启动失败")
|
|
return False
|
|
|
|
except Exception as e:
|
|
print(f"✗ 服务器启动异常: {e}")
|
|
return False
|
|
|
|
def connect_to_server(self, host: str, port: int = 7777) -> bool:
|
|
"""
|
|
连接到服务器
|
|
|
|
Args:
|
|
host: 服务器地址
|
|
port: 服务器端口
|
|
|
|
Returns:
|
|
是否连接成功
|
|
"""
|
|
try:
|
|
if not self.enabled:
|
|
print("✗ 插件未启用")
|
|
return False
|
|
|
|
if self.connection_manager.connect_to_server(host, port):
|
|
self.is_client = True
|
|
self.is_server = False
|
|
print(f"✓ 已连接到服务器 {host}:{port}")
|
|
return True
|
|
else:
|
|
print("✗ 连接服务器失败")
|
|
return False
|
|
|
|
except Exception as e:
|
|
print(f"✗ 连接服务器异常: {e}")
|
|
return False
|
|
|
|
def disconnect(self):
|
|
"""断开连接"""
|
|
try:
|
|
if self.is_server:
|
|
self.network_manager.stop_server()
|
|
self.is_server = False
|
|
elif self.is_client:
|
|
self.connection_manager.disconnect()
|
|
self.is_client = False
|
|
|
|
print("✓ 已断开连接")
|
|
except Exception as e:
|
|
print(f"✗ 断开连接失败: {e}")
|
|
|
|
def sync_object(self, obj_id: str, obj_data: dict) -> bool:
|
|
"""
|
|
同步对象
|
|
|
|
Args:
|
|
obj_id: 对象ID
|
|
obj_data: 对象数据
|
|
|
|
Returns:
|
|
是否同步成功
|
|
"""
|
|
try:
|
|
if not self.enabled:
|
|
print("✗ 插件未启用")
|
|
return False
|
|
|
|
return self.object_sync.sync_object(obj_id, obj_data)
|
|
except Exception as e:
|
|
print(f"✗ 对象同步失败: {e}")
|
|
return False
|
|
|
|
def get_stats(self) -> dict:
|
|
"""
|
|
获取插件统计信息
|
|
|
|
Returns:
|
|
统计信息字典
|
|
"""
|
|
return self.stats.copy()
|
|
|
|
def reset_stats(self):
|
|
"""重置统计信息"""
|
|
self.stats = {
|
|
'bytes_sent': 0,
|
|
'bytes_received': 0,
|
|
'packets_sent': 0,
|
|
'packets_received': 0,
|
|
'sync_objects': 0,
|
|
'connections': 0,
|
|
'sync_errors': 0,
|
|
'latency': 0.0
|
|
}
|
|
print("✓ 网络同步统计信息已重置") |