예제 #1
0
파일: Door.cs 프로젝트: jpx/blazera
        public Door(Door copy)
            : base(copy)
        {
            Area = new IntRect(copy.Area);

            OnStateChange += new StateEventHandler(Door_OnStateChange);
        }
예제 #2
0
        public static Func <ICommand, Task> Run(CancellationToken token, Subject <IEvent> eventSubject, Action <string> logger)
        {
            const string streamName       = "hamsters";
            var          commitLog        = new MessageVaultClientAdapter(new MemoryClient(), logger);
            var          dispatcher       = new Dispatcher <ICommand, Task>();
            var          eventHandlers    = new Dispatcher <IEvent, Task>();
            var          checkpointWriter = new CheckpointWriterAdapter(new MemoryCheckpointReaderWriter());
            var          repository       = new InMemoryStateRepository <HamsterState>();
            var          streamProcessor  = new StreamProcessor(commitLog, streamName, checkpointWriter, Serialization.Deserializer(), Console.WriteLine);

            var eventLog = commitLog.ToStreamPoster(Serialization.Serializer());

            dispatcher.Register <IHamsterCommand>(
                command => ApplicationService.Execute(
                    command,
                    id => repository.GetOrCreateAsync(id),
                    state => new HamsterAggregate(state),
                    aggregate => aggregate.Handle(command),
                    eventLog.ForStream(streamName)));

            eventHandlers.Register <IEvent>(@event => StateEventHandler.ForAsync(@event, repository));

            eventSubject.Subscribe(@event => eventHandlers.Dispatch(@event).Wait(token), () => { }, token);

            streamProcessor.Run(token, @event => eventSubject.OnNext(@event));

            return(dispatcher.Dispatch);

            return(Mixins.WaitForEventsPublished(dispatcher.Dispatch, eventSubject, logger));
        }
예제 #3
0
        protected virtual void StateStatus(StateMachineEventArgs ea)
        {
            StateEventHandler handler = STEvent;

            if (handler != null)
            {
                handler(this, ea);
            }
        }
예제 #4
0
        protected virtual void OnChanged(string message)
        {
            StateEventHandler handler = Changed;

            if (handler != null)
            {
                var args = new StateEventArgs()
                {
                    Message = message
                };
                handler(this, args);
            }
        }
예제 #5
0
    public ActorState UpdateState(ActorState state)
    {
        if (m_state.Equals(ActorState.RECOVERING) &&
            state.Equals(ActorState.ATTACKING))
        {
            return(m_state);
        }
        m_state = state;

        // Notify listeners of state change
        StateEventArgs    e       = new StateEventArgs(m_state);
        StateEventHandler handler = StateEvent;

        if (handler != null)
        {
            handler(this, e);
        }

        return(m_state);
    }
예제 #6
0
 public State OnTimeout(StateEventHandler onTimeout)
 {
     OnStateTimeout = onTimeout;
     return(this);
 }
예제 #7
0
 public State OnExit(StateEventHandler onExit)
 {
     OnStateExit = onExit;
     return(this);
 }
예제 #8
0
        public State OnEnter(StateEventHandler onEnter)
        {
            OnStateEnter = onEnter;

            return(this);
        }
예제 #9
0
파일: Door.cs 프로젝트: jpx/blazera
 public Door()
     : base()
 {
     OnStateChange += new StateEventHandler(Door_OnStateChange);
 }