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()); }
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); }
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); }
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); } }
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()); } }
public Task SendAsync(object requestBody, MessageSendingFlags flags, CancellationToken cancellationToken) { return(SendAsync(requestBody, flags, DefaultRpcTimeout, cancellationToken)); }
public Task SendAsync(object requestBody, MessageSendingFlags flags, TimeSpan timeout) { return(SendAsync(requestBody, flags, timeout, CancellationToken.None)); }
public Task <TResponse> RequestAsync <TResponse>(object requestBody, MessageSendingFlags flags, CancellationToken cancellationToken) { return(RequestAsync <TResponse>(requestBody, flags, DefaultRpcTimeout, cancellationToken)); }
public Task <TResponse> RequestAsync <TResponse>(object requestBody, MessageSendingFlags flags, TimeSpan timeout) { return(RequestAsync <TResponse>(requestBody, flags, timeout, CancellationToken.None)); }