#nullable enable using Cysharp.Threading.Tasks; namespace ShrinkNetwork { public sealed class ShrinkNetworkContext { public ShrinkNetworkService Service { get; } public ShrinkNetworkSession Session { get; } public ShrinkNetworkPacket Packet { get; } public ShrinkNetworkContext(ShrinkNetworkService service, ShrinkNetworkSession session, ShrinkNetworkPacket packet) { Service = service; Session = session; Packet = packet; } public bool IsRequest => Packet.Kind == ShrinkNetworkPacketKind.Request; public bool IsResponse => Packet.Kind == ShrinkNetworkPacketKind.Response; public ShrinkRequestToken RequestToken => Packet.RequestToken; public string? Route => Packet.Route; public UniTask ReplyAsync(TResponse response) where TResponse : class, IShrinkNetworkResponse { return Service.SendResponseAsync(Session, response, Packet.RequestToken, Packet.Route); } } }