private async Task <IRpcServerChannel> CreateServer <T>(T instance, ChannelType channelType, IRpcSerializer serializer = null, TokenImpersonationLevel tokenImpersonationLevel = TokenImpersonationLevel.None, IRpcObjectRepository localRepository = null) where T : class { if (serializer == null) { serializer = new BinaryRpcSerializer(); } switch (channelType) { case ChannelType.Tcp: { var server = new TcpRpcServerChannel( serializer, new RpcMessageFactory(), IPAddress.Loopback, 11234, localRepository); if (instance != null) { server.ObjectRepository.RegisterSingleton(instance); } await server.ListenAsync(); return(server); } case ChannelType.NamedPipe: { _pipeName = Guid.NewGuid().ToString(); var server = new NamedPipeRpcServerChannel( serializer, new RpcMessageFactory(), _pipeName, localRepository: localRepository); if (instance != null) { server.ObjectRepository.RegisterSingleton(instance); } await server.ListenAsync(); return(server); } default: throw new NotSupportedException(); } }
private async Task <IRpcClientChannel> CreateClient(ChannelType channelType, IRpcSerializer serializer = null, TokenImpersonationLevel tokenImpersonationLevel = TokenImpersonationLevel.None, IRpcObjectRepository localRepository = null, Func <IRpcObjectRepository> remoteRepository = null) { if (serializer == null) { serializer = new BinaryRpcSerializer(); } switch (channelType) { case ChannelType.Tcp: { var client = new TcpRpcClientChannel( serializer, new RpcMessageFactory(), IPAddress.Loopback, 11234, localRepository, remoteRepository); await client.ConnectAsync(); return(client); } case ChannelType.NamedPipe: { var client = new NamedPipeRpcClientChannel( serializer, new RpcMessageFactory(), _pipeName, tokenImpersonationLevel, localRepository, remoteRepository); await client.ConnectAsync(); return(client); } default: throw new NotSupportedException(); } }