public void Request_Create_Get_Success()
        {
            var r = StreamingRequest.CreateGet();

            Assert.AreEqual(StreamingRequest.GET, r.Verb);
            Assert.IsNull(r.Path);
            Assert.IsNull(r.Streams);
        }
        /// <summary>
        /// Lists the members of the current conversation.
        /// Throws <see cref="ArgumentNullException"/> if conversationId is null, empty, or whitespace.
        /// </summary>
        /// <param name="conversationId">The id of the conversation to fetch the members of.</param>
        /// <param name="pageSize">Optional number of members to include per result page.</param>
        /// <param name="cancellationToken">Optional cancellation token.</param>
        /// <returns>List of Members of the current conversation.</returns>
        public async Task <PagedMembersResult> GetConversationPagedMembersAsync(string conversationId, int?pageSize = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (string.IsNullOrWhiteSpace(conversationId))
            {
                throw new ArgumentNullException(nameof(conversationId));
            }

            var route   = $"{StreamingChannelPrefix}{conversationId}/pagedmembers";
            var request = StreamingRequest.CreateGet(route);

            return(await SendRequestAsync <PagedMembersResult>(request, cancellationToken).ConfigureAwait(false));
        }
        public async Task RequestDisassembler_SendsAsFixedLength()
        {
            var sender    = new PayloadSender();
            var transport = new MockTransportSender();

            sender.Connect(transport);

            var disassembler = new RequestDisassembler(sender, Guid.NewGuid(), StreamingRequest.CreateGet("/a/b/c"));

            await disassembler.DisassembleAsync();

            Assert.AreEqual(2, transport.Buffers.Count);
        }
        /// <summary>
        /// Lists the members of the specified activity.
        /// Throws <see cref="ArgumentNullException"/> if conversationId or activityId is null, empty, or whitespace.
        /// </summary>
        /// <param name="conversationId">The id of the conversation the activity is a part of.</param>
        /// <param name="activityId">The id of the activity to fetch the members of.</param>
        /// <param name="cancellationToken">Optional cancellation token.</param>
        /// <returns>List of Members of the given activity.</returns>
        public async Task <IList <ChannelAccount> > GetActivityMembersAsync(string conversationId, string activityId, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (string.IsNullOrWhiteSpace(conversationId))
            {
                throw new ArgumentNullException(nameof(conversationId));
            }

            if (string.IsNullOrWhiteSpace(activityId))
            {
                throw new ArgumentNullException(nameof(activityId));
            }

            var route   = $"{StreamingChannelPrefix}{conversationId}/activities/{activityId}/members";
            var request = StreamingRequest.CreateGet(route);

            return(await SendRequestAsync <IList <ChannelAccount> >(request, cancellationToken).ConfigureAwait(false));
        }
Exemple #5
0
        internal async Task TimerLoopAsync(TimerAwaitable timer)
        {
            timer.Start();

            using (timer)
            {
                // await returns True until `timer.Stop()` is called in the `finally` block of `ReceiveLoop`
                while (await timer)
                {
                    try
                    {
                        // Ping server
                        var response = await _session.SendRequestAsync(StreamingRequest.CreateGet("/api/version"), _disconnectCts.Token).ConfigureAwait(false);

                        if (!IsSuccessResponse(response))
                        {
                            Log.ClientKeepAliveFail(_logger, _url, response.StatusCode);

                            IsConnected = false;

                            Disconnected?.Invoke(this, new DisconnectedEventArgs()
                            {
                                Reason = $"Received failure from server heartbeat: {response.StatusCode}."
                            });
                        }
                        else
                        {
                            Log.ClientKeepAliveSucceed(_logger, _url);
                        }
                    }
#pragma warning disable CA1031 // Do not catch general exception types
                    catch (Exception e)
#pragma warning restore CA1031 // Do not catch general exception types
                    {
                        Log.ClientKeepAliveFail(_logger, _url, 0, e);
                        IsConnected = false;
                        Disconnected?.Invoke(this, new DisconnectedEventArgs()
                        {
                            Reason = $"Received failure from server heartbeat: {e}."
                        });
                    }
                }
            }
        }
        /// <summary>
        /// Lists the Conversations in which this bot has participated for a the channel server this adapters' connection is tethered to. The
        /// channel server returns results in pages and each page will include a `continuationToken`
        /// that can be used to fetch the next page of results from the server.
        /// </summary>
        /// <param name="continuationToken">The continuation token from the previous page of results.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects
        /// or threads to receive notice of cancellation.</param>
        /// <returns>A task that represents the work queued to execute.</returns>
        /// <remarks>If the task completes successfully, the result contains a page of the members of the current conversation.
        /// </remarks>
        public async Task <ConversationsResult> GetConversationsAsync(string continuationToken = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            var request = StreamingRequest.CreateGet(StreamingChannelPrefix);

            return(await SendRequestAsync <ConversationsResult>(request, cancellationToken).ConfigureAwait(false));
        }