View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.communication.translator.bot.state;
2   
3   import cz.cuni.amis.fsm.FSMState;
4   import cz.cuni.amis.fsm.FSMTransition;
5   import cz.cuni.amis.fsm.IFSMState;
6   import cz.cuni.amis.pogamut.base.communication.messages.InfoMessage;
7   import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo;
8   import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.HandShakeEnd;
9   import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ItemCategoryStart;
10  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ItemListStart;
11  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.MoverListStart;
12  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.MutatorListStart;
13  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.NavPointListStart;
14  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.PlayerListStart;
15  import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorContext;
16  import cz.cuni.amis.pogamut.ut2004.communication.translator.bot.support.AbstractBotFSMState;
17  import cz.cuni.amis.pogamut.ut2004.communication.translator.bot.transition.HandshakeEndTransition;
18  import cz.cuni.amis.pogamut.ut2004.communication.translator.shared.events.MapPointListObtained;
19  import cz.cuni.amis.pogamut.ut2004.communication.translator.shared.transition.InitRequestedTransition;
20  
21  /**
22   * This state is introduced because start/end messages of the list of item categories, mutators, navpoints and players.
23   * Without this state we would have difficulties with switching between MutatorListState -> PlayerListState -> etc...<p>
24   * As there is always: ... list ... END_MSG NEW_START_MSG ... list ... the problem lies withing END_MSG and NEW_START_MSG.
25   * On END_MSG we will switch to this state and on NEW_START_MSG we will switch to the state that will handle appropriate
26   * incoming list.
27   */
28  @FSMState(
29  			map={							
30  				@FSMTransition(
31  					state=ItemCategoryState.class, 
32  					symbol={ItemCategoryStart.class}, 
33  					transition={}
34  				),				
35  				@FSMTransition(
36  					state=MutatorListState.class, 
37  					symbol={MutatorListStart.class}, 
38  					transition={}
39  				),
40  				@FSMTransition(
41  					state=MoverListState.class,
42  					symbol={MoverListStart.class},
43  					transition={}
44  				),
45  				@FSMTransition(
46  					state = NavPointListState.class, 
47  					symbol = { NavPointListStart.class }, 
48  					transition = {}
49  				),
50  				@FSMTransition(
51  					state = ItemListState.class,
52  					symbol = { ItemListStart.class },
53  					transition = {}
54  				),
55  				@FSMTransition(
56  						state = PlayerListState.class, 
57  						symbol = { PlayerListStart.class }, 
58  						transition = {}
59  				),	
60  				@FSMTransition(
61  						state = ConfigureMessageExpectedState.class,
62  						symbol = { HandShakeEnd.class },
63  						transition = {HandshakeEndTransition.class, InitRequestedTransition.class}
64  				)
65  			}
66  		 )
67  public class HandshakeControllerState extends AbstractBotFSMState<InfoMessage, TranslatorContext>{
68  
69  	@Override
70  	public void init(TranslatorContext context) {
71  	}
72  
73  	@Override
74  	public void restart(TranslatorContext context) {
75  	}
76  
77  	@Override
78  	public void stateEntering(TranslatorContext context,
79  			IFSMState<InfoMessage, TranslatorContext> fromState,
80  			InfoMessage symbol) {		
81  	}
82  
83  	@Override
84  	public void stateLeaving(TranslatorContext context,
85  			IFSMState<InfoMessage, TranslatorContext> toState, InfoMessage symbol) {		
86  	}
87  
88  	@Override
89  	public void stateSymbol(TranslatorContext context, InfoMessage symbol) {
90  		if (symbol instanceof GameInfo) {
91  			context.getEventQueue().pushEvent((GameInfo)symbol);
92  			return;
93  		}
94  	}
95  
96  }