Esempio n. 1
0
        public static IEnumerable <TestCaseData> ProjectMessageWithoutTokenCases()
        {
            var task = TaskFactory();
            //Match
            var message1 = new object();
            var handler1 = new ProjectionHandler <CallRecordingConnection>(
                typeof(object),
                (connection, message, token) =>
            {
                connection.RecordCall(1, message, token);
                return(task);
            });
            var resolver1 = new ProjectionHandlerResolver <CallRecordingConnection>(message => new[] { handler1 });

            yield return(new TestCaseData(
                             resolver1,
                             message1,
                             new[]
            {
                new Tuple <int, object, CancellationToken>(1, message1, CancellationToken.None),
            }));

            //Mismatch
            var message2  = new object();
            var resolver2 = new ProjectionHandlerResolver <CallRecordingConnection>(message => new ProjectionHandler <CallRecordingConnection> [0]);

            yield return(new TestCaseData(
                             resolver2,
                             message2,
                             new Tuple <int, object, CancellationToken> [0]));

            //Multimatch
            var message3 = new object();
            var handler3 = new ProjectionHandler <CallRecordingConnection>(
                typeof(object),
                (connection, message, token) =>
            {
                connection.RecordCall(3, message, token);
                return(task);
            });
            var handler4 = new ProjectionHandler <CallRecordingConnection>(
                typeof(object),
                (connection, message, token) =>
            {
                connection.RecordCall(4, message, token);
                return(task);
            });
            var resolver3 = new ProjectionHandlerResolver <CallRecordingConnection>(message => new[] { handler3, handler4 });

            yield return(new TestCaseData(
                             resolver3,
                             message3,
                             new[]
            {
                new Tuple <int, object, CancellationToken>(3, message3, CancellationToken.None),
                new Tuple <int, object, CancellationToken>(4, message3, CancellationToken.None)
            }));
        }
            public void Handle(ProjectionHandler <TMessage> projectionHandler)
            {
                while (_pipes.Count > 0)
                {
                    var pipe = _pipes.Pop();
                    projectionHandler = pipe(projectionHandler);
                }

                _registerHandler(new ProjectionHandlerRegistration(typeof(ProjectionHandler <TMessage>), projectionHandler));
            }
 private void SetMembers(EngineManager engineState)
 {
     this.EngineState    = engineState;
     AreaCompPolyHandler = new AreaCompPolyHandler(EngineState);
     DefCompPolyHandler  = new DefinitiveCompPolyHandler(EngineState);
     _entityBuilder      = new EntityBuilder(this);
     BumpersHandler      = new BumpersHandler(this);
     _rocketsHandler     = new RocketsHandler(this);
     ProjectionHandler   = new ProjectionHandler(this);
 }
        public void ParametersArePreservedAsProperties()
        {
            var message = typeof(object);
            Func <object, object, CancellationToken, Task> handler = (_, __, ___) => Task.FromResult <object>(null);

            var sut = new ProjectionHandler <object>(message, handler);

            Assert.That(sut.Message, Is.EqualTo(message));
            Assert.That(sut.Handler, Is.EqualTo(handler));
        }
Esempio n. 5
0
        public void ComposeProjectionHandlers()
        {
            // Compose projection handlers, which save snapshots of the projections to our store, improving performance when we have many events
            var invProjectionHandler = new ProjectionHandler <InventoryItemListProjection>(new ProjectionRepository <InventoryItemListProjection>(new ReadEventStore(EventStorage), InventoryItemListProjectionStore));

            Mediator.RegisterHandler <InventoryItemCreated>(invProjectionHandler.Handle);
            var invDetailProjectionHandler = new ProjectionHandler <InventoryItemDetailsProjection>(new ProjectionRepository <InventoryItemDetailsProjection>(new ReadEventStore(EventStorage), InventoryItemDetailsProjectionStore));

            Mediator.RegisterHandler <InventoryItemCreated>(invDetailProjectionHandler.Handle);
            Mediator.RegisterHandler <ItemsCheckedInToInventory>(invDetailProjectionHandler.Handle);
        }
Esempio n. 6
0
        public void HandlersAreCopiedOnConstruction()
        {
            var handler1 = new ProjectionHandler <object>(
                typeof(object),
                (_, __, ___) => TaskFactory());
            var handler2 = new ProjectionHandler <object>(
                typeof(object),
                (_, __, ___) => TaskFactory());
            var sut = new AnonymousProjectionBuilder <object>(new[]
            {
                handler1,
                handler2
            });

            var result = sut.Build();

            Assert.That(result, Is.EquivalentTo(new[]
            {
                handler1, handler2
            }));
        }
Esempio n. 7
0
        public static List <List <IntPoint> > GetDelPolysOfMe(BumperEntityPoly me, List <CompEntityPoly> adders)
        {
            List <List <IntPoint> > allDels = new List <List <IntPoint> >();

            if (adders == null)
            {
                return(allDels);
            }
            if (adders.Count == 0)
            {
                return(allDels);
            }

            foreach (CompEntityPoly adder in adders)
            {
                if (adder != me)
                {
                    //if (!(compEntityPoly is BumperEntityPoly))
                    {
                        List <List <IntPoint> > newDelPolys = new List <List <IntPoint> >();

                        if (adder is BumperEntityPoly)
                        {
                            var adderBump = adder as BumperEntityPoly;
                            if (EntraSolver.IsPolyOperation(me.GetDefPoly(),
                                                            adderBump.GetAreaPoly(),
                                                            ClipType.ctIntersection))
                            {
                                newDelPolys =
                                    me.EntraAgentSimple.ProjectionHandler.ProjectCompOntoBumper(
                                        adderBump.PositionXNACenter2D, me);
                                EntraDrawer.DrawIntoFile(newDelPolys);
                            }
                        }
                        else
                        {
                            if (EntraSolver.IsPolyOperation(me.GetDefPoly(),
                                                            adder.GetAreaPoly(), ClipType.ctIntersection))
                            {
                                newDelPolys =
                                    me.EntraAgentSimple.ProjectionHandler.ProjectCompOntoBumper(
                                        adder.PositionXNACenter2D, me);
                                EntraDrawer.DrawIntoFile(newDelPolys);

                                if (adder is RocketEntityPoly)
                                {
                                    var rocket = adder as RocketEntityPoly;
                                    ProjectionHandler.ReAddRocketTrajectoryMissingAreas(
                                        rocket,
                                        me, ref newDelPolys);
                                    var dir = (rocket.CompObj as RocketCarrierService).Dir;
                                    if (dir == Direction.North ||
                                        dir == Direction.NorthEast ||
                                        dir == Direction.NorthWest)
                                    {
                                        newDelPolys = new List <List <IntPoint> >();
                                    }
                                }
                                else
                                {
                                    if (adder is RopeEntityPoly)
                                    {
                                        List <BumperEntityPoly> allBumps =
                                            me.EntraAgentSimple.AllCompsEntities.FindAll(delegate(CompEntityPoly obj)
                                                                                         { return(obj is BumperEntityPoly); })
                                            .ConvertAll(input => input as BumperEntityPoly);

                                        List <List <BumperEntityPoly> > groups =
                                            BumpersHandler.GroupizeCloseBumpers(allBumps);

                                        if (IsBumperCloseToAnother(me, allBumps))
                                        {
                                            if (IsOnCutSide(me, adder as RopeEntityPoly, groups) || groups.Count == 0)
                                            {
                                                ProjectionHandler.ReAddBlowerBubbleRopeTrajectoryMissingAreas(
                                                    adder.PositionXNACenter2D,
                                                    me, ref newDelPolys);
                                            }
                                            else

                                            {
                                                var bumperCutSide = FindCutSideBumper(me,
                                                                                      adder as
                                                                                      RopeEntityPoly,
                                                                                      groups);
                                                if (bumperCutSide != null)
                                                {
                                                    ProjectionHandler.ReAddInverseCutPolygon(
                                                        adder.PositionXNACenter2D,
                                                        bumperCutSide, ref newDelPolys);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            ProjectionHandler.ReAddBlowerBubbleRopeTrajectoryMissingAreas(
                                                adder.PositionXNACenter2D,
                                                me, ref newDelPolys);
                                        }
                                    }
                                    else
                                    {
                                        ProjectionHandler.ReAddBlowerBubbleRopeTrajectoryMissingAreas(
                                            adder.PositionXNACenter2D,
                                            me, ref newDelPolys);
                                    }
                                }
                            }
                        }
                        EntraDrawer.DrawIntoFile(newDelPolys);
                        allDels.AddRange(newDelPolys);
                        //result = BumpersHandler.GetDelPolysIntersection(result);
                        //if (result == null)
                        //{
                        //    result = new List<List<IntPoint>>();
                        //}
                    }
                }
            }
            allDels = BumpersHandler.GetDelPolysIntersection(allDels) ?? new List <List <IntPoint> >();
            return(allDels);
        }
Esempio n. 8
0
        public static IEnumerable <TestCaseData> ProjectMessagesWithoutTokenCases()
        {
            var task = TaskFactory();
            //Partial match
            var handler1 = new ProjectionHandler <CallRecordingConnection>(
                typeof(string),
                (connection, message, token) =>
            {
                connection.RecordCall(1, message, token);
                return(task);
            });
            var resolver1 = Resolve.WhenEqualToHandlerMessageType(new[] { handler1 });

            yield return(new TestCaseData(
                             resolver1,
                             new object[] { "123", 123 },
                             new[]
            {
                new Tuple <int, object, CancellationToken>(1, "123", CancellationToken.None)
            }));

            //Mismatch
            var resolver2 = Resolve.WhenEqualToHandlerMessageType(new ProjectionHandler <CallRecordingConnection> [0]);

            yield return(new TestCaseData(
                             resolver2,
                             new object[] { new object(), 123 },
                             new Tuple <int, object, CancellationToken> [0]));

            //Multimatch
            var message3 = new object();
            var message4 = new object();
            var handler3 = new ProjectionHandler <CallRecordingConnection>(
                typeof(object),
                (connection, message, token) =>
            {
                connection.RecordCall(1, message, token);
                return(task);
            });
            var handler4 = new ProjectionHandler <CallRecordingConnection>(
                typeof(object),
                (connection, message, token) =>
            {
                connection.RecordCall(2, message, token);
                return(task);
            });
            var resolver3 = Resolve.WhenEqualToHandlerMessageType(new[] { handler3, handler4 });

            yield return(new TestCaseData(
                             resolver3,
                             new object[] { message3, message4 },
                             new[]
            {
                new Tuple <int, object, CancellationToken>(1, message3, CancellationToken.None),
                new Tuple <int, object, CancellationToken>(2, message3, CancellationToken.None),
                new Tuple <int, object, CancellationToken>(1, message4, CancellationToken.None),
                new Tuple <int, object, CancellationToken>(2, message4, CancellationToken.None)
            }));

            //Multitype Match
            var handler5 = new ProjectionHandler <CallRecordingConnection>(
                typeof(string),
                (connection, message, token) =>
            {
                connection.RecordCall(1, message, token);
                return(task);
            });
            var handler6 = new ProjectionHandler <CallRecordingConnection>(
                typeof(int),
                (connection, message, token) =>
            {
                connection.RecordCall(2, message, token);
                return(task);
            });
            var resolver4 = Resolve.WhenEqualToHandlerMessageType(new[] { handler5, handler6 });

            yield return(new TestCaseData(
                             resolver4,
                             new object[] { "123", 123 },
                             new[]
            {
                new Tuple <int, object, CancellationToken>(1, "123", CancellationToken.None),
                new Tuple <int, object, CancellationToken>(2, 123, CancellationToken.None)
            }));

            //Match
            var message5 = new object();
            var handler7 = new ProjectionHandler <CallRecordingConnection>(
                typeof(object),
                (connection, message, token) =>
            {
                connection.RecordCall(1, message, token);
                return(task);
            });
            var handler8 = new ProjectionHandler <CallRecordingConnection>(
                typeof(object),
                (connection, message, token) =>
            {
                connection.RecordCall(2, message, token);
                return(task);
            });

            var resolver5 = Resolve.WhenEqualToHandlerMessageType(new[] { handler7, handler8 });

            yield return(new TestCaseData(
                             resolver5,
                             new object[] { message5 },
                             new[]
            {
                new Tuple <int, object, CancellationToken>(1, message5, CancellationToken.None),
                new Tuple <int, object, CancellationToken>(2, message5, CancellationToken.None)
            }));
        }