示例#1
0
 public override void OnSuccess(MethodResult <RocketMessage> result, IMessageResponse response)
 {
     if (wasTaskListResponse && response is TasklistMessageResponse tlmr)
     {
         cache.LastTaskListMessageIds[tlmr.GetUser().ID] = (result.Result.Id, result.Result.RoomId, response);
     }
 }
        public async Task Should_be_passed_through_in_the_response()
        {
            // Act
            IMessageResponse response = await Sut.GetDriveStateAsync(_vehicleId).ConfigureAwait(false);

            // Assert
            response.RawJsonAsString.Should().Be(_expected.ToString(Formatting.None));
        }
        public async Task Should_return_the_error_status_code()
        {
            // Act
            IMessageResponse actual = await Sut.GetDriveStateAsync(_vehicleId, AccessToken).ConfigureAwait(false);

            // Assert
            actual.HttpStatusCode.Should().Be(HttpStatusCode.BadGateway);
        }
示例#4
0
        public async Task It_should_return_just_the_HTTP_status_Code()
        {
            // Act
            IMessageResponse actual = await Sut.GetVehicleStateAsync(_vehicleId, AccessToken).ConfigureAwait(false);

            // Assert
            actual.HttpStatusCode.Should().Be(_statusCode);
        }
示例#5
0
        public async Task  Should_return_the_error_status_code()
        {
            // Act
            IMessageResponse actual = await Sut.RevokeAccessTokenAsync(_accessToken).ConfigureAwait(false);

            // Assert
            actual.HttpStatusCode.Should().Be(HttpStatusCode.Unauthorized);
        }
示例#6
0
        public async Task Should_return_the_expected_response()
        {
            // Act
            IMessageResponse actual = await Sut.RevokeAccessTokenAsync(_accessToken).ConfigureAwait(false);

            // Assert
            actual.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            actual.RawJsonAsString.Should().Be("{}");
        }
示例#7
0
        public async Task Should_return_the_error_status_code()
        {
            // Act
            IMessageResponse actual =
                await Sut.RequestAccessTokenAsync(_clientId, _clientSecret, _email, _password).ConfigureAwait(false);

            // Assert
            actual.HttpStatusCode.Should().Be(HttpStatusCode.Unauthorized);
        }
        public async Task Should_be_passed_through_in_the_response()
        {
            // Act
            IMessageResponse response =
                await Sut.RefreshAccessTokenAsync(_clientId, _clientSecret, _refreshToken).ConfigureAwait(false);

            // Assert
            response.RawJsonAsString.Should().Be(_expected.ToString(Formatting.None));
        }
示例#9
0
        public async Task Should_be_passed_through_in_the_response()
        {
            // Act
            IMessageResponse <IResponseDataWrapper <IVehicleState> > response = await Sut.GetVehicleStateAsync(_vehicleId).ConfigureAwait(false);

            response.Data.Response.SunRoofPercentOpen.Should().Be(null);

            // Assert
            response.RawJsonAsString.Should().Be(_expected.ToString(Formatting.None));
        }
示例#10
0
        public async Task Should_return_the_expected_drive_state()
        {
            // Act
            IMessageResponse <IResponseDataWrapper <IDriveState> > actual =
                await Sut.GetDriveStateAsync(_vehicleId, AccessToken).ConfigureAwait(false);

            // Assert
            actual.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            actual.Data.Should().BeEquivalentTo(_expected, WithStrictOrdering);
        }
示例#11
0
        public async Task Should_return_the_expected_access_token()
        {
            // Act
            IMessageResponse <IAccessTokenResponse> actual =
                await Sut.RequestAccessTokenAsync(_clientId, _clientSecret, _email, _password).ConfigureAwait(false);

            // Assert
            actual.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            actual.Data.ShouldBeEquivalentTo(_expected, WithStrictOrdering);
        }
        public async Task Should_return_the_expected_vehicles()
        {
            // Act
            IMessageResponse <IResponseDataWrapper <IReadOnlyList <IVehicle> > > actual =
                await Sut.GetVehiclesAsync(AccessToken).ConfigureAwait(false);

            // Assert
            actual.HttpStatusCode.Should().Be(HttpStatusCode.OK);
            actual.Data.ShouldBeEquivalentTo(_expected, WithStrictOrdering);
        }
        private void MessageBroker_OnResponse(IRequestMessage message, IMessageResponse response)
        {
            var payload = message.GetPayload <Payload>();

            Assert.IsNotNull(response);
            Assert.IsNotNull(response.Content);
            var content = (Payload)response.Content;

            Assert.AreEqual(payload.x * 10, content.x);
            Assert.AreEqual(payload.y * 100, content.y);
        }
        public IMessageResponse UpdateMessage(IMessageResponse taskListResponse)
        {
            if (!(taskListResponse is TasklistMessageResponse response))
            {
                throw new ArgumentException("Response has to be of type TasklistMessageResponse", nameof(taskListResponse));
            }

            var newTaskList = response.GetTasks().Select(x => context.Tasks.FirstOrDefault(t => t.ID == x.ID));

            return(new TasklistMessageResponse(response.GetTitle(), response.ResponseUrl, response.GetUser(), newTaskList));
        }
示例#15
0
        /// <summary>
        /// Gets a value that indicates if the <paramref name="messageResponse"/> was successful.
        /// </summary>
        /// <param name="messageResponse">A <see cref="IMessageResponse"/>.</param>
        /// <returns>
        /// <see langword="true" /> if <see cref="IMessageResponse.HttpStatusCode" /> was in the range 200-299;
        /// otherwise <see langword="false" />.
        /// </returns>
        public static bool IsSuccessStatusCode(this IMessageResponse messageResponse)
        {
            if (messageResponse == null)
            {
                throw new ArgumentNullException(nameof(messageResponse));
            }

            int  statusCode        = (int)messageResponse.HttpStatusCode;
            bool successStatusCode = statusCode >= 200 && statusCode <= 299;

            return(successStatusCode);
        }
示例#16
0
        private void _conn_OnTunnelResponse(IMessageResponse response)
        {
            if (responses.ContainsKey(response.SequenceNumber))
            {
                responses[response.SequenceNumber] = response;
            }
            else
            {
                responses.Add(response.SequenceNumber, response);
            }

            lastReceivedNumber = response.SequenceNumber;
        }
示例#17
0
 protected async Task <MethodResult <RocketMessage> > SendMessageAsync(IMessageResponse response)
 {
     if (response is AttachmentResponse attachmentMessage)
     {
         return(await Driver.SendCustomMessageAsync(attachmentMessage.Attachment, attachmentMessage.RoomId).ConfigureAwait(false));
     }
     else if (response is BasicResponse basic)
     {
         return(await Driver.SendMessageAsync(basic.Message, basic.RoomId).ConfigureAwait(false));
     }
     else
     {
         throw new InvalidOperationException(
                   $"The result of {nameof(IBotResponse.GetResponse)} is either null or not of a supported type.");
     }
 }
示例#18
0
        override protected async Task ProcessRequest(string subscriptionId, List <Newtonsoft.Json.Linq.JObject> fields)
        {
            using (IServiceScope scope = provider.CreateScope())
            {
                try
                {
                    var response             = (IResponse)scope.ServiceProvider.GetService(subscriptions[subscriptionId].ResponseType);
                    IMessageResponse message = response.RespondTo(fields);
                    var result = await SendMessageAsync(message);

                    response.OnSuccess(result, message);
                }
                catch (Exception ex)
                {
                    logger.LogError(ex, "An error occurred when processing request {subid} with payload {args}", subscriptionId, fields);
                }
            }
        }
示例#19
0
        private IMessageResponse RespondToDirectMessage(NotifyUserMessageArgument input)
        {
            IMessageResponse response = null;

            if (input.Payload.Message.Msg.TrimStart().ToUpper().StartsWith("TASKLIST"))
            {
                response = RespondToTaskList(input);
            }
            else if (input.Payload.Message.Msg.TrimStart().ToUpper().StartsWith("SET TASK"))
            {
                response = RespondToSetTaskDone(input);
            }
            if (response != null)
            {
                response.RoomId = response.RoomId ?? input.Payload.RoomId;
                return(response);
            }
            return(new BasicResponse("Sorry, I did not understand your request. I understand the following actions:\n* **tasklist**: Display all tasks assigned to you\n* Set Task <taskId> to <open/done>: Set a specific task to open or done", input.Payload.RoomId));
        }
示例#20
0
        private async Task SendMessageAsync(IMessageResponse response)
        {
            var attachmentMessage = response as AttachmentResponse;
            var basicMessage      = response as BasicResponse;

            if (attachmentMessage != null)
            {
                await Driver.SendCustomMessageAsync(attachmentMessage.Attachment, attachmentMessage.RoomId).ConfigureAwait(false);
            }
            else if (basicMessage != null)
            {
                await Driver.SendMessageAsync(basicMessage.Message, basicMessage.RoomId).ConfigureAwait(false);
            }
            else
            {
                throw new InvalidOperationException(
                          $"The result of {nameof(IBotResponse.GetResponse)} is either null or not of a supported type.");
            }
        }
示例#21
0
        /// <summary>
        /// Reads the JSON from the <paramref name="responseTask"/> and deserializes it to the type
        /// <typeparamref name="TResult"/>.
        /// </summary>
        /// <typeparam name="TResult">The <see cref="Type"/> of the result object.</typeparam>
        /// <typeparam name="TModel">The <see cref="Type"/> of the object to deserialize.</typeparam>
        /// <param name="responseTask">
        /// The asynchronous <see cref="Task{T}"/> of a <see cref="HttpResponseMessage"/>.
        /// </param>
        /// <param name="cancellationToken">A <see cref="CancellationToken" /> to observe while waiting for a task to
        /// complete.</param>
        /// <returns>The deserialized object of type <typeparamref name="TResult"/>.</returns>
        private static async Task <IMessageResponse <TResult> > ReadJsonAsAsync <TResult, TModel>(
            this Task <HttpResponseMessage> responseTask,
            CancellationToken cancellationToken)
            where TResult : class
            where TModel : class, TResult
        {
            HttpResponseMessage responseMessage = await responseTask.ConfigureAwait(false);

            using (responseMessage)
            {
                Task <IMessageResponse <TModel> > messageTask =
                    responseMessage.IsSuccessStatusCode
                        ? responseMessage.ReadSuccessResponseAsync <TModel>(cancellationToken)
                        : responseMessage.ReadFailureResponseAsync <TModel>(cancellationToken);

                IMessageResponse <TModel> response = await messageTask.ConfigureAwait(false);

                return(response);
            }
        }
示例#22
0
 public async Task SendTextAsync(string socketId, IMessageResponse messageResponse)
 {
     await SendAsync(socketId, SerializeToText(messageResponse));
 }
 public VisitorService(ISignalRService signalRService, IHttpService Http, IMessageResponse ResponseManager)
 {
     this.signalRService  = signalRService;
     this.Http            = Http;
     this.ResponseManager = ResponseManager;
 }
示例#24
0
 public MessageResponseWrapper(IMessageResponse response) => _response = response;
 public async Task ProcessResponseAsync(IMessageResponse messageResponse)
 => await ProcessResponse((TMessageResponse)messageResponse);
示例#26
0
 public Task SayHello(IMessageRequest req, IMessageResponse resp)
 {
     return(resp.SendAsync(new { msg = "hello , meow ~~!" }));
 }
示例#27
0
 [POST("meow")] //按照约定,GET和POST的一大区别是:使用POST方法时,客户端会在消息中携带参数。
 public Task SayMeow(IMessageRequest req, IMessageResponse resp)
 {
     return(resp.SendTextAsync(" meow~! meow~! " + req.GetTextMessage()));
 }
示例#28
0
 public virtual void OnSuccess(MethodResult <RocketMessage> result, IMessageResponse response)
 {
 }
示例#29
0
 public async Task SendBinaryAsync(string socketId, IMessageResponse messageResponse)
 {
     await SendAsync(socketId, SerializeToBinary(messageResponse));
 }
 public DataStoreResponse(Header header, IMessageResponse body)
 {
     this.Header = header;
     this.Body = body;
 }