forked from zxl/LaboratoryProtection
75 lines
2.3 KiB
C#
75 lines
2.3 KiB
C#
|
using Cysharp.Threading.Tasks;
|
|||
|
|
|||
|
using PMaker.Messaging;
|
|||
|
|
|||
|
using System.Threading;
|
|||
|
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
public class MessageBridge<TRoute, TMessage>
|
|||
|
{
|
|||
|
public struct Message
|
|||
|
{
|
|||
|
public Message(TRoute route, DomainStructEvents<TRoute, TMessage>.MessageDelegate handle)
|
|||
|
{
|
|||
|
this._route = route;
|
|||
|
this._handle = handle;
|
|||
|
}
|
|||
|
private TRoute _route;
|
|||
|
private DomainStructEvents<TRoute, TMessage>.MessageDelegate _handle;
|
|||
|
|
|||
|
public async void AddTo(CancellationToken token)
|
|||
|
{
|
|||
|
await token.WaitUntilCanceled();
|
|||
|
DomainStructEvents<TRoute, TMessage>.Unsubscribe(_route, _handle);
|
|||
|
}
|
|||
|
|
|||
|
public async void AddTo(Component component)
|
|||
|
{
|
|||
|
var token = component.GetCancellationTokenOnDestroy();
|
|||
|
await token.WaitUntilCanceled();
|
|||
|
DomainStructEvents<TRoute, TMessage>.Unsubscribe(_route, _handle);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static Message Subscribe(TRoute route, DomainStructEvents<TRoute, TMessage>.MessageDelegate handle, CancellationToken token = default)
|
|||
|
{
|
|||
|
DomainStructEvents<TRoute, TMessage>.Subscribe(route, handle);
|
|||
|
return new Message(route, handle);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public class ClssOnlyMessageBridge<TRoute, TMessage> where TMessage : class where TRoute : class
|
|||
|
{
|
|||
|
public struct ClessOnlyMessage
|
|||
|
{
|
|||
|
public ClessOnlyMessage(TRoute route, DomainEvents<TRoute, TMessage>.MessageDelegate handle)
|
|||
|
{
|
|||
|
this._route = route;
|
|||
|
this._handle = handle;
|
|||
|
}
|
|||
|
private TRoute _route;
|
|||
|
private DomainEvents<TRoute, TMessage>.MessageDelegate _handle;
|
|||
|
|
|||
|
public async void AddTo(CancellationToken token)
|
|||
|
{
|
|||
|
await token.WaitUntilCanceled();
|
|||
|
DomainEvents<TRoute, TMessage>.Unsubscribe(_route, _handle);
|
|||
|
}
|
|||
|
|
|||
|
public async void AddTo(Component component)
|
|||
|
{
|
|||
|
var token = component.GetCancellationTokenOnDestroy();
|
|||
|
await token.WaitUntilCanceled();
|
|||
|
DomainEvents<TRoute, TMessage>.Unsubscribe(_route, _handle);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static ClessOnlyMessage Subscribe(TRoute route, DomainEvents<TRoute, TMessage>.MessageDelegate handle, CancellationToken token = default)
|
|||
|
{
|
|||
|
DomainEvents<TRoute, TMessage>.Subscribe(route, handle);
|
|||
|
return new ClessOnlyMessage(route, handle);
|
|||
|
}
|
|||
|
|
|||
|
}
|