1 package cz.cuni.amis.pogamut.udk.server;
2
3 import java.util.Collection;
4 import java.util.List;
5 import java.util.concurrent.Future;
6
7 import cz.cuni.amis.pogamut.udk.bot.IUDKBot;
8 import cz.cuni.amis.pogamut.udk.bot.impl.NativeUDKBotAdapter;
9 import cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages.MapList;
10 import cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages.Mutator;
11 import cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages.Player;
12 import cz.cuni.amis.pogamut.udk.communication.worldview.map.UDKMap;
13 import cz.cuni.amis.pogamut.udk.server.exception.MapChangeException;
14 import cz.cuni.amis.pogamut.unreal.server.IUnrealServer;
15 import cz.cuni.amis.utils.collections.ObservableCollection;
16 import cz.cuni.amis.utils.flag.Flag;
17
18 // TODO: [Ruda] specify the UT2004 server interface
19 public interface IUDKServer extends IUnrealServer<IUDKBot> {
20
21 /**
22 * Sets the address of the server to different location - does not automatically reconnect,
23 * use {@link IUDKServer#stop()} and {@link IUDKServer#start()}.
24 * @param address
25 */
26 public void setAddress(String host, int port);
27
28 /**
29 * @return List of all maps available on the UT server
30 */
31 public Collection<MapList> getAvailableMaps();
32
33 // GameInfo doesn't exist anymore, JSimlo changed it into something else
34 // public GameInfo getGameInfo();
35
36 /**
37 * The flag raises events even when the game speed was changed by another
38 * UTServer instance or directly in game.
39 * @return Speed of the game.
40 */
41 public Flag<Double> getGameSpeedFlag();
42
43 /**
44 * @return Name of the current map.
45 */
46 public String getMapName();
47
48 /**
49 * Method that initiates map-change. It returns future that describes the result.
50 * <p><p>
51 * Note that the object must restart itself in order to reconnect to the new server.
52 *
53 * @param map
54 */
55 public Future<Boolean> setGameMap(String map) throws MapChangeException;
56
57 /**
58 * Returns list of all players connected to the game server. The difference
59 * compared to the getAgents() method is that this method can return even the
60 * native bots, human players etc.
61 * @return List of all players on the server.
62 */
63 public ObservableCollection<Player> getPlayers();
64
65 /**
66 * Returns list of all non pogamut players connected to the game server. Collection
67 * contains NativeBotAdapter classes, this means that you can deal with the
68 * players like with Pogamut agents.
69 * @
70 * @return List of all players on the server.
71 */
72 public ObservableCollection<? extends NativeUDKBotAdapter> getNativeAgents();
73
74 /**
75 * Reeturns list of all mutators available on the server. Mutators can be
76 * used to modify the game (eg. disable weapons, change game speed).
77 * @return List of all mutators available on the server.
78 */
79 public List<Mutator> getMutators();
80
81 /**
82 * Connects a UT native bot to the current map.
83 * @param botName
84 */
85 public void connectNativeBot(String botName, String botType);
86
87 /**
88 * Get current map from the server
89 * @return Map of current level.
90 */
91 public UDKMap getMap();
92
93 }