View Javadoc

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  }