1 package cz.cuni.amis.pogamut.ut2004.communication.translator.bot;
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.ut2004.communication.translator.IWorldEventQueue;
14 import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorContext;
15 import cz.cuni.amis.pogamut.ut2004.communication.translator.IWorldEventQueue.Queue;
16 import cz.cuni.amis.pogamut.ut2004.communication.translator.bot.state.HelloBotExpectedState;
17 import cz.cuni.amis.pogamut.ut2004.communication.translator.itemdescriptor.ItemTranslator;
18
19
20
21
22
23
24 public class BotFSM implements IWorldMessageTranslator {
25
26 private IWorldEventQueue eventQueue = new IWorldEventQueue.Queue();
27
28 private TranslatorContext context = null;
29
30 private FSM<InfoMessage, TranslatorContext> fsm = null;
31
32 private Logger log;
33
34 @Inject
35 public BotFSM(ItemTranslator translator, IAgentLogger logger) {
36 this.log = logger.getCategory(getClass().getSimpleName());
37 context = new TranslatorContext(eventQueue, translator, log);
38 fsm = new FSM<InfoMessage, TranslatorContext>(context, HelloBotExpectedState.class, log);
39 }
40
41 @Override
42 public IWorldChangeEvent[] processMessage(InfoMessage message) throws TranslatorException {
43 fsm.push(context, message);
44 return eventQueue.popEvents();
45 }
46
47 @Override
48 public void reset() {
49 context.reset();
50 this.fsm.restart(context);
51 }
52
53 public String toString() {
54 return "BotFSM";
55 }
56
57 }