mirror of
https://github.com/chylex/Minecraft-Phantom-Panel.git
synced 2025-09-30 23:02:48 +02:00
31 lines
940 B
C#
31 lines
940 B
C#
using Phantom.Utils.Actor;
|
|
|
|
namespace Phantom.Utils.Rpc.Message;
|
|
|
|
public interface IMessageReceiver<TMessageBase> {
|
|
void OnSessionRestarted();
|
|
Task OnSessionTerminated();
|
|
|
|
void OnPing();
|
|
void OnMessage(TMessageBase message);
|
|
Task<TReply> OnMessage<TMessage, TReply>(TMessage message, CancellationToken cancellationToken = default) where TMessage : TMessageBase, ICanReply<TReply>;
|
|
|
|
class Actor(ActorRef<TMessageBase> actor) : IMessageReceiver<TMessageBase> {
|
|
public virtual void OnSessionRestarted() {}
|
|
|
|
public virtual Task OnSessionTerminated() {
|
|
return actor.Stop();
|
|
}
|
|
|
|
public virtual void OnPing() {}
|
|
|
|
public void OnMessage(TMessageBase message) {
|
|
actor.Tell(message);
|
|
}
|
|
|
|
public Task<TReply> OnMessage<TMessage, TReply>(TMessage message, CancellationToken cancellationToken = default) where TMessage : TMessageBase, ICanReply<TReply> {
|
|
return actor.Request(message, cancellationToken);
|
|
}
|
|
}
|
|
}
|