1 /***
2 * Jetrix TetriNET Server
3 * Copyright (C) 2001-2003 Emmanuel Bourg
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 */
19
20 package net.jetrix.config;
21
22 import java.util.*;
23
24 /***
25 * Channel configuration.
26 *
27 * @author Emmanuel Bourg
28 * @version $Revision: 860 $, $Date: 2010-05-06 13:21:05 +0200 (jeu., 06 mai 2010) $
29 */
30 public class ChannelConfig
31 {
32 private Settings settings;
33 private String name = "noname";
34 private String password;
35 private String description;
36 private String topic;
37 private int maxPlayers = PLAYER_CAPACITY;
38 private int maxSpectators = SPECTATOR_CAPACITY;
39 private int accessLevel;
40 private boolean persistent;
41 private String winlistId;
42 private boolean idleAllowed;
43 private boolean visible = true;
44 private Speed speed = Speed.MIXED;
45
46 /*** extended properties */
47 private Properties props;
48
49 /*** channel filter definitions */
50 private List<FilterConfig> filters;
51
52 /*** Default spectator capacity */
53 public static final int SPECTATOR_CAPACITY = 50;
54
55 /*** Default player capacity */
56 public static final int PLAYER_CAPACITY = 6;
57
58 public ChannelConfig()
59 {
60 filters = new ArrayList<FilterConfig>();
61 settings = new Settings();
62 }
63
64 /***
65 * Gets game parameters.
66 */
67 public Settings getSettings()
68 {
69 return settings;
70 }
71
72 /***
73 * Sets game parameters.
74 *
75 * @param settings
76 */
77 public void setSettings(Settings settings)
78 {
79 this.settings = settings;
80 }
81
82 /***
83 * Gets channel name.
84 */
85 public String getName()
86 {
87 return name;
88 }
89
90 /***
91 * Sets channel name.
92 *
93 * @param name
94 */
95 public void setName(String name)
96 {
97 this.name = name;
98 }
99
100 /***
101 * Gets the password.
102 */
103 public String getPassword()
104 {
105 return password;
106 }
107
108 /***
109 * Sets the password to enter the channel.
110 */
111 public void setPassword(String password)
112 {
113 this.password = password;
114 }
115
116 /***
117 * Gets channel description.
118 */
119 public String getDescription()
120 {
121 return description;
122 }
123
124 /***
125 * Sets the description shown on entering the channel.
126 */
127 public void setDescription(String description)
128 {
129 this.description = description;
130 }
131
132 /***
133 * Return the topic.
134 */
135 public String getTopic() {
136 return topic;
137 }
138
139 /***
140 * Set the topic.
141 */
142 public void setTopic(String topic) {
143 this.topic = topic;
144 }
145
146 /***
147 * Gets maximum number of players allowed.
148 */
149 public int getMaxPlayers()
150 {
151 return maxPlayers;
152 }
153
154 /***
155 * Sets the maximum number of players allowed at the same time in the channel.
156 *
157 * @param maxPlayers
158 */
159 public void setMaxPlayers(int maxPlayers)
160 {
161 this.maxPlayers = maxPlayers;
162 }
163
164 /***
165 * Gets maximum number of spectators allowed.
166 */
167 public int getMaxSpectators()
168 {
169 return maxSpectators;
170 }
171
172 /***
173 * Sets the maximum number of spectators allowed at the same time in the channel.
174 *
175 * @param maxSpectators
176 */
177 public void setMaxSpectators(int maxSpectators)
178 {
179 this.maxSpectators = maxSpectators;
180 }
181
182 /***
183 * Gets the minimum access level required to join the channel.
184 */
185 public int getAccessLevel()
186 {
187 return accessLevel;
188 }
189
190 /***
191 * Sets the minimum access level required to join the channel.
192 *
193 * @param accessLevel
194 */
195 public void setAccessLevel(int accessLevel)
196 {
197 this.accessLevel = accessLevel;
198 }
199
200 /***
201 * Tell if the channel will vanish once the last player leave
202 *
203 * @return <tt>true</tt> if the channel is persistent, <tt>false</tt> if not
204 */
205 public boolean isPersistent()
206 {
207 return persistent;
208 }
209
210 /***
211 * Sets channel persistence
212 *
213 * @param persistent
214 */
215 public void setPersistent(boolean persistent)
216 {
217 this.persistent = persistent;
218 }
219
220 public String getWinlistId()
221 {
222 return winlistId;
223 }
224
225 public void setWinlistId(String winlistId)
226 {
227 this.winlistId = winlistId;
228 }
229
230 public String getProperty(String name)
231 {
232 return (props == null) ? null : props.getProperty(name);
233 }
234
235 public void setProperty(String name, String value)
236 {
237 if (props == null)
238 {
239 props = new Properties();
240 }
241 props.setProperty(name, value);
242 }
243
244 /***
245 * Tell if a password is required to enter the channel.
246 */
247 public boolean isPasswordProtected()
248 {
249 return (password != null);
250 }
251
252 /***
253 * Returns an iterator of registered filters.
254 */
255 public Iterator<FilterConfig> getFilters()
256 {
257 return filters.iterator();
258 }
259
260 /***
261 * Registers a new filter.
262 */
263 public void addFilter(FilterConfig fconf)
264 {
265 filters.add(fconf);
266 }
267
268 public boolean isIdleAllowed()
269 {
270 return idleAllowed;
271 }
272
273 public void setIdleAllowed(boolean idleAllowed)
274 {
275 this.idleAllowed = idleAllowed;
276 }
277
278 public boolean isVisible()
279 {
280 return visible;
281 }
282
283 public void setVisible(boolean visible)
284 {
285 this.visible = visible;
286 }
287
288 public Speed getSpeed()
289 {
290 return speed;
291 }
292
293 public void setSpeed(Speed speed)
294 {
295 this.speed = speed;
296 }
297
298 /***
299 * Tells if the specified protocol is compatible with the speed restriction of the channel.
300 *
301 * @param protocol the name of the protocol
302 * @since 0.3
303 */
304 public boolean isProtocolAccepted(String protocol)
305 {
306 switch (speed)
307 {
308 case NORMAL:
309 return !"tetrifast".equals(protocol);
310 case FAST:
311 return !"tetrinet".equals(protocol);
312 default:
313 return true;
314 }
315 }
316 }