public async Task Handle(GeographicalAreaUpdated request, CancellationToken token) { _logger.LogInformation($"Starting {nameof(GeographicalAreaUpdatedHandler)}"); var envelope = _envelopeFactory.Create(request.RouteNodes, request.RouteSegment); var envelopeInfo = new EnvelopeInfo(envelope.MinX, envelope.MaxX, envelope.MinY, envelope.MaxY); var routeNodesIds = request.RouteNodes.Select(x => x.Mrid); var routeSegmentIds = request.RouteSegment.Select(x => x.Mrid); var idChangeSets = routeNodesIds.Concat(routeSegmentIds); var geographicalAreaUpdatedEvent = new ObjectsWithinGeographicalAreaUpdated( nameof(ObjectsWithinGeographicalAreaUpdated), Guid.NewGuid(), DateTime.UtcNow, _applicationSettings.ApplicationName, string.Empty, "RouteNetworkUpdated", envelopeInfo, null ); await _producer.Produce(_kafkaSettings.EventGeographicalAreaUpdated, geographicalAreaUpdatedEvent); }
private async void PublishObjectsWithinGeographicalAreaUpdatedEvent(Dictionary <Guid, IRouteNetworkElement> addedElements, Dictionary <Guid, IRouteNetworkElement> deletedElements) { List <IdChangeSet> idChangeSets = new List <IdChangeSet>(); // Only add ids, if less that 1000. This to prevent message size to big error in Kafka if ((addedElements.Count + deletedElements.Count <= 1000)) { // NB: We don't have to deal with modifications, because the element not feeded validation just produces a list of route network element ids that are not feeded if (addedElements.Count > 0) { idChangeSets.Add(new IdChangeSet("RouteElementNotFeeded", ChangeTypeEnum.Addition, addedElements.Keys.ToArray())); } if (deletedElements.Count > 0) { idChangeSets.Add(new IdChangeSet("RouteElementNotFeeded", ChangeTypeEnum.Deletion, deletedElements.Keys.ToArray())); } } // Create an envelop that covers all route network elements that have either added og deleted by the validation logic Envelope env = new Envelope(); foreach (var addedElement in addedElements.Values) { env.ExpandToInclude(addedElement.Envelope); } foreach (var deletedElement in deletedElements.Values) { env.ExpandToInclude(deletedElement.Envelope); } EnvelopeInfo envelopeInfo = new EnvelopeInfo(env.MinX, env.MaxX, env.MinY, env.MaxY); var graphicalObjectsUpdatedEvent = new ObjectsWithinGeographicalAreaUpdated( eventType: typeof(ObjectsWithinGeographicalAreaUpdated).Name, eventId: Guid.NewGuid(), eventTimestamp: DateTime.UtcNow, applicationName: "RouteNetworkValidator", applicationInfo: null, category: "RouteNetworkValidation", envelope: envelopeInfo, idChangeSets: idChangeSets.ToArray() ); await _eventProducer.Produce(_kafkaSetting.GeographicalAreaUpdatedTopic, graphicalObjectsUpdatedEvent); }
public GeographicalAreaUpdated(ObjectsWithinGeographicalAreaUpdated objectsWithinGeographicalAreaUpdated) { ObjectsWithinGeographicalAreaUpdated = objectsWithinGeographicalAreaUpdated; }