Example #1
0
 public Request(IMessage message, MessageSendingFlags flags, Func <IRequest, CancellationToken, Task> sendAsync, CancellationToken cancellationToken)
 {
     _sendAsync         = sendAsync;
     _cancellationToken = cancellationToken;
     Message            = message;
     Flags = flags;
     cancellationToken.Register(() => _taskCompletionSource.TrySetCanceled());
 }
Example #2
0
        private Request <TResponse> CreateRequest <TResponse>(object body, MessageSendingFlags flags, CancellationToken cancellationToken)
        {
            var request = new Request <TResponse>(
                CreateMessage(body, flags.HasFlag(MessageSendingFlags.ContentRelated)),
                flags,
                SendRequestAsync,
                cancellationToken);

            _requestsManager.Add(request);
            return(request);
        }
Example #3
0
        private MessageSendingFlags GetMessageSendingFlags(
            object requestBody,
            MessageSendingFlags defaultSendingFlags = MessageSendingFlags.EncryptedAndContentRelatedRPC)
        {
            MessageSendingFlags flags;
            Type requestBodyType = requestBody.GetType();

            if (!_messageSendingFlags.TryGetValue(requestBodyType, out flags))
            {
                flags = defaultSendingFlags;
            }
            return(flags);
        }
Example #4
0
        public async Task SendAsync(object requestBody, MessageSendingFlags flags, TimeSpan timeout, CancellationToken cancellationToken)
        {
            byte[] messageBytes = EncodeMessage(CreateMessage(requestBody, flags.HasFlag(MessageSendingFlags.ContentRelated)), flags.HasFlag(MessageSendingFlags.Encrypted));

            var timeoutCancellationTokenSource = new CancellationTokenSource(timeout);

            using (
                CancellationTokenSource cts = CancellationTokenSource.CreateLinkedTokenSource(
                    timeoutCancellationTokenSource.Token,
                    cancellationToken,
                    _connectionCancellationToken))
            {
                await SendAsync(messageBytes, cts.Token);
            }
        }
Example #5
0
        public async Task <TResponse> RequestAsync <TResponse>(object requestBody, MessageSendingFlags flags, TimeSpan timeout, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDiconnected();

            var timeoutCancellationTokenSource = new CancellationTokenSource(timeout);

            using (
                CancellationTokenSource cts = CancellationTokenSource.CreateLinkedTokenSource(
                    timeoutCancellationTokenSource.Token,
                    cancellationToken,
                    _connectionCancellationToken))
            {
                Request <TResponse> request = CreateRequest <TResponse>(requestBody, flags, cts.Token);
                Console.WriteLine("Sending request ({0}) '{1}'.", flags, requestBody);
                await request.SendAsync();

                return(await request.GetResponseAsync());
            }
        }
Example #6
0
 public Task SendAsync(object requestBody, MessageSendingFlags flags, CancellationToken cancellationToken)
 {
     return(SendAsync(requestBody, flags, DefaultRpcTimeout, cancellationToken));
 }
Example #7
0
 public Task SendAsync(object requestBody, MessageSendingFlags flags, TimeSpan timeout)
 {
     return(SendAsync(requestBody, flags, timeout, CancellationToken.None));
 }
Example #8
0
 public Task <TResponse> RequestAsync <TResponse>(object requestBody, MessageSendingFlags flags, CancellationToken cancellationToken)
 {
     return(RequestAsync <TResponse>(requestBody, flags, DefaultRpcTimeout, cancellationToken));
 }
Example #9
0
 public Task <TResponse> RequestAsync <TResponse>(object requestBody, MessageSendingFlags flags, TimeSpan timeout)
 {
     return(RequestAsync <TResponse>(requestBody, flags, timeout, CancellationToken.None));
 }