コード例 #1
0
ファイル: Program.cs プロジェクト: CedarLogic/NRules
        static void Main(string[] args)
        {
            var repository = new RuleRepository();
            repository.Load("Test", x => x.From(typeof(AssignFirstSeat).Assembly));

            var factory = repository.Compile();
            var session = factory.CreateSession();
            session.Events.FactInsertedEvent += EventProviderOnFactInsertedEvent;
            session.Events.FactUpdatedEvent += EventProviderOnFactUpdatedEvent;
            session.Events.FactRetractedEvent += EventProviderOnFactRetractedEvent;
            session.Events.ActivationCreatedEvent += EventProviderOnActivationCreatedEvent;
            session.Events.ActivationDeletedEvent += EventProviderOnActivationDeletedEvent;
            session.Events.RuleFiringEvent += EventProviderOnRuleFiringEvent;

            session.Insert(new Guest("N1", Gender.Male, new Hobby("H1")));
            session.Insert(new Guest("N2", Gender.Female, new Hobby("H1")));
            session.Insert(new Guest("N2", Gender.Female, new Hobby("H3")));
            session.Insert(new Guest("N3", Gender.Male, new Hobby("H3")));
            session.Insert(new Guest("N4", Gender.Male, new Hobby("H1")));
            session.Insert(new Guest("N4", Gender.Female, new Hobby("H2")));
            session.Insert(new Guest("N4", Gender.Female, new Hobby("H3")));
            session.Insert(new Guest("N5", Gender.Female, new Hobby("H2")));
            session.Insert(new Guest("N5", Gender.Female, new Hobby("H1")));
            session.Insert(new Count(1));
            session.Insert(new LastSeat(5));

            var context = new Context();
            session.Insert(context);

            session.Fire();
        }
コード例 #2
0
ファイル: AssignFirstSeat.cs プロジェクト: CedarLogic/NRules
        private void AssignSeat(IContext ctx, Context context, Guest guest, Count count)
        {
            var cnt = count.Value;

            var seating = new Seating(cnt, 0, true, 1, guest.Name, 1, guest.Name);
            ctx.Insert(seating);

            var path = new Path(cnt, 1, guest.Name);
            ctx.Insert(path);

            count.Increment();
            ctx.Update(count);

            context.SetState(ContextState.AssignSeats);
            ctx.Update(context);
        }
コード例 #3
0
ファイル: FindSeating.cs プロジェクト: CedarLogic/NRules
        private void AssignSeat(IContext ctx, Context context, Seating seating, Guest guest1, Guest guest2, Count count)
        {
            int rightSeat = seating.RightSeatId;
            int seatId = seating.Id;
            int cnt = count.Value;

            var newSeating = new Seating(cnt, seatId, false, rightSeat, seating.RightGuestName, rightSeat + 1, guest2.Name);
            ctx.Insert(newSeating);

            var path = new Path(cnt, rightSeat + 1, guest2.Name);
            ctx.Insert(path);

            var chosen = new Chosen(seatId, guest2.Name, guest1.Hobby);
            ctx.Insert(chosen);

            count.Increment();
            ctx.Update(count);

            context.SetState(ContextState.MakePath);
            ctx.Update(context);
        }