public async Task<Response> ExecuteRequest(Request request) { if (!_tcpClient.Connected) { throw new InvalidOperationException("Connect first."); } var converter = new MessageConverter(); var requestBuffer = new MemoryStream(); var streamWriter = new HmBinaryMessageWriter(requestBuffer); var requestReader = new MessageReader(request); converter.Convert(requestReader, streamWriter); var networkStream = _tcpClient.GetStream(); requestBuffer.Position = 0; await requestBuffer.CopyToAsync(networkStream); await Task.Delay(100); //todo: implement buffered reader var streamReader = new HmBinaryMessageReader(networkStream); var responseBuilder = new MessageBuilder(); converter.Convert(streamReader, responseBuilder); var response = (Response)responseBuilder.Result; return response; }
public Task HandleRequest(IRequestContext requestContext) { var converter = new MessageConverter(); var messageBuilder = new MessageBuilder(); converter.Convert(requestContext.Request, messageBuilder); var request = (Request)messageBuilder.Result; var response = HandleRequest(request); #if DEBUG System.Diagnostics.Debug.WriteLine(messageBuilder.Debug); Console.WriteLine(request); #endif var responseReader = new MessageReader(response); converter.Convert(responseReader, requestContext.Response); return Task.FromResult(0); }
private async void HandleMessage(RedisValue value) { try { Log.Debug("Handling Message " + value); string key = ""; var messageObject = MessageConverter.Convert(value, out key); //get the type of the key var listenerType = (from l in Listeners where l.TypeKey.Equals(key, StringComparison.InvariantCultureIgnoreCase) select l).FirstOrDefault() as RedisListener; if (listenerType == null) { //default functionality is to send to poison queue listener is not found if (PoisonQueue != null) { Log.Warn("Listener type not found for message " + value); SendToPoisonQueue(value); } else { throw new Exception("Listener for message not found"); } return; } Log.Debug("Listener found for message " + value + " of type " + listenerType.TypeKey); await listenerType.InternalHandlerAsync(messageObject); } catch (Exception e) { Log.Error("Error handling message " + value.ToString(), e); HandleException(e, value); } finally { RemoveFromProcessingQueue(value); } }
public void Convert_TemplateMessageWithButtonsTemplate_InstanceIsPreserved() { TemplateMessage message = new TemplateMessage() { AlternativeText = "Alternative", Template = new ButtonsTemplate() { ThumbnailUrl = new Uri("https://foo.bar"), Title = "ButtonsTitle", Text = "ButtonsText", Actions = new ITemplateAction[] { new PostbackAction() { Label = "PostbackLabel", Text = "PostbackText", Data = "PostbackData", } } } }; ISendMessage[] messages = MessageConverter.Convert(new ISendMessage[] { message }); Assert.AreEqual(1, messages.Length); ITemplateMessage templateMessage = messages[0] as ITemplateMessage; Assert.AreEqual(message, templateMessage); IButtonsTemplate buttonsTemplate = templateMessage.Template as IButtonsTemplate; Assert.AreEqual(message.Template, buttonsTemplate); ITemplateAction action = buttonsTemplate.Actions.First(); Assert.AreEqual(action, ((ButtonsTemplate)message.Template).Actions.First()); }
public void ShouldWriteRequestsCorrectly() { var testRequest = new Request() { Method = "system.listMethods", Parameters = { "Bla" } }; testRequest.SetAuthorization("wiki", "pedia"); var output = new MemoryStream(); var converter = new MessageConverter(); converter.Convert(new MessageReader(testRequest), new HmBinaryMessageWriter(output)); var outputFormatted = BinaryUtils.FormatMemoryStream(output); var expected = "42696E400000002F000000010000000D417574686F72697A6174696F6E0000001642617369632064326C72615470775A57527059513D3D000000250000001273797374656D2E6C6973744D6574686F6473000000010000000300000003426C61"; outputFormatted.ShouldBe(expected); }
public async Task <ActionResult <bool> > Send([FromBody] MessageDto message) { try { string id = HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value; User user = await _context.Users.AsNoTracking().FirstOrDefaultAsync(x => x.Id == Guid.Parse(id)); if (user == null) { return(BadRequest()); } message.UserId = Guid.Parse(id); var room = await _context.Rooms.AsNoTracking().Select(y => new { Id = y.Id, UsersId = y.UserRoom.Select(z => z.UserId.ToString()).ToList() }).FirstOrDefaultAsync(x => x.Id == message.RoomId); if (room == null) { return(BadRequest()); } message.Date = DateTime.Now; await _hubContext.Clients.Users(room.UsersId.AsReadOnly()).SendAsync( "Send", message); await _context.Messages.AddAsync(MessageConverter.Convert(message)); await _context.SaveChangesAsync(); return(true); } catch (Exception ex) { return(StatusCode(500, ex)); } }
public void Convert_TemplateMessageWithConfirmTemplate_InstanceIsPreserved() { TemplateMessage message = new TemplateMessage() { AlternativeText = "Alternative", Template = new ConfirmTemplate() { Text = "ButtonsText", OkAction = new MessageAction() { Label = "PostbackLabel", Text = "PostbackText" }, CancelAction = new UriAction() { Label = "PostbackLabel", Url = new Uri("http://foo.bar") } } }; ISendMessage[] messages = MessageConverter.Convert(new ISendMessage[] { message }); Assert.AreEqual(1, messages.Length); ITemplateMessage templateMessage = messages[0] as ITemplateMessage; Assert.AreEqual(message, templateMessage); IConfirmTemplate confirmTemplate = templateMessage.Template as IConfirmTemplate; Assert.AreEqual(message.Template, confirmTemplate); Assert.AreEqual(confirmTemplate.OkAction, ((ConfirmTemplate)message.Template).OkAction); Assert.AreEqual(confirmTemplate.CancelAction, ((ConfirmTemplate)message.Template).CancelAction); }
public void Convert_TemplateMessageWithCarouselTemplateAndColumnActionsIsNull_ThrowsException() { TemplateMessage message = new TemplateMessage() { AlternativeText = "Alternative", Template = new CarouselTemplate() { Columns = new ICarouselColumn[] { new CarouselColumn() { ThumbnailUrl = new Uri("https://foo.bar"), Title = "CarouselTitle", Text = "CarouselText" } } } }; ExceptionAssert.Throws <InvalidOperationException>("The actions cannot be null.", () => { MessageConverter.Convert(new ISendMessage[] { message }); }); }
public async Task <List <MessageDto> > GetByItem(Guid id) { var messages = _context.Messages.AsNoTracking().ToList().FindAll(x => x.ItemId == id); return(MessageConverter.Convert(messages)); }
public void StringResponsesAreWrittenCorrectly() { var input = new MemoryStream(); var writer = new HmBinaryMessageWriter(input); writer.BeginMessage(MessageType.Request); writer.BeginContent(); writer.SetMethod("newDevices"); writer.BeginArray(1); writer.BeginItem(); //parameter 1 writer.BeginArray(2); writer.BeginItem(); writer.BeginStruct(2); writer.BeginItem(); writer.WritePropertyName("CHILDREN"); var items = 3; writer.BeginArray(items); for (; items > 0; items--) { writer.BeginItem(); writer.WriteStringValue("value " + items); writer.EndItem(); } writer.EndArray(); writer.EndItem(); writer.BeginItem(); writer.WritePropertyName("FIRMWARE"); writer.WriteStringValue("1.505"); writer.EndItem(); writer.EndStruct(); writer.EndItem(); writer.BeginItem(); writer.BeginStruct(3); writer.BeginItem(); writer.WritePropertyName("ADDRESS"); writer.WriteStringValue("BidCoS-RF"); writer.EndItem(); writer.BeginItem(); writer.WritePropertyName("CHILDREN"); var items2 = 5; writer.BeginArray(items2); for (; items2 > 0; items2--) { writer.BeginItem(); writer.WriteStringValue("value " + items2); writer.EndItem(); } writer.EndArray(); writer.EndItem(); writer.BeginItem(); writer.WritePropertyName("FIRMWARE"); writer.WriteStringValue("1.505"); writer.EndItem(); writer.EndStruct(); writer.EndItem(); //end parameter 1 writer.EndArray(); writer.EndItem(); //end params writer.EndArray(); writer.EndContent(); writer.EndMessage(); var result = BinaryUtils.FormatMemoryStream(input); input.Seek(0, SeekOrigin.Begin); var converter = new MessageConverter(); var outputReader = new JsonMessageBuilder(); converter.Convert(new HmBinaryMessageReader(input), outputReader); result.ShouldBe("42696E00000001180000000A6E6577446576696365730000000100000100000000020000010100000002000000084348494C4452454E0000010000000003000000030000000776616C75652033000000030000000776616C75652032000000030000000776616C75652031000000084649524D574152450000000300000005312E353035000001010000000300000007414444524553530000000300000009426964436F532D5246000000084348494C4452454E0000010000000005000000030000000776616C75652035000000030000000776616C75652034000000030000000776616C75652033000000030000000776616C75652032000000030000000776616C75652031000000084649524D574152450000000300000005312E353035"); }