コード例 #1
0
ファイル: EventActivitySet.cs プロジェクト: VCuzmin/nbb
 public EventActivitySet(bool startsProcess, EventPredicate <TEvent, TData> starterPredicate = null)
 {
     StartsProcess     = startsProcess;
     _starterPredicate = starterPredicate;
     EffectFunc        = NoEffectFunc;
     SetStateFunc      = NoSetStateFunc;
 }
コード例 #2
0
ファイル: AbstractDefinition.cs プロジェクト: hfz-r/nbb
        public EventActivitySetBuilder <TEvent, TData> When <TEvent>(EventPredicate <TEvent, TData> predicate = null)
        {
            var ea = new EventActivitySet <TEvent, TData>(false, predicate);

            _eventActivities.Add(ea);
            return(new EventActivitySetBuilder <TEvent, TData>(ea));
        }
コード例 #3
0
 public PlayerCheckin(CheckinLister lister, Message checkinEvent,
                      Predicate allCheckedInPredicate = null,
                      EventPredicate checkinPredicate = null,
                      Callback onCheckin    = null,
                      Callback onReset      = null,
                      Message?checkoutEvent = null)
 {
     this.lister = lister;
     if (allCheckedInPredicate != null)
     {
         this.allCheckedInPredicate = allCheckedInPredicate;
     }
     if (checkinPredicate != null)
     {
         this.checkinPredicate = checkinPredicate;
     }
     if (onCheckin != null)
     {
         this.onCheckin = onCheckin;
     }
     if (onReset != null)
     {
         this.onReset = onReset;
     }
     GameManager.instance.notificationManager.CallOnMessageWithSender(checkinEvent, Checkin);
     if (checkoutEvent.HasValue)
     {
         GameManager.instance.notificationManager.CallOnMessageWithSender(checkoutEvent.Value, Checkout);
     }
 }
コード例 #4
0
        /// <summary>
        /// Register a job for a calendar event as specified by the <paramref name="predicate"/>
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="predicate">Predicate filter calendar events.</param>
        /// <param name="factory">Factory for creating job after a match has been found.</param>
        /// <param name="job">Job method that will be ran when event starts.</param>
        public Task RegisterEvent <T>(EventPredicate predicate, JobFactory factory, Job <T> job) where T : IJob
        {
            jobPredicates.Add(predicate);
            jobFactories.Add(factory);

            return(JobModule.RegisterJobAsync(job));
        }
コード例 #5
0
    public static PlayerCheckin TextCountCheckin(
        CheckinLister lister, Message checkinEvent,
        Text textBox, Predicate allCheckedInPredicate = null,
        EventPredicate checkinPredicate = null,
        Callback onCheckin    = null,
        Callback onReset      = null,
        Message?checkoutEvent = null)
    {
        PlayerCheckin result = new PlayerCheckin(
            lister, checkinEvent, allCheckedInPredicate,
            checkinPredicate, checkoutEvent: checkoutEvent);

        Callback modifyText = () =>
        {
            textBox.text = string.Format("{0}/{1}", result.NumberCheckedIn(), lister().Count);
        };

        onCheckin  = onCheckin ?? delegate { };
        onCheckin += modifyText;

        onReset  = onReset ?? delegate { };
        onReset += modifyText;

        result.onCheckin = onCheckin;
        result.onReset   = onReset;
        return(result);
    }
コード例 #6
0
 public EventActivitySetBuilder <TEvent, TData> RequestTimeout <T>(TimeSpan timeSpan, Func <TEvent, InstanceData <TData>, T> messageFactory,
                                                                   EventPredicate <TEvent, TData> predicate = null)
     where T : IEvent
 {
     Then((whenEvent, state) => Timeout.Request(state.InstanceId.ToString(), timeSpan, messageFactory(whenEvent, state)), predicate);
     return(this);
 }
コード例 #7
0
ファイル: AbstractDefinition.cs プロジェクト: hfz-r/nbb
        public EventActivitySetBuilder <TEvent, TData> StartWith <TEvent>(EventPredicate <TEvent, TData> predicate = null)
        {
            var ea = new EventActivitySet <TEvent, TData>(true, predicate);

            _eventActivities.Add(ea);
            return(new EventActivitySetBuilder <TEvent, TData>(ea));
        }
コード例 #8
0
 public GenericOutput <Event> EventSelect(EventPredicate eventPredicate)
 {
     if (eventPredicate != null)
     {
         eventPredicate.PersonPredicate = PersonPredicate(eventPredicate.PersonPredicate);
     }
     return(ModelData.Instance.EventSelect(eventPredicate));
 }
コード例 #9
0
 public GenericOutput <Event> EventSelect(EventPredicate eventPredicate)
 {
     return(Action("[Feed].[Event.Action]", new GenericInput <Event, EventPredicate>
     {
         ActionType = ActionType.EventSelect,
         Predicate = eventPredicate
     }));
 }
コード例 #10
0
        public Event GetEventFromSupplyToBuy(GameState gameState, EventPredicate acceptableEvent)
        {
            var saved = gameState.self;

            gameState.self = this.self;
            var result = this.playerAction.GetEventFromSupplyToBuy(gameState, acceptableEvent);

            gameState.self = saved;
            return(result);
        }
コード例 #11
0
 public void CallOnMessageIf(Message event_type, EventCallback callback,
                             EventPredicate predicate)
 {
     onMessage[event_type] += (object o) =>
     {
         if (predicate(o))
         {
             callback(o);
         }
     };
 }
コード例 #12
0
 public void CallOnMessageIf(Message event_type, EventCallback callback,
                             EventPredicate predicate, bool early = false)
 {
     if (early)
     {
         onMessage_early[event_type] += (object o) =>
         {
             if (predicate(o))
             {
                 callback(o);
             }
         };
     }
     else
     {
         onMessage[event_type] += (object o) =>
         {
             if (predicate(o))
             {
                 callback(o);
             }
         };
     }
 }
コード例 #13
0
        private async Task QueryAsync(Func <StoredEvent, Task> callback, StreamPosition lastPosition, EventFilter filterDefinition, EventPredicate filterExpression, CancellationToken ct = default)
        {
            using (Profiler.TraceMethod <MongoEventStore>())
            {
                await Collection.Find(filterDefinition, options : Batching.Options).Sort(Sort.Ascending(TimestampField)).ForEachPipelineAsync(async commit =>
                {
                    var eventStreamOffset = (int)commit.EventStreamOffset;

                    var commitTimestamp = commit.Timestamp;
                    var commitOffset    = 0;

                    foreach (var @event in commit.Events)
                    {
                        eventStreamOffset++;

                        if (commitOffset > lastPosition.CommitOffset || commitTimestamp > lastPosition.Timestamp)
                        {
                            var eventData = @event.ToEventData();

                            if (filterExpression(eventData))
                            {
                                var eventToken = new StreamPosition(commitTimestamp, commitOffset, commit.Events.Length);

                                await callback(new StoredEvent(commit.EventStream, eventToken, eventStreamOffset, eventData));
                            }
                        }

                        commitOffset++;
                    }
                }, ct);
            }
        }
コード例 #14
0
ファイル: Host.cs プロジェクト: md-zamolxis/cf-door-records
 public GenericOutput <Event> EventSelect(EventPredicate eventPredicate)
 {
     return(ModelLogic.Instance.EventSelect(eventPredicate));
 }
コード例 #15
0
 public EventActivitySetBuilder <TEvent, TData> Then(EffectFunc <TEvent, TData> func, EventPredicate <TEvent, TData> predicate = null)
 {
     _eventActivitySet.AddEffectHandler((whenEvent, data) =>
     {
         if (predicate != null && !predicate(whenEvent, data))
         {
             return(Effect.Pure());
         }
         return(func(whenEvent, data));
     });
     return(this);
 }
コード例 #16
0
 public EventActivitySetBuilder <TEvent, TData> SetState(SetStateFunc <TEvent, TData> func, EventPredicate <TEvent, TData> predicate = null)
 {
     _eventActivitySet.AddSetStateHandler((whenEvent, data) =>
     {
         if (predicate != null && !predicate(whenEvent, data))
         {
             return(data.Data);
         }
         return(func(whenEvent, data));
     });
     return(this);
 }
コード例 #17
0
ファイル: EventActivitySet.cs プロジェクト: VCuzmin/nbb
 public void UseForCompletion(EventPredicate <TEvent, TData> predicate = null)
 {
     _completionPredicate = predicate;
     CompletesProcess     = true;
 }
コード例 #18
0
 virtual public Event GetEventFromSupplyToBuy(GameState gameState, EventPredicate eventPredicate)
 {
     return(NoEvent());
 }
コード例 #19
0
 public EventActivitySetBuilder <TEvent, TData> SendCommand <T>(Func <TEvent, InstanceData <TData>, T> handler, EventPredicate <TEvent, TData> predicate = null)
     where T : ICommand
 {
     Then((whenEvent, state) =>
     {
         var command = handler(whenEvent, state);
         return(MessageBus.Publish(command));
     }, predicate);
     return(this);
 }
コード例 #20
0
 public virtual Event GetEventFromSupplyToBuy(GameState gameState, EventPredicate acceptableCard)
 {
     return(this.playerAction.GetEventFromSupplyToBuy(gameState, acceptableCard));
 }
コード例 #21
0
        private async Task QueryAsync(Func <StoredEvent, Task> callback, StreamPosition lastPosition, SqlQuerySpec query, EventPredicate filterExpression, CancellationToken ct = default)
        {
            using (Profiler.TraceMethod <CosmosDbEventStore>())
            {
                await documentClient.QueryAsync(collectionUri, query, async commit =>
                {
                    var eventStreamOffset = (int)commit.EventStreamOffset;

                    var commitTimestamp = commit.Timestamp;
                    var commitOffset    = 0;

                    foreach (var @event in commit.Events)
                    {
                        eventStreamOffset++;

                        if (commitOffset > lastPosition.CommitOffset || commitTimestamp > lastPosition.Timestamp)
                        {
                            var eventData = @event.ToEventData();

                            if (filterExpression(eventData))
                            {
                                var eventToken = new StreamPosition(commitTimestamp, commitOffset, commit.Events.Length);

                                await callback(new StoredEvent(commit.EventStream, eventToken, eventStreamOffset, eventData));
                            }
                        }

                        commitOffset++;
                    }
                }, ct);
            }
        }
コード例 #22
0
 public void Complete(EventPredicate <TEvent, TData> predicate = null)
 {
     _eventActivitySet.UseForCompletion(predicate);
     Then((whenEvent, state) => Timeout.Cancel(state.InstanceId.ToString()), predicate);
 }
コード例 #23
0
 public EventActivitySetBuilder <TEvent, TData> PublishEvent <T>(Func <TEvent, InstanceData <TData>, T> handler, EventPredicate <TEvent, TData> predicate = null)
     where T : IEvent
 {
     Then((whenEvent, state) =>
     {
         var @event = handler(whenEvent, state);
         return(MessageBus.Publish(@event));
     }, predicate);
     return(this);
 }