mirror of
https://github.com/chylex/Minecraft-Phantom-Panel.git
synced 2025-09-05 22:53:11 +02:00
31 lines
992 B
C#
31 lines
992 B
C#
using System.Threading.Channels;
|
|
using Phantom.Utils.Logging;
|
|
using Serilog;
|
|
|
|
namespace Phantom.Utils.Rpc.New;
|
|
|
|
public class RpcClientConnection<TClientToServerMessage>(string loggerName, CancellationToken shutdownCancellationToken) : IAsyncDisposable {
|
|
private readonly ILogger logger = PhantomLogger.Create<RpcClientConnection<TClientToServerMessage>>(loggerName);
|
|
|
|
private readonly Channel<TClientToServerMessage> sendQueue = Channel.CreateBounded<TClientToServerMessage>(new BoundedChannelOptions(500) {
|
|
AllowSynchronousContinuations = false,
|
|
FullMode = BoundedChannelFullMode.Wait,
|
|
SingleReader = true,
|
|
SingleWriter = false,
|
|
});
|
|
|
|
public async Task WaitFor() {
|
|
|
|
}
|
|
|
|
public async Task Send(TClientToServerMessage message, CancellationToken cancellationToken) {
|
|
if (!sendQueue.Writer.TryWrite(message)) {
|
|
await sendQueue.Writer.WriteAsync(message, cancellationToken);
|
|
}
|
|
}
|
|
|
|
public async ValueTask DisposeAsync() {
|
|
// TODO release managed resources here
|
|
}
|
|
}
|