- 将 ShrinkEventBus、ShrinkDataSaver 及其 EventBus 集成从 gitlink 转为仓库直接维护的完整 UPM 包,补齐运行时、编辑器工具、测试与文档 - 新增 Command 和 Network 的 App 集成组件,支持 ContextLoader 服务发布、可逆注销及 Network Loopback 生命周期管理 - 更新 Starter 与演示组合逻辑,缺失模块时可注册、已有兼容安装器时可覆盖,并补充宿主启动断言 - 升级内部包依赖与 Shared CodeGen 包定义,放宽 Integration.App 包的 Git 忽略规则 - 将独立服务器生成器改为基于已编译程序集的语义扫描,支持 partial、复杂泛型、命名冲突检测及模板 SHA-256 覆写保护 - 新增 Network 语义扫描、模板保护和 App 组件生命周期测试 - 新增真实 UPM 消费工程验证脚本,校验内部版本一致性、程序集加载及 EditMode 测试 - 重构当前架构文档并归档已完成的 Cordis 迁移与旧代码地图
108 lines
4.1 KiB
C#
108 lines
4.1 KiB
C#
#nullable enable
|
|
|
|
using ShrinkEventBus;
|
|
using UnityEngine;
|
|
|
|
namespace ShrinkDataSaver.Integration
|
|
{
|
|
/// <summary>
|
|
/// DataSaver 原生事件到 EventBus 的显式桥接器。
|
|
/// 生命周期由 ShrinkDataSaverEventBusComponent 管理,不再因程序集存在而全局自动接入。
|
|
/// </summary>
|
|
public static class DataSaverEventBusBridge
|
|
{
|
|
private static bool _registered;
|
|
|
|
public static bool IsRegistered => _registered;
|
|
|
|
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
|
|
private static void ResetStaticState()
|
|
{
|
|
Unregister();
|
|
_registered = false;
|
|
}
|
|
|
|
public static void Register()
|
|
{
|
|
if (_registered)
|
|
return;
|
|
|
|
ShrinkSettings.OnChanged += HandleSettingsChanged;
|
|
ShrinkSave.OnSaveStarted += HandleSaveStarted;
|
|
ShrinkSave.OnSaveCompleted += HandleSaveCompleted;
|
|
ShrinkSave.OnSaveFailed += HandleSaveFailed;
|
|
ShrinkSave.OnLoadStarted += HandleLoadStarted;
|
|
ShrinkSave.OnLoadCompleted += HandleLoadCompleted;
|
|
ShrinkSave.OnLoadFailed += HandleLoadFailed;
|
|
ShrinkSave.OnMigrationCompleted += HandleMigrationCompleted;
|
|
ShrinkSave.OnDeleteCompleted += HandleSlotDeleted;
|
|
_registered = true;
|
|
}
|
|
|
|
public static void Unregister()
|
|
{
|
|
ShrinkSettings.OnChanged -= HandleSettingsChanged;
|
|
ShrinkSave.OnSaveStarted -= HandleSaveStarted;
|
|
ShrinkSave.OnSaveCompleted -= HandleSaveCompleted;
|
|
ShrinkSave.OnSaveFailed -= HandleSaveFailed;
|
|
ShrinkSave.OnLoadStarted -= HandleLoadStarted;
|
|
ShrinkSave.OnLoadCompleted -= HandleLoadCompleted;
|
|
ShrinkSave.OnLoadFailed -= HandleLoadFailed;
|
|
ShrinkSave.OnMigrationCompleted -= HandleMigrationCompleted;
|
|
ShrinkSave.OnDeleteCompleted -= HandleSlotDeleted;
|
|
_registered = false;
|
|
}
|
|
|
|
private static void HandleSettingsChanged(string key, object value) =>
|
|
EventBus.TriggerEvent(new SettingsChangedEvent { Key = key, Value = value });
|
|
|
|
private static void HandleSaveStarted(SaveStartedEventArgs args) =>
|
|
EventBus.TriggerEvent(new SaveStartedEvent { SlotIndex = args.SlotIndex, Timestamp = args.Timestamp });
|
|
|
|
private static void HandleSaveCompleted(SaveCompletedEventArgs args) =>
|
|
EventBus.TriggerEvent(new SaveCompletedEvent
|
|
{
|
|
SlotIndex = args.SlotIndex,
|
|
ModuleNames = args.ModuleNames,
|
|
Timestamp = args.Timestamp
|
|
});
|
|
|
|
private static void HandleSaveFailed(SaveFailedEventArgs args) =>
|
|
EventBus.TriggerEvent(new SaveFailedEvent
|
|
{
|
|
SlotIndex = args.SlotIndex,
|
|
ErrorMessage = args.ErrorMessage
|
|
});
|
|
|
|
private static void HandleLoadStarted(LoadStartedEventArgs args) =>
|
|
EventBus.TriggerEvent(new LoadStartedEvent { SlotIndex = args.SlotIndex, Timestamp = args.Timestamp });
|
|
|
|
private static void HandleLoadCompleted(LoadCompletedEventArgs args) =>
|
|
EventBus.TriggerEvent(new LoadCompletedEvent
|
|
{
|
|
SlotIndex = args.SlotIndex,
|
|
ModuleNames = args.ModuleNames,
|
|
Version = args.Version,
|
|
Timestamp = args.Timestamp
|
|
});
|
|
|
|
private static void HandleLoadFailed(LoadFailedEventArgs args) =>
|
|
EventBus.TriggerEvent(new LoadFailedEvent
|
|
{
|
|
SlotIndex = args.SlotIndex,
|
|
ErrorMessage = args.ErrorMessage
|
|
});
|
|
|
|
private static void HandleMigrationCompleted(MigrationCompletedEventArgs args) =>
|
|
EventBus.TriggerEvent(new MigrationCompletedEvent
|
|
{
|
|
SlotIndex = args.SlotIndex,
|
|
FromVersion = args.FromVersion,
|
|
ToVersion = args.ToVersion
|
|
});
|
|
|
|
private static void HandleSlotDeleted(SlotDeletedEventArgs args) =>
|
|
EventBus.TriggerEvent(new SlotDeletedEvent { SlotIndex = args.SlotIndex });
|
|
}
|
|
}
|