View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.communication.translator.observer.state;
2   
3   
4   import cz.cuni.amis.fsm.FSMState;
5   import cz.cuni.amis.fsm.FSMTransition;
6   import cz.cuni.amis.fsm.IFSMState;
7   import cz.cuni.amis.pogamut.base.communication.messages.InfoMessage;
8   import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldChangeEvent;
9   import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.HandShakeEnd;
10  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ItemCategoryStart;
11  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ItemListStart;
12  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.MapListStart;
13  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.MutatorListStart;
14  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.NavPointListStart;
15  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.PlayerListStart;
16  import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorContext;
17  import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorMessages;
18  import cz.cuni.amis.pogamut.ut2004.communication.translator.UnexpectedMessageException;
19  import cz.cuni.amis.pogamut.ut2004.communication.translator.observer.support.AbstractObserverFSMState;
20  import cz.cuni.amis.pogamut.ut2004.communication.translator.shared.events.MapPointListObtained;
21  
22  /**
23   * This class implements a batch handling logic.
24   * @author Jimmy
25   */
26  @FSMState(map = { 
27  					@FSMTransition(
28  						state=ItemCategoryState.class, 
29  						symbol={ItemCategoryStart.class}, 
30  						transition={}
31  					),				
32  					@FSMTransition(
33  						state=MutatorListState.class, 
34  						symbol={MutatorListStart.class}, 
35  						transition={}),
36  					@FSMTransition(
37  						state = NavPointListState.class, 
38  						symbol = { NavPointListStart.class }, 
39  						transition = {}
40  					),
41  					@FSMTransition(
42  						state = ItemListState.class,
43  						symbol = { ItemListStart.class },
44  						transition = {}
45  					),
46  					@FSMTransition(
47  							state = PlayerListState.class, 
48  							symbol = { PlayerListStart.class }, 
49  							transition = {}
50  					),
51                      @FSMTransition(
52  							state = MapListState.class,
53  							symbol = { MapListStart.class },
54  							transition = {}
55  					)
56  				}
57  )
58  public class ObserverRunningState extends AbstractObserverFSMState<InfoMessage, TranslatorContext> {
59  
60      @Override
61      public void stateEntering(TranslatorContext context, IFSMState<InfoMessage, TranslatorContext> arg1, InfoMessage arg2) {
62      }
63  
64      @Override
65      protected void innerStateSymbol(TranslatorContext context, InfoMessage obj) {
66          if (obj instanceof IWorldChangeEvent) {
67          	if (obj instanceof HandShakeEnd) {
68          		long simTime = ((IWorldChangeEvent)obj).getSimTime();
69          		context.getEventQueue().pushEvent(new MapPointListObtained(context.getNavPoints(), context.getItems(), simTime));
70          	} else {
71          		context.getEventQueue().pushEvent((IWorldChangeEvent) obj);
72          	}
73          } else {
74          	throw new UnexpectedMessageException(TranslatorMessages.messageNotWorldEvent(this, obj), context.getLogger(), this);
75          }
76  
77      }
78  
79      @Override
80      public void stateLeaving(TranslatorContext context, IFSMState<InfoMessage, TranslatorContext> arg1, InfoMessage symbol) {
81      }
82  
83      @Override
84      public void init(TranslatorContext arg0) {        
85      }
86  
87      @Override
88      public void restart(TranslatorContext arg0) {
89      }
90      
91  }