1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package nl.tudelft.goal.ut2004.environment;
22
23 import java.net.URI;
24 import java.rmi.RemoteException;
25 import java.util.HashMap;
26 import java.util.Map;
27
28 import nl.tudelft.goal.unreal.environment.AbstractUnrealEnvironment;
29 import nl.tudelft.goal.unreal.messages.BotParameters;
30 import nl.tudelft.goal.unreal.messages.Configuration;
31 import nl.tudelft.goal.ut2004.server.EnvironmentControllerServer;
32 import nl.tudelft.goal.ut2004.server.EnvironmentControllerServerModule;
33 import nl.tudelft.goal.unreal.translators.LocationTranslator;
34 import nl.tudelft.goal.unreal.translators.NoneTranslator;
35 import nl.tudelft.goal.unreal.translators.PerceptTranslator;
36 import nl.tudelft.goal.unreal.translators.RotationTranslator;
37 import nl.tudelft.goal.unreal.translators.TeamTranslator;
38 import nl.tudelft.goal.unreal.translators.UnrealIdOrLocationTranslator;
39 import nl.tudelft.goal.unreal.translators.UnrealIdTranslator;
40 import nl.tudelft.goal.unreal.translators.VelocityTranslator;
41 import nl.tudelft.goal.ut2004.agent.UT2004BotBehavior;
42 import nl.tudelft.goal.ut2004.translators.CategoryTranslator;
43 import nl.tudelft.goal.ut2004.translators.ComboTranslator;
44 import nl.tudelft.goal.ut2004.translators.FireModeTranslator;
45 import nl.tudelft.goal.ut2004.translators.FlagStateTranslator;
46 import nl.tudelft.goal.ut2004.translators.GameTypeTranslator;
47 import nl.tudelft.goal.ut2004.translators.GroupTranslator;
48 import nl.tudelft.goal.ut2004.translators.UT2004GroupTranslator;
49 import nl.tudelft.goal.ut2004.translators.ItemTypeTranslator;
50 import nl.tudelft.goal.ut2004.translators.NavigationStateTranslator;
51 import nl.tudelft.goal.ut2004.translators.SelectorListTranslator;
52 import nl.tudelft.goal.ut2004.translators.SelectorTranslator;
53 import nl.tudelft.goal.ut2004.translators.UT2004ItemTypeTranslator;
54 import nl.tudelft.goal.ut2004.translators.WeaponPrefListTranslator;
55 import nl.tudelft.goal.ut2004.translators.WeaponPrefTranslator;
56 import nl.tudelft.goal.ut2004.visualizer.connection.AddBotCommand;
57 import nl.tudelft.goal.ut2004.visualizer.connection.EnvironmentServiceListener;
58 import nl.tudelft.goal.ut2004.visualizer.connection.EnvironmentServiceMediator;
59 import nl.tudelft.goal.ut2004.visualizer.connection.client.RemoteVisualizer;
60 import nl.tudelft.goal.ut2004.visualizer.connection.client.VisualizerServiceDefinition;
61 import nl.tudelft.pogamut.base.server.ReconnectingServerDefinition;
62 import cz.cuni.amis.pogamut.base.communication.command.IAct;
63 import cz.cuni.amis.pogamut.base3d.worldview.IVisionWorldView;
64 import cz.cuni.amis.pogamut.ut2004.agent.params.UT2004AgentParameters;
65 import cz.cuni.amis.pogamut.ut2004.bot.impl.UT2004Bot;
66 import cz.cuni.amis.pogamut.ut2004.bot.impl.UT2004BotController;
67 import cz.cuni.amis.pogamut.ut2004.bot.params.UT2004BotParameters;
68 import cz.cuni.amis.pogamut.ut2004.factory.guice.remoteagent.UT2004ServerFactory;
69 import cz.cuni.amis.pogamut.ut2004.factory.guice.remoteagent.UT2004ServerModule;
70 import cz.cuni.amis.pogamut.ut2004.server.IUT2004Server;
71 import cz.cuni.amis.pogamut.ut2004.utils.UT2004BotRunner;
72 import cz.cuni.amis.pogamut.ut2004.utils.UT2004ServerRunner;
73 import cz.cuni.amis.pogamut.ut2004.utils.UTBotRunner;
74 import cz.cuni.amis.utils.flag.FlagListener;
75 import eis.eis2java.handlers.ActionHandler;
76 import eis.eis2java.handlers.AllPerceptPerceptHandler;
77 import eis.eis2java.handlers.DefaultActionHandler;
78 import eis.eis2java.handlers.PerceptHandler;
79 import eis.eis2java.translation.Translator;
80 import eis.eis2java.util.AllPerceptsProvider;
81 import eis.exceptions.EntityException;
82 import eis.exceptions.ManagementException;
83 import eis.iilang.Identifier;
84 import eis.iilang.Parameter;
85 import eis.iilang.ParameterList;
86 import nl.tudelft.goal.ut2004.translators.ScopeTranslator;
87
88 public class UT2004Environment extends AbstractUnrealEnvironment {
89
90
91
92
93 private static final long serialVersionUID = 8240549393243585632L;
94
95
96 private ReconnectingServerDefinition<RemoteVisualizer> visualizerConnection;
97
98 @Override
99 protected void registerTranslators() {
100
101 Translator translator = Translator.getInstance();
102
103
104
105
106
107
108
109
110
111
112
113
114
115 LocationTranslator locationTranslator = new LocationTranslator();
116 translator.registerJava2ParameterTranslator(locationTranslator);
117 translator.registerParameter2JavaTranslator(locationTranslator);
118
119 NoneTranslator noneTranslator = new NoneTranslator();
120 translator.registerJava2ParameterTranslator(noneTranslator);
121
122 PerceptTranslator perceptTranslator = new PerceptTranslator();
123 translator.registerJava2ParameterTranslator(perceptTranslator);
124
125 RotationTranslator rotationTranslator = new RotationTranslator();
126 translator.registerJava2ParameterTranslator(rotationTranslator);
127 translator.registerParameter2JavaTranslator(rotationTranslator);
128
129 TeamTranslator teamTranslator = new TeamTranslator();
130 translator.registerJava2ParameterTranslator(teamTranslator);
131 translator.registerParameter2JavaTranslator(teamTranslator);
132
133 UnrealIdTranslator unrealIdTranslator = new UnrealIdTranslator();
134 translator.registerJava2ParameterTranslator(unrealIdTranslator);
135 translator.registerParameter2JavaTranslator(unrealIdTranslator);
136
137 UnrealIdOrLocationTranslator unrealIdOrLocationTranslator = new UnrealIdOrLocationTranslator();
138 translator.registerParameter2JavaTranslator(unrealIdOrLocationTranslator);
139 translator.registerJava2ParameterTranslator(unrealIdOrLocationTranslator);
140
141 VelocityTranslator velocityTranslator = new VelocityTranslator();
142 translator.registerJava2ParameterTranslator(velocityTranslator);
143 translator.registerParameter2JavaTranslator(velocityTranslator);
144
145
146
147
148
149
150 CategoryTranslator categoryTranslator = new CategoryTranslator();
151 translator.registerJava2ParameterTranslator(categoryTranslator);
152 translator.registerParameter2JavaTranslator(categoryTranslator);
153
154 ComboTranslator comboTranslator = new ComboTranslator();
155 translator.registerParameter2JavaTranslator(comboTranslator);
156
157 FireModeTranslator fireModeTranslator = new FireModeTranslator();
158 translator.registerJava2ParameterTranslator(fireModeTranslator);
159 translator.registerParameter2JavaTranslator(fireModeTranslator);
160
161 FlagStateTranslator flagStateTranslator = new FlagStateTranslator();
162 translator.registerJava2ParameterTranslator(flagStateTranslator);
163
164 GameTypeTranslator gameTypeTranslator = new GameTypeTranslator();
165 translator.registerJava2ParameterTranslator(gameTypeTranslator);
166
167 GroupTranslator groupTranslator = new GroupTranslator();
168 translator.registerJava2ParameterTranslator(groupTranslator);
169 translator.registerParameter2JavaTranslator(groupTranslator);
170
171 ItemTypeTranslator itemTypeTranslator = new ItemTypeTranslator();
172 translator.registerJava2ParameterTranslator(itemTypeTranslator);
173 translator.registerParameter2JavaTranslator(itemTypeTranslator);
174
175 NavigationStateTranslator navigationStateTranslator = new NavigationStateTranslator();
176 translator.registerJava2ParameterTranslator(navigationStateTranslator);
177
178 SelectorListTranslator selectorListTranslator = new SelectorListTranslator();
179 translator.registerParameter2JavaTranslator(selectorListTranslator);
180
181 SelectorTranslator selectorTranslator = new SelectorTranslator();
182 translator.registerParameter2JavaTranslator(selectorTranslator);
183
184 UT2004GroupTranslator ut2004GroupTranslator = new UT2004GroupTranslator();
185 translator.registerJava2ParameterTranslator(ut2004GroupTranslator);
186 translator.registerParameter2JavaTranslator(ut2004GroupTranslator);
187
188 UT2004ItemTypeTranslator ut2004ItemTypeTranslator = new UT2004ItemTypeTranslator();
189 translator.registerJava2ParameterTranslator(ut2004ItemTypeTranslator);
190 translator.registerParameter2JavaTranslator(ut2004ItemTypeTranslator);
191
192 WeaponPrefListTranslator weaponPrefListTranslator = new WeaponPrefListTranslator();
193 translator.registerParameter2JavaTranslator(weaponPrefListTranslator);
194
195 WeaponPrefTranslator weaponPrefTranslator = new WeaponPrefTranslator();
196 translator.registerParameter2JavaTranslator(weaponPrefTranslator);
197
198 ScopeTranslator scopeTranslator = new ScopeTranslator();
199 translator.registerParameter2JavaTranslator(scopeTranslator);
200 }
201
202 public static void main(String[] args) throws ManagementException {
203 HashMap<String, Parameter> map = new HashMap<String, Parameter>();
204 map.put("botNames", new ParameterList(new Identifier("Test")));
205
206
207
208 new UT2004Environment().init(map);
209
210 }
211
212 @Override
213 protected Class<UT2004BotBehavior> getControlerClass() {
214 return UT2004BotBehavior.class;
215 }
216
217 protected UTBotRunner<UT2004Bot<IVisionWorldView, IAct, UT2004BotController>, UT2004BotParameters> getBotRunner(
218 Configuration configuration) {
219 UT2004BotRunner<UT2004Bot<IVisionWorldView, IAct, UT2004BotController>, UT2004BotParameters> runner = new UT2004BotRunner<UT2004Bot<IVisionWorldView, IAct, UT2004BotController>, UT2004BotParameters>(
220 getControlerClass(), configuration.getDefaultBotName(),
221 configuration.getBotServerHost(),
222 configuration.getBotServerPort());
223 return runner;
224 }
225
226 @Override
227 protected PerceptHandler createPerceptHandler(@SuppressWarnings("rawtypes") UT2004BotController controller) throws EntityException {
228 if (!(controller instanceof AllPerceptsProvider))
229 throw new EntityException("Expected a class that implements " + AllPerceptsProvider.class.getSimpleName());
230 return new AllPerceptPerceptHandler((AllPerceptsProvider) controller);
231 }
232
233 @Override
234 protected ActionHandler createActionHandler(@SuppressWarnings("rawtypes") UT2004BotController controller) throws EntityException {
235 return new DefaultActionHandler(controller);
236 }
237
238 @Override
239 protected UT2004ServerRunner<? extends IUT2004Server, ? extends UT2004AgentParameters> createServerRunner() {
240 UT2004ServerModule<UT2004AgentParameters> serverModule = new EnvironmentControllerServerModule<UT2004AgentParameters>();
241 UT2004ServerFactory<EnvironmentControllerServer, UT2004AgentParameters> serverFactory = new UT2004ServerFactory<EnvironmentControllerServer, UT2004AgentParameters>(serverModule);
242 UT2004ServerRunner<EnvironmentControllerServer, UT2004AgentParameters> serverRunner = new UT2004ServerRunner<EnvironmentControllerServer, UT2004AgentParameters>(serverFactory, "UTServer", configuration.getControlServerHost(), configuration.getControlServerPort());
243 return serverRunner;
244 }
245
246 @Override
247 protected synchronized void initializeEnvironment(Map<String, Parameter> parameters) throws ManagementException {
248 super.initializeEnvironment(parameters);
249
250
251 try {
252 visualizerConnection = new ReconnectingServerDefinition<RemoteVisualizer>(new VisualizerServiceDefinition());
253 visualizerConnection.getServerFlag().addListener(new VisualizerServiceListener());
254 } catch (RemoteException e) {
255 log.severe("Could not start connection to Visualizer: " + e);
256 }
257
258 }
259
260
261
262
263
264
265
266
267 private class VisualizerServiceListener implements EnvironmentServiceListener, FlagListener<RemoteVisualizer> {
268
269 private final EnvironmentServiceMediator mediator;
270
271 public VisualizerServiceListener() throws RemoteException {
272 mediator = new EnvironmentServiceMediator(getComponentId());
273 mediator.setListener(this);
274 }
275
276 @Override
277 public void flagChanged(RemoteVisualizer visualizer) {
278 if (visualizer != null) {
279 visualizer.setEnvironment(mediator);
280 }
281 }
282
283
284
285
286
287
288
289
290 @Override
291 public void addBot(AddBotCommand command) throws ManagementException {
292
293 BotParameters parameters = new BotParameters();
294
295
296 if (command.getBotName() != null) {
297 parameters.setAgentId(command.getBotName());
298 }
299 if (command.getLogLevel() != null) {
300 parameters.setLogLevel(command.getLogLevel());
301 }
302 if (command.getShouldLeadTarget() != null) {
303 parameters.setShouldLeadTarget(command.getShouldLeadTarget());
304 }
305 if (command.getSkill() != null) {
306 parameters.setSkill(command.getSkill());
307 }
308 if (command.getSkin() != null) {
309 parameters.setSkin(command.getSkin());
310 }
311 if (command.getTeam() != null) {
312 parameters.setTeam(command.getTeam());
313 }
314
315 if (command.getRotation() != null) {
316 parameters.setInitialRotation(command.getRotation());
317 }
318
319 if (command.getLocation() != null) {
320 parameters.setInitialLocation(command.getLocation());
321 }
322
323
324
325
326
327 startAgent(parameters);
328
329 }
330
331 }
332
333 @Override
334 protected synchronized void connectEnvironment() throws ManagementException {
335 super.connectEnvironment();
336
337
338 URI visualizerUri = configuration.getVisualizer();
339 if (visualizerUri != null) {
340 log.info("Connecting to visualizer server at " + visualizerUri + " .");
341
342 visualizerConnection.setUri(visualizerUri);
343 } else {
344 log.info("No address for the visualizer server was provided. The environment will not try to connect to the visualizer.");
345 }
346 }
347
348 @Override
349 protected synchronized void killEnvironment() {
350 super.killEnvironment();
351
352 visualizerConnection.stopServer();
353
354 }
355
356
357
358 }