- 将 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 迁移与旧代码地图
130 lines
6.1 KiB
C#
130 lines
6.1 KiB
C#
#nullable enable
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using Cysharp.Threading.Tasks;
|
|
|
|
namespace ShrinkEventBus
|
|
{
|
|
public static class EventBus
|
|
{
|
|
private static readonly IShrinkEventBus DefaultBus = CreateDefaultBus();
|
|
|
|
public static IShrinkEventBus Default => DefaultBus;
|
|
|
|
public static event Action<EventBase, Type> OnEventTriggered
|
|
{
|
|
add => DefaultBus.OnEventTriggered += value;
|
|
remove => DefaultBus.OnEventTriggered -= value;
|
|
}
|
|
|
|
#if UNITY_EDITOR
|
|
public static bool EnableDebugRecord
|
|
{
|
|
get => DefaultBus.EnableDebugRecord;
|
|
set => DefaultBus.EnableDebugRecord = value;
|
|
}
|
|
|
|
public static event Action<EventBase, string, string, EventHandlerInfo[]> OnEventTriggeredForEditor
|
|
{
|
|
add => DefaultBus.OnEventTriggeredForEditor += value;
|
|
remove => DefaultBus.OnEventTriggeredForEditor -= value;
|
|
}
|
|
#endif
|
|
|
|
public static ShrinkEventBusBuilder Builder() => new();
|
|
|
|
public static IShrinkEventBus CreateBus(Action<ShrinkEventBusBuilder>? configure = null)
|
|
{
|
|
var builder = new ShrinkEventBusBuilder();
|
|
configure?.Invoke(builder);
|
|
return builder.Build();
|
|
}
|
|
|
|
public static void Start() => DefaultBus.Start();
|
|
public static void AutoRegister(object target) => DefaultBus.AutoRegister(target);
|
|
public static void Register(object target) => DefaultBus.Register(target);
|
|
public static void Unregister(object target) => DefaultBus.Unregister(target);
|
|
|
|
public static void RegisterEvent<TEvent>(Func<TEvent, UniTask> handler, int priority)
|
|
where TEvent : EventBase => DefaultBus.RegisterEvent(handler, priority);
|
|
|
|
public static void RegisterEvent<TEvent>(Action<TEvent> handler,
|
|
EventPriority priority = EventPriority.NORMAL, bool receiveCanceled = false)
|
|
where TEvent : EventBase => DefaultBus.RegisterEvent(handler, priority, receiveCanceled);
|
|
|
|
public static void RegisterEvent<TEvent>(Action<TEvent> handler, int priority)
|
|
where TEvent : EventBase => DefaultBus.RegisterEvent(handler, priority);
|
|
|
|
public static void RegisterEvent<TEvent>(Func<TEvent, UniTask> handler,
|
|
EventPriority priority = EventPriority.NORMAL, bool receiveCanceled = false)
|
|
where TEvent : EventBase => DefaultBus.RegisterEvent(handler, priority, receiveCanceled);
|
|
|
|
public static IShrinkEventSubscription SubscribeEvent<TEvent>(Action<TEvent> handler,
|
|
EventPriority priority = EventPriority.NORMAL, bool receiveCanceled = false)
|
|
where TEvent : EventBase => DefaultBus.SubscribeEvent(handler, priority, receiveCanceled);
|
|
|
|
public static IShrinkEventSubscription SubscribeEvent<TEvent>(Action<TEvent> handler, int priority)
|
|
where TEvent : EventBase => DefaultBus.SubscribeEvent(handler, priority);
|
|
|
|
public static IShrinkEventSubscription SubscribeEvent<TEvent>(Func<TEvent, UniTask> handler,
|
|
EventPriority priority = EventPriority.NORMAL, bool receiveCanceled = false)
|
|
where TEvent : EventBase => DefaultBus.SubscribeEvent(handler, priority, receiveCanceled);
|
|
|
|
public static IShrinkEventSubscription SubscribeEvent<TEvent>(Func<TEvent, UniTask> handler, int priority)
|
|
where TEvent : EventBase => DefaultBus.SubscribeEvent(handler, priority);
|
|
|
|
public static void UnregisterEvent<TEvent>(Func<TEvent, UniTask> handler) where TEvent : EventBase =>
|
|
DefaultBus.UnregisterEvent(handler);
|
|
|
|
public static void UnregisterEvent<TEvent>(Action<TEvent> handler) where TEvent : EventBase =>
|
|
DefaultBus.UnregisterEvent(handler);
|
|
|
|
public static void ClearAllSubscribersForEvent<TEvent>() where TEvent : EventBase =>
|
|
DefaultBus.ClearAllSubscribersForEvent<TEvent>();
|
|
|
|
public static void UnregisterAllEventsForObject(object targetObject) =>
|
|
DefaultBus.UnregisterAllEventsForObject(targetObject);
|
|
|
|
public static void UnregisterInstance(object targetObject) => DefaultBus.Unregister(targetObject);
|
|
public static void UnregisterAllEvents() => DefaultBus.UnregisterAllEvents();
|
|
|
|
public static UniTask<bool> TriggerEventAsync<TEvent>(TEvent eventArgs) where TEvent : EventBase =>
|
|
DefaultBus.TriggerEventAsync(eventArgs);
|
|
|
|
public static UniTask<bool> TriggerEventAsync<TEvent>(EventPriority phase, TEvent eventArgs)
|
|
where TEvent : EventBase => DefaultBus.TriggerEventAsync(phase, eventArgs);
|
|
|
|
public static bool TriggerEvent<TEvent>(TEvent eventArgs) where TEvent : EventBase =>
|
|
DefaultBus.TriggerEvent(eventArgs);
|
|
|
|
public static bool TriggerEvent<TEvent>(EventPriority phase, TEvent eventArgs) where TEvent : EventBase =>
|
|
DefaultBus.TriggerEvent(phase, eventArgs);
|
|
|
|
public static EventHandlerInfo[] GetEventSubscribers<TEvent>() where TEvent : EventBase =>
|
|
DefaultBus.GetEventSubscribers<TEvent>();
|
|
|
|
public static ListenerList GetListenerList<TEvent>() where TEvent : EventBase =>
|
|
DefaultBus.GetListenerList<TEvent>();
|
|
|
|
public static IReadOnlyDictionary<Type, EventHandlerInfo[]> GetAllSubscribersSnapshot() =>
|
|
DefaultBus.GetAllSubscribersSnapshot();
|
|
|
|
public static IReadOnlyList<ShrinkEventSubscriptionSnapshot> GetActiveSubscriptionsSnapshot() =>
|
|
DefaultBus.GetActiveSubscriptionsSnapshot();
|
|
|
|
public static bool IsInstanceRegistered(object target) => DefaultBus.IsInstanceRegistered(target);
|
|
public static int GetRegisteredInstanceCount() => DefaultBus.GetRegisteredInstanceCount();
|
|
public static int GetRegisteredEventTypeCount() => DefaultBus.GetRegisteredEventTypeCount();
|
|
|
|
private static IShrinkEventBus CreateDefaultBus()
|
|
{
|
|
var bus = (ShrinkEventBusInstance)new ShrinkEventBusBuilder()
|
|
.SetExceptionHandlingMode(ShrinkEventExceptionHandlingMode.LogAndContinue)
|
|
.AllowPerPhaseDispatch()
|
|
.Build();
|
|
EventBusRegHelper.RegStaticEventHandler(bus);
|
|
return bus;
|
|
}
|
|
}
|
|
}
|