public async Task RestaurantRatingChanged(int idRestaurant, decimal newRating) { var newRatingEvt = new RatingChangedEvent { idRestaurant = idRestaurant }; using (var scope = _serviceScopeFactory.CreateScope()) { IReviewService reviewService = scope.ServiceProvider.GetRequiredService <IReviewService>(); var restaurantReviews = await reviewService.GetRestaurantReviews(idRestaurant); newRatingEvt.averageRating = restaurantReviews.Sum(rw => rw.Rating) / restaurantReviews.Count(); } using (var connection = cFactory.CreateConnection()) using (var channel = connection.CreateModel()) { IBasicProperties props = channel.CreateBasicProperties(); props.Type = nameof(RatingChangedEvent); var body = MessageSerializationHelper.SerializeObjectToBin(newRatingEvt); channel.BasicPublish(exchange: string.Empty, routingKey: ApplicationEvents.RestaurantQueue, basicProperties: props, body: body); } }
private async Task <SearchResult> QueryAsync(Req.T_OGDSearchRequest request, int seitenNummer) { request.Seitennummer = seitenNummer; request.Sortierung = new Req.BundesnormenSortExpression() { SortDirection = Req.WebSortDirection.Ascending, SortedByColumn = Req.BundesnormenSortableColumn.Kurzinformation }; // We do continuous loading in the UI, thus the user cannot specify the page size request.DokumenteProSeiteSpecified = true; request.DokumenteProSeite = Req.PageSize.Fifty; try { string requestAsString = MessageSerializationHelper.SerializeToString(request); var client = CreateServiceClient(); requestResponse response = await client.requestAsync("Br", requestAsString); var searchResult = MessageSerializationHelper.DeserializeFromString <Resp.T_OGDSearchResult>(response.Body.requestResult); return(Mapper.MapSearchResult(searchResult)); } catch (Exception ex) { return(new SearchResult(ex.ToString())); } }
private void btnSave_Click(object sender, EventArgs e) { try { if (string.IsNullOrWhiteSpace(txtMessageText.Text)) { return; } saveFileDialog.Title = SaveAsTitle; saveFileDialog.DefaultExt = JsonExtension; saveFileDialog.Filter = JsonFilter; saveFileDialog.FileName = CreateFileName(); if (saveFileDialog.ShowDialog() != DialogResult.OK || string.IsNullOrWhiteSpace(saveFileDialog.FileName)) { return; } if (File.Exists(saveFileDialog.FileName)) { File.Delete(saveFileDialog.FileName); } using (var writer = new StreamWriter(saveFileDialog.FileName)) { writer.Write(MessageSerializationHelper.Serialize(eventData, txtMessageText.Text)); } } catch (Exception ex) { HandleException(ex); } }
private async void OrderEvent_Received(object sender, BasicDeliverEventArgs e) { Console.WriteLine($"A message of type {e.BasicProperties?.Type} has been received received"); try { switch (e?.BasicProperties.Type) { case nameof(DeliveryPickedUpEvent): await HandleStatusChangedEvent(MessageSerializationHelper.DeserializeObjectFromBin <DeliveryPickedUpEvent>(e.Body).idOrder, DTO.Orders.Status.Delivering); break; case nameof(DeliveryCompletedEvent): await HandleStatusChangedEvent(MessageSerializationHelper.DeserializeObjectFromBin <DeliveryCompletedEvent>(e.Body).idOrder, DTO.Orders.Status.Completed); break; default: throw new NotImplementedException($"Event not supported: {e.BasicProperties?.Type}"); } } catch (Exception ex) { _logger.Log(ex.Message, Microsoft.Extensions.Logging.LogLevel.Error, System.Net.HttpStatusCode.InternalServerError, $"{nameof(OrdersEventManager)} - OrderEvent_Received"); throw ex; } }
public async Task RiderRatingChanged(int idRider, decimal newRating) { var newRatingEvt = new RiderRatingChangedEvent { IdRider = idRider }; using (var scope = _serviceScopeFactory.CreateScope()) { IReviewService reviewService = scope.ServiceProvider.GetRequiredService <IReviewService>(); var riderReviews = await reviewService.GetRiderReviews(idRider); newRatingEvt.newAverageRating = riderReviews.Sum(rw => rw.Rating) / riderReviews.Count(); } IBasicProperties props = _channel.CreateBasicProperties(); props.Type = nameof(RiderRatingChangedEvent); var body = MessageSerializationHelper.SerializeObjectToBin(newRatingEvt); _channel.BasicPublish(exchange: string.Empty, routingKey: ApplicationEvents.DeliveryQueue, basicProperties: props, body: body); }
public void SingleQos_ExactlyOnce() { var expected = new[] { (byte)0x90, (byte)0x03, (byte)0x00, (byte)0x02, (byte)0x02, }; MqttMessage msg = new MqttSubscribeAckMessage() .WithMessageIdentifier(2) .AddQosGrant(MqttQos.ExactlyOnce); Console.WriteLine(msg); byte[] actual = MessageSerializationHelper.GetMessageBytes(msg); Assert.Equal <int>(expected.Length, actual.Length); Assert.Equal <byte>(expected[0], actual[0]); // header byte 1 Assert.Equal <byte>(expected[1], actual[1]); // remaining length Assert.Equal <byte>(expected[2], actual[2]); // message id b1 Assert.Equal <byte>(expected[3], actual[3]); // message id b2 Assert.Equal <byte>(expected[4], actual[4]); // QOS }
public void QosLevel2ExactlyOnce() { // expected response var expected = new[] { (byte)0x34, (byte)0x0E, (byte)0x0, (byte)0x4, (byte)'f', (byte)'r', (byte)'e', (byte)'d', (byte)0x0, (byte)0x0A, // message payload is here (byte)'h', (byte)'e', (byte)'l', (byte)'l', (byte)'o', (byte)'!', }; MqttMessage msg = new MqttPublishMessage() .WithQos(MqttQos.ExactlyOnce) .WithMessageIdentifier(10) .ToTopic("fred") .PublishData(new[] { (byte)'h', (byte)'e', (byte)'l', (byte)'l', (byte)'o', (byte)'!', } ); Console.WriteLine(msg); byte[] actual = MessageSerializationHelper.GetMessageBytes(msg); Assert.Equal <int>(expected.Length, actual.Length); Assert.Equal <byte>(expected[0], actual[0]); // msg type of header + other bits Assert.Equal <byte>(expected[1], actual[1]); // remaining length Assert.Equal <byte>(expected[2], actual[2]); // first topic length byte Assert.Equal <byte>(expected[3], actual[3]); // second topic length byte Assert.Equal <byte>(expected[4], actual[4]); // f Assert.Equal <byte>(expected[5], actual[5]); // r Assert.Equal <byte>(expected[6], actual[6]); // e Assert.Equal <byte>(expected[7], actual[7]); // d Assert.Equal <byte>(expected[8], actual[8]); // h Assert.Equal <byte>(expected[9], actual[9]); // e Assert.Equal <byte>(expected[10], actual[10]); // l Assert.Equal <byte>(expected[11], actual[11]); // l Assert.Equal <byte>(expected[12], actual[12]); // o Assert.Equal <byte>(expected[13], actual[13]); // ! }
public void BasicSerialization() { MqttPingRequestMessage pingReqMsg = new MqttPingRequestMessage(); byte[] bytes = MessageSerializationHelper.GetMessageBytes(pingReqMsg); Assert.Equal <byte>(192, bytes[0]); }
public void MultiTopic() { // double topic Subscribe var expected = new[] { (byte)0x82, (byte)0x10, (byte)0x00, (byte)0x03, (byte)0x00, (byte)0x04, (byte)'f', (byte)'r', (byte)'e', (byte)'d', (byte)0x01, (byte)0x00, (byte)0x04, (byte)'m', (byte)'a', (byte)'r', (byte)'k', (byte)0x02 }; MqttMessage msg = new MqttSubscribeMessage() .ToTopic("fred") .AtQos(MqttQos.AtLeastOnce) .ToTopic("mark") .AtQos(MqttQos.ExactlyOnce) .WithMessageIdentifier(3) .ExpectAcknowledgement(); Console.WriteLine(msg); byte[] actual = MessageSerializationHelper.GetMessageBytes(msg); Assert.Equal <int>(expected.Length, actual.Length); Assert.Equal <byte>(expected[0], actual[0]); // msg type of header Assert.Equal <byte>(expected[1], actual[1]); // remaining length Assert.Equal <byte>(expected[2], actual[2]); // Start of VH: MsgID Byte1 Assert.Equal <byte>(expected[3], actual[3]); // MsgID Byte 2 Assert.Equal <byte>(expected[4], actual[4]); // Topic Length B1 Assert.Equal <byte>(expected[5], actual[5]); // Topic Length B2 Assert.Equal <byte>(expected[6], actual[6]); // f Assert.Equal <byte>(expected[7], actual[7]); // r Assert.Equal <byte>(expected[8], actual[8]); // e Assert.Equal <byte>(expected[9], actual[9]); // d Assert.Equal <byte>(expected[10], actual[10]); // Qos (LeastOnce) Assert.Equal <byte>(expected[11], actual[11]); // Topic Length B1 Assert.Equal <byte>(expected[12], actual[12]); // Topic Length B2 Assert.Equal <byte>(expected[13], actual[13]); // m Assert.Equal <byte>(expected[14], actual[14]); // a Assert.Equal <byte>(expected[15], actual[15]); // r Assert.Equal <byte>(expected[16], actual[16]); // k Assert.Equal <byte>(expected[17], actual[17]); // Qos (ExactlyOnce) }
/// <summary> /// Pubblica l'evento "Ordine Accettato da gestore" su coda Delivery /// </summary> /// <param name="orderRejected">Dati del messaggio</param> public void OrderAccepted(OrderAcceptedEvent orderAccepted) { IBasicProperties props = _channel.CreateBasicProperties(); props.Type = nameof(OrderAcceptedEvent); var body = MessageSerializationHelper.SerializeObjectToBin(orderAccepted); _channel.BasicPublish(exchange: string.Empty, routingKey: ApplicationEvents.DeliveryQueue, basicProperties: props, body: body); }
/// <summary> /// Pubblica l'evento "Presa in consegna da rider" su coda Order /// </summary> /// <param name="deliveryPickedUp">Dati del messaggio</param> public void DeliveryPickedUp(DeliveryPickedUpEvent deliveryPickedUp) { IBasicProperties props = _channel.CreateBasicProperties(); props.Type = nameof(DeliveryPickedUpEvent); var body = MessageSerializationHelper.SerializeObjectToBin(deliveryPickedUp); _channel.BasicPublish(exchange: string.Empty, routingKey: ApplicationEvents.OrderQueue, basicProperties: props, body: body); }
public void ProductAvailabilityChanged(ProductAvailabilityChangedEvent productAvailabilityChanged) { IBasicProperties props = _channel.CreateBasicProperties(); props.Type = nameof(ProductAvailabilityChangedEvent); var body = MessageSerializationHelper.SerializeObjectToBin(productAvailabilityChanged); _channel.BasicPublish(exchange: string.Empty, routingKey: ApplicationEvents.BasketQueue, basicProperties: props, body: body); }
public void WithNonDefaultQos() { // set up some publish data MqttPublishMessage msg = new MqttPublishMessage() .ToTopic("mark") .WithQos(MqttQos.AtLeastOnce) .WithMessageIdentifier(4) .PublishData(new[] { (byte)9 }); var msgBytes = MessageSerializationHelper.GetMessageBytes(msg); // 2 (header + 6 (topic) + 2 (msg id) + 1 (data size) Assert.Equal <int>(11, msgBytes.Length); }
private async void Restaurant_Received(object sender, BasicDeliverEventArgs e) { Console.WriteLine($"A message of type {e.BasicProperties?.Type} has been received received"); switch (e?.BasicProperties.Type) { case nameof(RatingChangedEvent): await HandleRatingEvent(MessageSerializationHelper.DeserializeObjectFromBin <RatingChangedEvent>(e.Body)); break; default: throw new NotImplementedException($"Event not supported: {e.BasicProperties?.Type}"); } }
/// <summary> /// Pubblica l'evento "Ordine Accettato da gestore" su coda Delivery /// </summary> /// <param name="orderRejected">Dati del messaggio</param> public void OrderAccepted(OrderAcceptedEvent orderAccepted) { using (var connection = _factory.CreateConnection()) using (var channel = connection.CreateModel()) { IBasicProperties props = channel.CreateBasicProperties(); props.Type = nameof(OrderAcceptedEvent); var body = MessageSerializationHelper.SerializeObjectToBin(orderAccepted); channel.BasicPublish(exchange: string.Empty, routingKey: ApplicationEvents.DeliveryQueue, basicProperties: props, body: body); } }
public void BasicSerialization() { MqttConnectMessage msg = new MqttConnectMessage() .WithClientIdentifier("mark") .KeepAliveFor(30) .StartClean(); Console.WriteLine(msg); byte[] mb = MessageSerializationHelper.GetMessageBytes(msg); Assert.Equal <byte>(0x10, mb[0]); // VH will = 12, Msg = 6 Assert.Equal <byte>(18, mb[1]); }
private void OrderEvent_Received(object sender, BasicDeliverEventArgs e) { switch (e?.BasicProperties.Type) { case nameof(DeliveryPickedUpEvent): HandleStatusChangedEvent(MessageSerializationHelper.DeserializeObjectFromBin <DeliveryPickedUpEvent>(e.Body).idOrder, DTO.Status.Delivering); break; case nameof(DeliveryCompletedEvent): HandleStatusChangedEvent(MessageSerializationHelper.DeserializeObjectFromBin <DeliveryCompletedEvent>(e.Body).idOrder, DTO.Status.Completed); break; default: throw new NotImplementedException($"Event not supported: {e.BasicProperties?.Type}"); } }
public void ProductPriceChanged(PriceChangedEvent priceChanged) { using (var connection = cFactory.CreateConnection()) using (var channel = connection.CreateModel()) { IBasicProperties props = channel.CreateBasicProperties(); props.Type = nameof(PriceChangedEvent); var body = MessageSerializationHelper.SerializeObjectToBin(priceChanged); channel.BasicPublish(exchange: string.Empty, routingKey: ApplicationEvents.BasketQueue, basicProperties: props, body: body); } }
private async void DeliveryEvent_Received(object sender, BasicDeliverEventArgs e) { switch (e?.BasicProperties.Type) { case nameof(OrderAcceptedEvent): HandleOrderAcceptedEvent(MessageSerializationHelper.DeserializeObjectFromBin <OrderAcceptedEvent>(e.Body)); break; case nameof(RiderRatingChangedEvent): await HandleRiderRatingChangedEvent(MessageSerializationHelper.DeserializeObjectFromBin <RiderRatingChangedEvent>(e.Body)); break; default: throw new NotImplementedException($"Event not supported: {e.BasicProperties?.Type}"); } }
private void RestaurantsEvents_Received(object sender, BasicDeliverEventArgs e) { Console.WriteLine($"Message of type {e.BasicProperties?.Type} received from RestaurantsService"); switch (e?.BasicProperties.Type) { case nameof(PriceChangedEvent): HandlePriceChangedEvent(MessageSerializationHelper.DeserializeObjectFromBin <PriceChangedEvent>(e.Body)); break; case nameof(ProductAvailabilityChangedEvent): HandleProductAvailabilityChangedEvent(MessageSerializationHelper.DeserializeObjectFromBin <ProductAvailabilityChangedEvent>(e.Body)); break; default: throw new NotImplementedException($"Event not supported: {e.BasicProperties?.Type}"); } }
public static async Task <DocumentResult> LoadAsync(string dokumentNummer) { var client = new OGDServiceSoapClient(); try { getDocumentResponse doc = await client.getDocumentAsync("Br", dokumentNummer); var documentResult = MessageSerializationHelper.DeserializeFromString <Doc.DocumentResult>(doc.Body.getDocumentResult); var result = Mapper.MapDocumentResult(documentResult); result.OriginalDocumentResultXml = doc.Body.getDocumentResult; return(result); } catch (Exception ex) { return(new DocumentResult(ex.ToString())); } }
public void BasicDeserialization() { // standard byte array of a ping response message. var expected = new[] { (byte)0xD0, (byte)0x00, }; MqttPingResponseMessage msg = new MqttPingResponseMessage(); Console.WriteLine(msg); byte[] actual = MessageSerializationHelper.GetMessageBytes(msg); Assert.Equal <int>(expected.Length, actual.Length); Assert.Equal <byte>(expected[0], actual[0]); // first header byte Assert.Equal <byte>(expected[1], actual[1]); // message size byte }
public void SingleTopic() { // simple single topic Subscribe message var expected = new[] { (byte)0x8A, (byte)0x09, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x04, (byte)'f', (byte)'r', (byte)'e', (byte)'d', (byte)0x01, }; MqttMessage msg = new MqttSubscribeMessage() .ToTopic("fred") .AtQos(MqttQos.AtLeastOnce) .WithMessageIdentifier(2) .ExpectAcknowledgement() .IsDuplicate(); Console.WriteLine(msg); byte[] actual = MessageSerializationHelper.GetMessageBytes(msg); Assert.Equal <int>(expected.Length, actual.Length); Assert.Equal <byte>(expected[0], actual[0]); // msg type of header Assert.Equal <byte>(expected[1], actual[1]); // remaining length Assert.Equal <byte>(expected[2], actual[2]); // Start of VH: MsgID Byte1 Assert.Equal <byte>(expected[3], actual[3]); // MsgID Byte 2 Assert.Equal <byte>(expected[4], actual[4]); // Topic Length B1 Assert.Equal <byte>(expected[5], actual[5]); // Topic Length B2 Assert.Equal <byte>(expected[6], actual[6]); // f Assert.Equal <byte>(expected[7], actual[7]); // r Assert.Equal <byte>(expected[8], actual[8]); // e Assert.Equal <byte>(expected[9], actual[9]); // d Assert.Equal <byte>(expected[10], actual[10]); // d }
public void BasicSerialization() { // Message Specs________________ // <E0><00> var expected = new[] { (byte)0xE0, (byte)0x00 }; MqttDisconnectMessage msg = new MqttDisconnectMessage(); Console.WriteLine(msg); byte[] actual = MessageSerializationHelper.GetMessageBytes(msg); Assert.Equal <int>(expected.Length, actual.Length); Assert.Equal <byte>(expected[0], actual[0]); // first header byte Assert.Equal <byte>(expected[1], actual[1]); // message size byte }
public void BasicSerialization() { var expected = new[] { (byte)0x70, (byte)0x02, (byte)0x0, (byte)0x4, }; MqttPublishCompleteMessage msg = new MqttPublishCompleteMessage().WithMessageIdentifier(4); Console.WriteLine(msg.ToString()); byte[] actual = MessageSerializationHelper.GetMessageBytes(msg); Assert.Equal <int>(expected.Length, actual.Length); Assert.Equal <byte>(expected[0], actual[0]); // msg type of header Assert.Equal <byte>(expected[1], actual[1]); // remaining length Assert.Equal <byte>(expected[2], actual[2]); // connect ack - compression? always empty Assert.Equal <byte>(expected[3], actual[3]); // return code. }
public void WithWillSet() { MqttConnectMessage msg = new MqttConnectMessage() .WithProtocolName("MQIsdp") .WithProtocolVersion(3) .WithClientIdentifier("mark") .KeepAliveFor(30) .StartClean() .Will() .WithWillQos(MqttQos.AtLeastOnce) .WithWillRetain() .WithWillTopic("willTopic") .WithWillMessage("willMessage"); Console.WriteLine(msg); byte[] mb = MessageSerializationHelper.GetMessageBytes(msg); Assert.Equal <byte>(0x10, mb[0]); // VH will = 12, Msg = 6 Assert.Equal <byte>(42, mb[1]); }
public void IdentifierRejected() { // our expected result var expected = new[] { (byte)0x20, (byte)0x02, (byte)0x0, (byte)0x2, }; MqttConnectAckMessage msg = new MqttConnectAckMessage().WithReturnCode(MqttConnectReturnCode.IdentifierRejected); Console.WriteLine(msg); byte[] actual = MessageSerializationHelper.GetMessageBytes(msg); Assert.Equal <int>(expected.Length, actual.Length); Assert.Equal <byte>(expected[0], actual[0]); // msg type of header Assert.Equal <byte>(expected[1], actual[1]); // remaining length Assert.Equal <byte>(expected[2], actual[2]); // connect ack - compression? always empty Assert.Equal <byte>(expected[3], actual[3]); // return code. }
private async Task <bool> LoadFromCacheAsync() { int id = 0; if (!Int32.TryParse(NavigationParameter.Command, out id)) { return(false); } var ctx = new RisDbContext(); var doc = await ctx.GetDownload(id); if (null == doc) { return(false); } try { // Rehydrate document from storage var documentResult = MessageSerializationHelper.DeserializeFromString <Ris.Client.Messages.Document.DocumentResult>(doc.OriginalDocumentResultXml); CurrentDocument = Mapper.MapDocumentResult(documentResult); CurrentDocument.OriginalDocumentResultXml = doc.OriginalDocumentResultXml; SourceHtml = doc.HtmlFromRisServer; CachedDocumentDatabaseId = doc.Id; return(CurrentDocument.Succeeded); } catch (Exception ex) { Log.Error("LoadFromCacheAsync", ex); } return(false); }
private void btnSave_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(txtMessageText.Text)) { return; } saveFileDialog.Title = SaveAsTitle; saveFileDialog.DefaultExt = JsonExtension; saveFileDialog.Filter = JsonFilter; saveFileDialog.FileName = CreateFileName(); if (saveFileDialog.ShowDialog() != DialogResult.OK || string.IsNullOrWhiteSpace(saveFileDialog.FileName)) { return; } if (File.Exists(saveFileDialog.FileName)) { File.Delete(saveFileDialog.FileName); } using (var writer = new StreamWriter(saveFileDialog.FileName)) { writer.Write(MessageSerializationHelper.Serialize(brokeredMessage, txtMessageText.Text, doNotSerializeBody: true)); } }