1 package cz.cuni.amis.pogamut.ut2004.factory.guice.remoteagent;
2
3 import com.google.inject.AbstractModule;
4 import com.google.inject.Injector;
5 import com.google.inject.Provider;
6 import com.google.inject.name.Names;
7
8 import cz.cuni.amis.pogamut.base.agent.IAgent;
9 import cz.cuni.amis.pogamut.base.communication.connection.IWorldConnection;
10 import cz.cuni.amis.pogamut.base.communication.connection.impl.socket.ISocketConnectionAddress;
11 import cz.cuni.amis.pogamut.base.communication.connection.impl.socket.SocketConnection;
12 import cz.cuni.amis.pogamut.base.communication.messages.InfoMessage;
13 import cz.cuni.amis.pogamut.base.communication.parser.IWorldMessageParser;
14 import cz.cuni.amis.pogamut.base.communication.parser.impl.yylex.IYylex;
15 import cz.cuni.amis.pogamut.base.communication.parser.impl.yylex.IYylexObserver;
16 import cz.cuni.amis.pogamut.base.communication.translator.IWorldMessageTranslator;
17 import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
18 import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencies;
19 import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencyType;
20 import cz.cuni.amis.pogamut.base.factory.guice.GuiceAgentModule;
21 import cz.cuni.amis.pogamut.base.factory.guice.GuiceRemoteAgentModule;
22 import cz.cuni.amis.pogamut.base.utils.guice.AdaptableProvider;
23 import cz.cuni.amis.pogamut.ut2004.agent.params.UT2004AgentParameters;
24 import cz.cuni.amis.pogamut.ut2004.communication.messages.ItemType;
25 import cz.cuni.amis.pogamut.ut2004.communication.messages.ItemTypeTranslator;
26 import cz.cuni.amis.pogamut.ut2004.communication.messages.UT2004ItemType;
27 import cz.cuni.amis.pogamut.ut2004.communication.messages.UT2004ItemTypeTranslator;
28 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.Yylex;
29 import cz.cuni.amis.pogamut.ut2004.communication.parser.IUT2004Yylex;
30 import cz.cuni.amis.pogamut.ut2004.communication.parser.UT2004Parser;
31 import cz.cuni.amis.pogamut.ut2004.communication.translator.itemdescriptor.ItemTranslator;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 public class UT2004CommunicationModule<PARAMS extends UT2004AgentParameters> extends GuiceRemoteAgentModule<PARAMS>{
72
73 protected AdaptableProvider<ComponentDependencies> connectionDependenciesProvider = new AdaptableProvider<ComponentDependencies>(null);
74
75
76
77
78
79
80
81
82 @Override
83 public void prepareNewAgent(PARAMS agentParameters) {
84 super.prepareNewAgent(agentParameters);
85 connectionDependenciesProvider.set(new ComponentDependencies(ComponentDependencyType.STARTS_WITH).add(agentParameters.getAgentId()));
86 }
87
88 @Override
89 protected void configureModules() {
90 super.configureModules();
91 addModule(new AbstractModule() {
92
93 @Override
94 public void configure() {
95 bind(IWorldConnection.class).to(SocketConnection.class);
96 bind(ComponentDependencies.class).annotatedWith(Names.named(SocketConnection.CONNECTION_DEPENDENCY)).toProvider(connectionDependenciesProvider);
97 bind(ISocketConnectionAddress.class).annotatedWith(Names.named(SocketConnection.CONNECTION_ADDRESS_DEPENDENCY)).toProvider((Provider<ISocketConnectionAddress>) getAddressProvider());
98 bind(IWorldMessageParser.class).to(UT2004Parser.class);
99 bind(ItemTypeTranslator.class).to(UT2004ItemTypeTranslator.class);
100 bind(IYylex.class).to(IUT2004Yylex.class);
101 bind(IUT2004Yylex.class).to(Yylex.class);
102 bind(IYylexObserver.class).to(IYylexObserver.LogObserver.class);
103 bind(UT2004AgentParameters.class).toProvider(getAgentParamsProvider());
104 }
105
106 });
107 }
108
109 }