public static ServerFramingBuilder UseMessageEncoderWith <T>(this ServerFramingBuilder builder) where T : MessageAsFrameWriter { builder.MessageWriter = builder.ApplicationServices.GetRequiredService <T>(); builder.EncoderFactory = new MessageEncoderFactory(builder.Parser, builder.MessageWriter); return(builder); }
public static ServerFramingBuilder UseDecoderPooling(this ServerFramingBuilder builder) { var poolProvider = builder.ApplicationServices.GetRequiredService <ObjectPoolProvider>(); var pool = poolProvider.Create(new PooledFrameDecoderPolicy(builder.Parser)); builder.DecoderFactory = new PooledFrameDecoderFactory(pool); return(builder); }
public static ServerFramingBuilder UseMessageEncoderPoolingWith <T>(this ServerFramingBuilder builder) where T : MessageAsFrameWriter { var poolProvider = builder.ApplicationServices.GetRequiredService <ObjectPoolProvider>(); builder.MessageWriter = builder.ApplicationServices.GetRequiredService <T>(); var pool = poolProvider.Create(new PooledMessageEncoderPolicy(builder.Parser, builder.MessageWriter)); builder.EncoderFactory = new PooledMessageEncoderFactory(pool); return(builder); }
public static async Task Main(string[] args) { // Manual wire up of the server var services = new ServiceCollection(); services.AddLogging(builder => { builder.SetMinimumLevel(LogLevel.Debug); builder.AddConsole(); }); services.AddScoped <MessageHandler <HelloServerMessage>, HelloServerMessageHandler>(); services.Add <MessageMetadataParser, MessageMetadata>(); services.AddSingleton(sp => { var builder = new ServerFramingBuilder(sp); builder.Mappings.Add((HelloServerMessage.Id, typeof(HelloServerMessage))); builder.MessageWriter = new MessageWriter(builder.Parser); builder.MessageReader = new MessageReader(); builder.UseMessageEncoder(); return(builder.Build()); }); var serviceProvider = services.BuildServiceProvider(); var server = new ServerBuilder(serviceProvider) .UseSockets(sockets => sockets.Listen(IPAddress.Loopback, 5000, builder => builder.UseConnectionHandler <ServerConnectionHandler>())) .Build(); var logger = serviceProvider.GetRequiredService <ILoggerFactory>().CreateLogger <Program>(); await server.StartAsync(); foreach (var ep in server.EndPoints) { logger.LogInformation("Listening on {EndPoint}", ep); } var tcs = new TaskCompletionSource <object>(); Console.CancelKeyPress += (sender, e) => tcs.TrySetResult(null); await tcs.Task; await server.StopAsync(); }
static async Task Main(string[] args) { // Manual wire up of the client var services = new ServiceCollection().AddLogging(builder => { builder.SetMinimumLevel(LogLevel.Debug); builder.AddConsole(); }); services.AddScoped <MessageHandler <HandshakeMessage>, HandshakeMessageHandler>(); services.Add <MessageMetadataParser, MessageMetadata>(); services.AddSingleton <ClientConnectionHandler>(); services.AddSingleton(sp => { var builder = new ServerFramingBuilder(sp); builder.Mappings.Add((HandshakeMessage.Id, typeof(HandshakeMessage))); builder.MessageWriter = new MessageWriter(builder.Parser); builder.MessageReader = new MessageReader(); builder.UseMessageEncoder(); return(builder.Build()); }); var serviceProvider = services.BuildServiceProvider(); var connectionHandler = serviceProvider .GetRequiredService <ClientConnectionHandler>(); var clientFactory = new SocketConnectionFactory(); Console.WriteLine("Press any key to start connection."); Console.ReadKey(); await using var connection = await clientFactory.ConnectAsync( new IPEndPoint (IPAddress.Loopback, 5000)); await connectionHandler.OnConnectedAsync(connection).ConfigureAwait(false); }
public static ServerFramingBuilder UseMessageEncoder(this ServerFramingBuilder builder) { builder.EncoderFactory = new MessageEncoderFactory(builder.Parser, builder.MessageWriter); return(builder); }