View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.factory.direct.remoteagent;
2   
3   import java.util.logging.Level;
4   
5   import cz.cuni.amis.pogamut.base.communication.command.IAct;
6   import cz.cuni.amis.pogamut.base.communication.command.ICommandSerializer;
7   import cz.cuni.amis.pogamut.base.communication.command.impl.Act;
8   import cz.cuni.amis.pogamut.base.communication.command.impl.StringCommandSerializer;
9   import cz.cuni.amis.pogamut.base.communication.connection.impl.socket.ISocketConnectionAddress;
10  import cz.cuni.amis.pogamut.base.communication.connection.impl.socket.SocketConnection;
11  import cz.cuni.amis.pogamut.base.communication.mediator.IMediator;
12  import cz.cuni.amis.pogamut.base.communication.mediator.impl.Mediator;
13  import cz.cuni.amis.pogamut.base.communication.parser.IWorldMessageParser;
14  import cz.cuni.amis.pogamut.base.communication.parser.impl.yylex.IYylexObserver;
15  import cz.cuni.amis.pogamut.base.communication.translator.IWorldMessageTranslator;
16  import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldChangeEventOutput;
17  import cz.cuni.amis.pogamut.base.communication.translator.impl.WorldMessageTranslator;
18  import cz.cuni.amis.pogamut.base.component.bus.ComponentBus;
19  import cz.cuni.amis.pogamut.base.component.bus.IComponentBus;
20  import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencies;
21  import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencyType;
22  import cz.cuni.amis.pogamut.base.factory.IAgentFactory;
23  import cz.cuni.amis.pogamut.base.utils.logging.AgentLogger;
24  import cz.cuni.amis.pogamut.ut2004.agent.params.UT2004AgentParameters;
25  import cz.cuni.amis.pogamut.ut2004.communication.messages.UnrealIdTranslator;
26  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.Yylex;
27  import cz.cuni.amis.pogamut.ut2004.communication.parser.UT2004Parser;
28  import cz.cuni.amis.pogamut.ut2004.communication.translator.itemdescriptor.ItemTranslator;
29  import cz.cuni.amis.pogamut.ut2004.communication.translator.server.ServerFSM;
30  import cz.cuni.amis.pogamut.ut2004.communication.worldview.UT2004WorldView;
31  import cz.cuni.amis.pogamut.ut2004.factory.guice.remoteagent.UT2004ServerModule;
32  import cz.cuni.amis.pogamut.ut2004.server.impl.UT2004Server;
33  import cz.cuni.amis.utils.exception.PogamutException;
34  
35  /**
36   * Factory that uses direct instantiation (plain old Java style) of the {@link UT2004Server} class.
37   * <p><p>
38   * Can't be used to instantiate other classes!
39   * <p><p>
40   * If you need to instantiate own {@link UT2004Server} descendant, use {@link cz.cuni.amis.pogamut.ut2004.factory.guice.remoteagent.UT2004ServerFactory}
41   * and define own descendant of {@link UT2004ServerModule}.
42   * @author Jimmy
43   *
44   * @param <PARAMS>
45   */
46  public class UT2004ServerFactory<PARAMS extends UT2004AgentParameters> implements IAgentFactory<UT2004Server, PARAMS>{
47  	
48  	@Override
49  	public UT2004Server newAgent(PARAMS agentParameters) throws PogamutException {		
50  		// setup logger
51          AgentLogger logger = new AgentLogger(agentParameters.getAgentId());
52  
53          // Since default agent logger doesn't write anything, platform can be exposed to silent fail
54          // i.e. RuntimeException that is thrown, something happens and whole thing stops working
55          // without user knowing what the error message was.
56          logger.setLevel(Level.SEVERE);
57          logger.addDefaultConsoleHandler();
58          
59          IComponentBus eventBus = new ComponentBus(logger);
60  
61          ///////////////////////////////
62          ///      WORLD -> AGENT     ///
63          ///////////////////////////////
64          
65          // create connection to the world
66          SocketConnection socketConnection = new SocketConnection((ISocketConnectionAddress)agentParameters.getWorldAddress(), new ComponentDependencies(ComponentDependencyType.STARTS_WITH).add(agentParameters.getAgentId()), eventBus, logger);
67          
68          UnrealIdTranslator unrealIdTranslator = new UnrealIdTranslator();
69          ItemTranslator itemTranslator = new ItemTranslator();
70          
71          // parser for translating text messages into Java objects
72          IWorldMessageParser parser = new UT2004Parser(unrealIdTranslator, itemTranslator, socketConnection, new Yylex(), new IYylexObserver.LogObserver(logger), eventBus, logger);
73  
74          // translates sets of messages wrapped in Java objects into agregared messages
75          IWorldMessageTranslator messageTranslator = new ServerFSM(itemTranslator, logger);
76          IWorldChangeEventOutput producer = new WorldMessageTranslator(parser, messageTranslator, eventBus, logger);
77  
78          IMediator mediator = new Mediator(producer, eventBus, logger);
79          
80          UT2004WorldView worldView = new UT2004WorldView(new ComponentDependencies(ComponentDependencyType.STARTS_WITH).add(agentParameters.getAgentId()), mediator, eventBus, logger);
81          
82          ///////////////////////////////
83          ///      AGENT -> WORLD     ///
84          ///////////////////////////////
85  
86          ICommandSerializer<String> commandSerializer = new StringCommandSerializer();
87          IAct act = new Act(socketConnection, commandSerializer, eventBus, logger);
88          
89          ///////////////////////////////
90          ///   AGENT INITIALIZATION  ///
91          ///////////////////////////////
92          
93          UT2004Server server = new UT2004Server(agentParameters, logger, eventBus, socketConnection, worldView, act);        
94          return server;
95  	}
96  
97  }