Beispiel #1
0
        public void GetMetadata_ShouldBeSuccessful(string fullMessage, SmsMetadata expectedData)
        {
            //Act
            var result = _smsParser.GetMetadata(fullMessage);

            //Assert
            result.IsFailure.ShouldBeFalse();
            result.Value.Position.ShouldNotBeNull();
            result.Value.Position.Latitude.ShouldBe(expectedData.Position.Latitude);
            result.Value.Position.Longitude.ShouldBe(expectedData.Position.Longitude);
            result.Value.Timestamp.ShouldBe(expectedData.Timestamp);
            result.Value.Radius.ShouldBe(expectedData.Radius);
            result.Value.InnerRadius.ShouldBe(expectedData.InnerRadius);
            result.Value.OuterRadius.ShouldBe(expectedData.OuterRadius);
            result.Value.OpeningAngle.ShouldBe(expectedData.OpeningAngle);
            result.Value.StartAngle.ShouldBe(expectedData.StartAngle);
        }
Beispiel #2
0
        /// <summary>
        /// Получение XML из SMS Body
        /// </summary>
        /// <param name="body"></param>
        /// <returns></returns>
        public Result <SmsMetadata> GetMetadata(string body)
        {
            var result = Parse(body, SmsXmlRegexPattern, SmsXmlRegexPatternGroupName);

            if (result.IsFailure)
            {
                _logger.Warning($"Error getting metadata from sms body. {result.ErrorMessage}");
                return(Result.Failure <SmsMetadata>(ErrorCodes.ParsingError));
            }

            var xml = result.Value;

            var doc = new XmlDocument();

            doc.LoadXml(xml);
            var root = doc.DocumentElement;


            var timestamp    = GetMetadataField(root, XmlTimestampTagName, _fieldParser.EmptyParser);
            var position     = GetMetadataField(root, XmlPositionTagName, _fieldParser.PositionParser);
            var radius       = GetMetadataField(root, XmlRadiusTagName, _fieldParser.IntParser);
            var innerRadius  = GetMetadataField(root, XmlInnerRadiusTagName, _fieldParser.IntParser);
            var outerRadius  = GetMetadataField(root, XmlOuterRadiusTagName, _fieldParser.IntParser);
            var startAngle   = GetMetadataField(root, XmlStartAngleTagName, _fieldParser.IntParser);
            var openingAngle = GetMetadataField(root, XmlOpeningAngleTagName, _fieldParser.IntParser);

            var data = new SmsMetadata()
            {
                Timestamp    = timestamp,
                Position     = position,
                Radius       = radius,
                OuterRadius  = outerRadius,
                InnerRadius  = innerRadius,
                StartAngle   = startAngle,
                OpeningAngle = openingAngle
            };

            return(Result.Success(data));
        }
        private void NotifyAboutNewSms(Guid smsId, string senderExtension, string smsText, SmsMetadata smsMetadata)
        {
            _logger.Debug($"Отправка SMS в шину. SenderExtension: {senderExtension}");

            var position = smsMetadata.Position == null
                ? null
                : new Position
            {
                Latitude  = smsMetadata.Position.Latitude,
                Longitude = smsMetadata.Position.Longitude
            };
            var smsEvent = new IncomingSmsIntegrationEvent
            {
                CallerExtension = senderExtension,
                Sms             = new Sms
                {
                    Message   = smsText,
                    Timestamp = smsMetadata.Timestamp,
                    Location  = new Location
                    {
                        InnerRadius  = smsMetadata.InnerRadius,
                        OpeningAngle = smsMetadata.OpeningAngle,
                        OuterRadius  = smsMetadata.OuterRadius,
                        Radius       = smsMetadata.Radius,
                        StartAngle   = smsMetadata.StartAngle,
                        Position     = position
                    }
                },
                SmsId = smsId
            };

            _queueSender.Publish(smsEvent);
        }