Пример #1
0
        private void Project(IEventEnvelope eventEnvelope)
        {
            switch (eventEnvelope.Data)
            {
            case (WalkOfInterestRegistered @event):
                _interestById.TryAdd(@event.Interest.Id, @event.Interest);
                _interestIndex.Add(@event.Interest);
                break;

            case (NodeOfInterestRegistered @event):
                _interestById[@event.Interest.Id] = @event.Interest;
                _interestIndex.Add(@event.Interest);
                break;

            case (WalkOfInterestRouteNetworkElementsModified @event):
                if (_interestById.TryGetValue(@event.InterestId, out var existingInterestToModify))
                {
                    var updatedInterest = existingInterestToModify with {
                        RouteNetworkElementRefs = @event.RouteNetworkElementIds
                    };
                    _interestById.TryUpdate(@event.InterestId, updatedInterest, existingInterestToModify);
                    _interestIndex.Update(updatedInterest, existingInterestToModify);
                }
                break;

            case (InterestUnregistered @event):
                if (_interestById.TryGetValue(@event.InterestId, out var existingInterestToUnregister))
                {
                    _interestById.TryRemove(@event.InterestId, out _);
                    _interestIndex.Remove(existingInterestToUnregister);
                }
                break;
            }
        }
Пример #2
0
        public void TestUpdatingIndex()
        {
            InMemInterestRelationIndex index = new InMemInterestRelationIndex();

            var routeElement1 = Guid.NewGuid();
            var routeElement2 = Guid.NewGuid();
            var routeElement3 = Guid.NewGuid();
            var routeElement4 = Guid.NewGuid();

            // Create a walk of interest spanning the first 3 route network elements
            var walkOfInterest = new RouteNetworkInterest(Guid.NewGuid(), RouteNetworkInterestKindEnum.WalkOfInterest, new RouteNetworkElementIdList()
            {
                routeElement1, routeElement2, routeElement3
            });

            index.Add(walkOfInterest);

            // Create a walk of interest spanning the last 3 route network elements
            var updatedWalkOfInterest = new RouteNetworkInterest(walkOfInterest.Id, RouteNetworkInterestKindEnum.WalkOfInterest, new RouteNetworkElementIdList()
            {
                routeElement2, routeElement3, routeElement4
            });

            index.Update(updatedWalkOfInterest, walkOfInterest);

            var routeElement1InterestRelations = index.GetRouteNetworkElementInterestRelations(routeElement1);
            var routeElement2InterestRelations = index.GetRouteNetworkElementInterestRelations(routeElement2);
            var routeElement3InterestRelations = index.GetRouteNetworkElementInterestRelations(routeElement3);
            var routeElement4InterestRelations = index.GetRouteNetworkElementInterestRelations(routeElement4);

            // Assert

            // Route element 1 has no relation to the interest
            Assert.Empty(routeElement1InterestRelations);

            // Route element 2 has a start relation to the interest
            Assert.Single(routeElement2InterestRelations);
            Assert.Equal(walkOfInterest.Id, routeElement2InterestRelations[0].Item1);
            Assert.Equal(RouteNetworkInterestRelationKindEnum.Start, routeElement2InterestRelations[0].Item2);

            // Route element 3 has a passthroug relation to the interest
            Assert.Single(routeElement3InterestRelations);
            Assert.Equal(walkOfInterest.Id, routeElement3InterestRelations[0].Item1);
            Assert.Equal(RouteNetworkInterestRelationKindEnum.PassThrough, routeElement3InterestRelations[0].Item2);

            // Route element 4 has an end relation to the interest
            Assert.Single(routeElement4InterestRelations);
            Assert.Equal(walkOfInterest.Id, routeElement4InterestRelations[0].Item1);
            Assert.Equal(RouteNetworkInterestRelationKindEnum.End, routeElement4InterestRelations[0].Item2);
        }