コード例 #1
0
        public bool consumeEvent(IEvent e)
        {
            if (currentState.getTransitionableState().Keys.Contains(e.getEventName()))
            {
                LOG.Info("Consuming game event name=" + e.getEventName());
                this.currentState = (IGameState)this.currentState.getTransitionableState()[e.getEventName()];
                this.currentState.run(e);
                return true;
            }
            else if (currentState.isSubmachineEvent(e))
            {
                // Transport event to submachine like PlayerMachine or BoardMachine
                LOG.Info("Transport submachine event with name=" + e.getEventName());
                try
                {
                    currentState.submachineConsumeEvent(e);
                }
                catch (EventNotAcceptableException ex)
                {
                    return false;
                }
                return true;
            }
            else
            {
                // Reject unvalid event
                LOG.Info("Unvalid event in current state (" + this.currentState.getStateName() + ") event name=" + e.getEventName());
                return false;
            }

        }
コード例 #2
0
 public bool consumeEvent(IEvent e)
 {
     if (currentState.getTransitionableState().Keys.Contains(e.getEventName()))
     {
         currentState = currentState.getTransitionableState()[e.getEventName()];
         currentState.run(e);
     }
     else
     {
         LOG.Error("Unexcepted event occur: " + e.getEventName());
     }
     return true;
 }
コード例 #3
0
        public void run(IEvent e)
        {
            MovingNotify notify = new MovingNotify();
            this.boardMachine.fireStateChangedNotification(notify);

            LOG.Info(NAME);
            if (e.GetType().Equals(typeof(BoardMoveEvent)))
            {
                bool accepted = false;
                Position cPos = ((BoardMoveEvent)e).getCurrentPosition();
                Position nPos = ((BoardMoveEvent)e).getNextPosition();
                Piece p = this.boardMachine.getBoard().getPieces()[cPos.getRow(), cPos.getCol()];
                if (p != null && p.getValidNextPositions().Contains(nPos))
                {
                    accepted = true;
                }

                if (accepted)
                {
                    LOG.Info("Old: \n" + this.boardMachine.getBoard().ToString());

                    // Set current Position is null after moved
                    this.boardMachine.getBoard().getPieces()[cPos.getRow(), cPos.getCol()] = null;

                    // Move piece selected to new position
                    this.boardMachine.getBoard().getPieces()[nPos.getRow(), nPos.getCol()] = p;
                    LOG.Info("New: \n" + this.boardMachine.getBoard().ToString());

                    // Also process "movedEvent" (don't reject) to change to state "moved"
                    this.boardMachine.consumeEvent(new BoardMovedEvent());
                }
                else // Different casual, consume event "RejectEvent" to comeback to ready event
                {
                    this.boardMachine.consumeEvent(new BoardRejectEvent());
                    LOG.Info("Rejected move from: " + cPos.ToString() + " to: " + nPos.ToString());
                }
            }
            else
            {
                LOG.Error("Receive unexpected event, name: " + e.getEventName());
            }
        }
コード例 #4
0
        public void submachineConsumeEvent(IEvent e)
        {
            LOG.Info("Consuming event '" + e.getEventName() + "'");
            if (e.GetType().Equals(typeof(BoardMoveEvent)))
            {
                LOG.Info("Processing move event");
                BoardMoveEvent _e = ((BoardMoveEvent)e);
                int pid = _e.getPid();
                Position currentPosition = _e.getCurrentPosition();
                Position nextPosition = _e.getNextPosition();
                Piece selectionPiece = this.gameStateMachine.getBoardMachine().getBoard().
                    getPieces()[currentPosition.getRow(), currentPosition.getCol()];

                LOG.Info("Selection piece: " + selectionPiece.getColor());
                if (this.gameStateMachine.getPlayers()[pid].getListPieces().Contains(selectionPiece))
                {

                    this.gameStateMachine.getBoardMachine().consumeEvent(e);

                }
            }

        }
コード例 #5
0
 public bool consumeEvent(IEvent e)
 {
     if (currentState.getTransitionableState().Keys.Contains(e.getEventName()))
     {
         LOG.Info("Consume event '" + e.getEventName() + "'");
         // Get next state
         currentState = currentState.getTransitionableState()[e.getEventName()];
         currentState.run(e);
         return true;
     }
     else
     {
         LOG.Error("Unexpected event occur: " + e.getEventName());
         throw new EventNotAcceptableException(e.getEventName()
             + " not acceptable in '" + currentState.getStateName() + "'");
     }
 }