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
18
19
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
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 }