Пример #1
0
        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);
                }
        }
Пример #2
0
        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()));
            }
        }
Пример #3
0
 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);
     }
 }
Пример #4
0
        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;
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
        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
        }
Пример #7
0
        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]); // !
        }
Пример #8
0
        public void BasicSerialization()
        {
            MqttPingRequestMessage pingReqMsg = new MqttPingRequestMessage();

            byte[] bytes = MessageSerializationHelper.GetMessageBytes(pingReqMsg);

            Assert.Equal <byte>(192, bytes[0]);
        }
Пример #9
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)
        }
Пример #10
0
        /// <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);
        }
Пример #11
0
        /// <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);
        }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }
Пример #14
0
        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}");
            }
        }
Пример #15
0
        /// <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);
                }
        }
Пример #16
0
        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]);
        }
Пример #17
0
        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}");
            }
        }
Пример #18
0
        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);
                }
        }
Пример #19
0
        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}");
            }
        }
Пример #20
0
        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}");
            }
        }
Пример #21
0
        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()));
            }
        }
Пример #22
0
        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
        }
Пример #23
0
        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
        }
Пример #24
0
        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
        }
Пример #25
0
        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.
        }
Пример #26
0
        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]);
        }
Пример #27
0
        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.
        }
Пример #28
0
        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);
        }
Пример #29
0
 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));
     }
 }