View Javadoc

1   package cz.cuni.amis.pogamut.usar2004.communication.translator;
2   
3   import java.util.logging.Logger;
4   
5   import com.google.inject.Inject;
6   
7   import cz.cuni.amis.fsm.FSM;
8   import cz.cuni.amis.pogamut.base.communication.messages.InfoMessage;
9   import cz.cuni.amis.pogamut.base.communication.translator.IWorldMessageTranslator;
10  import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldChangeEvent;
11  import cz.cuni.amis.pogamut.base.communication.translator.exception.TranslatorException;
12  import cz.cuni.amis.pogamut.base.utils.logging.IAgentLogger;
13  import cz.cuni.amis.pogamut.usar2004.communication.translator.state.DefaultState;
14  
15  
16  /**
17   * BotFSM is wrapper for the FSM instance that uses states from cz.cuni.amis.pogamut.ut2004.communication.translator.bot package.
18   *
19   * @author Jimmy
20   */
21  public class USARBotFSM implements IWorldMessageTranslator {
22  
23  	private IWorldEventQueue eventQueue = new IWorldEventQueue.Queue();
24  
25  	private USARTranslatorContext context = null;
26  
27  	private FSM<InfoMessage, USARTranslatorContext> fsm = null;
28  
29  	private Logger log;
30  
31  	@Inject
32  	public USARBotFSM(IAgentLogger logger) {
33  		this.log = logger.getCategory(getClass().getSimpleName());
34  		context = new USARTranslatorContext(eventQueue, log);
35                  //TODO create protocol states
36  		fsm = new FSM<InfoMessage, USARTranslatorContext>(context, DefaultState.class, log);
37  	}
38  
39  	@Override
40  	public IWorldChangeEvent[] processMessage(InfoMessage message) throws TranslatorException {
41  		fsm.push(context, message);
42  		return eventQueue.popEvents();
43  	}
44  
45  	@Override
46  	public void reset() {
47  		context.reset();
48  		this.fsm.restart(context);
49  	}
50  
51      @Override
52  	public String toString() {
53  		return "USARBotFSM";
54  	}
55  
56  }