Example #1
0
        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();
            }
        }
Example #2
0
        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();
            }
        }