private static void ConfigHost(ServerHostBuilder builder, RpcMode mode, bool isLibuv) { void action(IServiceProvider i, IChannelPipeline j, bool hasLengthField) { var config = i.GetRequiredService <IConfigurationRoot>(); var codec = i.GetRequiredService <TarsCodecAttribute>(); var handler = i.GetRequiredService <ServerHandler>(); if (hasLengthField) { var packetMaxSize = config.GetValue(ServerHostOptions.PacketMaxSize, 100 * 1024 * 1024); var lengthFieldLength = config.GetValue(ServerHostOptions.LengthFieldLength, 4); j.AddLengthFieldHanlder(packetMaxSize, lengthFieldLength); } j.AddLast(new TarsRequestDecoder(codec), new TarsResponseEncoder(codec), handler); } switch (mode) { case RpcMode.Udp: builder.UseUdp((x, y) => action(x, y, false)); break; case RpcMode.Tcp when isLibuv: builder.UseLibuvTcp((x, y) => action(x, y, true)); break; default: builder.UseTcp((x, y) => action(x, y, true)); break; } }
public static ServerHostBuilder UseRpc(this ServerHostBuilder builder, RpcMode mode = RpcMode.Tcp, bool isLibuv = true, ServerConfig config = null, params Assembly[] assemblies) { var ms = new ServerRpcMetadata(assemblies); UseTarsCodec(builder); builder.ConfigureServices(i => { var services = i.AddSingleton <ServerHandler, ServerHandler>(); foreach (var item in ms.metadatas) { services.AddSingleton(item.Value.InterfaceType, item.Value.ServantType); } services.AddSingleton(j => { foreach (var item in ms.metadatas) { var configMetadata = config?.ServantAdapterConfMap.Values.FirstOrDefault(x => x.ClassType == item.Value.ServantType); if (configMetadata != null) { item.Value.Servant = configMetadata.Servant; } item.Value.ServantInstance = j.GetRequiredService(item.Value.InterfaceType); item.Value.Codec = j.GetRequiredService(item.Value.CodecType) as CodecAttribute; } return(ms.ChangeRpcMetadataKeyForConfig()); }); }); ConfigHost(builder, mode, isLibuv); return(builder); }
public static void Main(string[] args) { var host = new ServerHostBuilder<TcpContext>() .UseSetting("server.address", "tcp://127.0.0.1:1335") .UseServer<TcpServerFactory>() .UseStartup<EchoServer>() .Build(); host.Run(); }
public static void Main() { var host = new ServerHostBuilder <TcpContext>() .UseSetting("server.address", "tcp://127.0.0.1:1335") .UseServer <TcpServerFactory>() .UseStartup <TcpStartup>() .Build(); host.Run(); }
public static ServerHostBuilder UseRpc(this ServerHostBuilder builder, ServerConfig config) { var kv = new Dictionary <string, string>() { { ServerHostOptions.Port, config.Local.Port.ToString() } }; var assemblies = config.ServantAdapterConfMap.Values .Where(i => i.ClassType != null) .Select(i => i.ClassType.Assembly) .Union(new Assembly[] { config.ClientConfig.InterfaceType.Assembly }).ToArray(); return(builder.ConfigureAppConfiguration(i => i.AddInMemoryCollection(kv)) .ConfigureServices(i => i.UseSimpleRpcClient(assemblies) .AddTarsCodec()) .UseRpc(config.Local.Type == "tcp" ? RpcMode.Tcp : RpcMode.Udp, true, config, assemblies)); }
private static void UseTarsCodec(ServerHostBuilder builder) { builder.ConfigureServices(i => { i.AddSingleton <IDictionary <string, CodecAttribute> >(j => { var dict = new Dictionary <string, CodecAttribute>(StringComparer.OrdinalIgnoreCase); var tars = j.GetRequiredService <TarsCodecAttribute>(); dict.Add(tars.Key, tars); foreach (var item in j.GetServices <CodecAttribute>()) { dict.Add(item.Key, item); } return(dict); }); }); }