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.ItemTypeTranslator;
26 import cz.cuni.amis.pogamut.ut2004.communication.messages.UT2004ItemTypeTranslator;
27 import cz.cuni.amis.pogamut.ut2004.communication.messages.UnrealIdTranslator;
28 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.Yylex;
29 import cz.cuni.amis.pogamut.ut2004.communication.parser.UT2004Parser;
30 import cz.cuni.amis.pogamut.ut2004.communication.translator.itemdescriptor.ItemTranslator;
31 import cz.cuni.amis.pogamut.ut2004.communication.translator.server.ServerFSM;
32 import cz.cuni.amis.pogamut.ut2004.communication.worldview.UT2004WorldView;
33 import cz.cuni.amis.pogamut.ut2004.factory.guice.remoteagent.UT2004ServerModule;
34 import cz.cuni.amis.pogamut.ut2004.server.impl.UT2004Server;
35 import cz.cuni.amis.utils.exception.PogamutException;
36
37
38
39
40
41
42
43
44
45
46
47
48 public class UT2004ServerFactory<PARAMS extends UT2004AgentParameters> implements IAgentFactory<UT2004Server, PARAMS>{
49
50 @Override
51 public UT2004Server newAgent(PARAMS agentParameters) throws PogamutException {
52
53 AgentLogger logger = new AgentLogger(agentParameters.getAgentId());
54
55
56
57
58 logger.setLevel(Level.SEVERE);
59 logger.addDefaultConsoleHandler();
60
61 IComponentBus eventBus = new ComponentBus(logger);
62
63
64
65
66
67
68 SocketConnection socketConnection = new SocketConnection((ISocketConnectionAddress)agentParameters.getWorldAddress(), new ComponentDependencies(ComponentDependencyType.STARTS_WITH).add(agentParameters.getAgentId()), eventBus, logger);
69
70 UnrealIdTranslator unrealIdTranslator = new UnrealIdTranslator();
71 ItemTypeTranslator itemTypeTranslator = new UT2004ItemTypeTranslator();
72 ItemTranslator itemTranslator = new ItemTranslator(itemTypeTranslator);
73
74
75
76 IWorldMessageParser parser = new UT2004Parser(unrealIdTranslator, itemTranslator,itemTypeTranslator, socketConnection, new Yylex(), new IYylexObserver.LogObserver(logger), eventBus, logger);
77
78
79 IWorldMessageTranslator messageTranslator = new ServerFSM(itemTranslator, logger);
80 IWorldChangeEventOutput producer = new WorldMessageTranslator(parser, messageTranslator, eventBus, logger);
81
82 IMediator mediator = new Mediator(producer, eventBus, logger);
83
84 UT2004WorldView worldView = new UT2004WorldView(new ComponentDependencies(ComponentDependencyType.STARTS_WITH).add(agentParameters.getAgentId()), mediator, eventBus, logger);
85
86
87
88
89
90 ICommandSerializer<String> commandSerializer = new StringCommandSerializer();
91 IAct act = new Act(socketConnection, commandSerializer, eventBus, logger);
92
93
94
95
96
97 UT2004Server server = new UT2004Server(agentParameters, logger, eventBus, socketConnection, worldView, act);
98 return server;
99 }
100
101 }