/// <summary> /// Converts an <see cref="Activity"/> into a <see cref="StreamingRequest"/> and sends it to the /// channel this StreamingRequestHandler is connected to. /// </summary> /// <param name="activity">The activity to send.</param> /// <param name="cancellationToken">A cancellation token.</param> /// <returns>A task that resolves to a <see cref="ResourceResponse"/>.</returns> public async Task <ResourceResponse> SendActivityAsync(Activity activity, CancellationToken cancellationToken = default) { string requestPath; if (!string.IsNullOrWhiteSpace(activity.ReplyToId) && activity.ReplyToId.Length >= 1) { requestPath = $"/v3/conversations/{activity.Conversation?.Id}/activities/{activity.ReplyToId}"; } else { requestPath = $"/v3/conversations/{activity.Conversation?.Id}/activities"; } var streamAttachments = UpdateAttachmentStreams(activity); var request = StreamingRequest.CreatePost(requestPath); request.SetBody(activity); if (streamAttachments != null) { foreach (var attachment in streamAttachments) { request.AddStream(attachment); } } try { if (!_serverIsConnected) { throw new Exception("Error while attempting to send: Streaming transport is disconnected."); } var serverResponse = await _server.SendAsync(request, cancellationToken).ConfigureAwait(false); if (serverResponse.StatusCode == (int)HttpStatusCode.OK) { return(serverResponse.ReadBodyAsJson <ResourceResponse>()); } } #pragma warning disable CA1031 // Do not catch general exception types (this should probably be addressed later, but for now we just log the error and continue the execution) catch (Exception ex) #pragma warning restore CA1031 // Do not catch general exception types { _logger.LogError(ex.Message); } return(null); }
/// <inheritdoc /> public override async Task <ReceiveResponse> SendStreamingRequestAsync(StreamingRequest request, CancellationToken cancellationToken = default) { if (!_serverIsConnected) { throw new InvalidOperationException("Error while attempting to send: Streaming transport is disconnected."); } return(await _server.SendAsync(request, cancellationToken).ConfigureAwait(false)); }
private async Task <T> SendRequestAsync <T>(StreamingRequest request, CancellationToken cancellation = default(CancellationToken)) { try { var serverResponse = await _server.SendAsync(request, cancellation).ConfigureAwait(false); if (serverResponse.StatusCode == (int)HttpStatusCode.OK) { return(serverResponse.ReadBodyAsJson <T>()); } } catch (Exception ex) { _logger.LogError(ex.Message); } return(default(T)); }