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