public void Start(CancellationToken cancellationToken = default)
 {
     _ipcClient.Received <RandomNextRequest>()
     .Subscribe(async req =>
     {
         var value    = _random.Next();
         var response = new RandomNextResponse(req.Id, value);
         await _ipcClient.SendAsync(response, cancellationToken).ConfigureAwait(false);
     }, cancellationToken);
 }
Beispiel #2
0
        private static async Task NamedPipesClientDemo()
        {
            var peerA = new NamedPipesClient();
            var peerB = new NamedPipesClient(peerA.PeerId, peerA.OwnId);

            peerB.Received <DateTime>()
            .Subscribe(date => Console.WriteLine($"Peer B received: {date}."));

            while (true)
            {
                var now = DateTime.Now;
                Console.WriteLine($"Peer A is sending: {now}");

                await peerA.SendAsync(now).ConfigureAwait(false);

                Console.ReadLine();
            }
        }
Beispiel #3
0
        public async Task <int> NextAsync(CancellationToken cancellationToken = default)
        {
            var request = new RandomNextRequest()
            {
                Id = Guid.NewGuid()
            };

            var responseTask = _ipcClient.Received <RandomNextResponse>()
                               .Where(resp => resp.RequestId == request.Id)
                               .Timeout(TimeSpan.FromSeconds(5))
                               .FirstOrDefaultAsync()
                               .ToTask(cancellationToken);

            await _ipcClient.SendAsync(request, cancellationToken).ConfigureAwait(false);

            var response = await responseTask.ConfigureAwait(false);

            return(response.Value);
        }
        public async Task <TResponse> ExecuteAsync <TResponse>(IRequest request, TimeSpan?timeout = null, CancellationToken cancellationToken = default)
            where TResponse : IResponse
        {
            var responseTask = _ipcClient.Received <TResponse>()
                               .Where(resp => resp.RequestId == request.Id)
                               .Timeout(timeout ?? _defaultTimeout)
                               .FirstOrDefaultAsync()
                               .ToTask(cancellationToken);

            await _ipcClient.SendAsync(request, cancellationToken).ConfigureAwait(false);

            var response = await responseTask.ConfigureAwait(false);

            if (response == null)
            {
                throw new DataException("Server didn't yield any result.");
            }

            return(response);
        }