1 22 23 package server; 24 25 import java.util.Vector ; 26 import java.util.Hashtable ; 27 import java.util.Enumeration ; 28 29 30 42 public final class ChannelManager { 43 public static char allowUserChannels; 44 public String defaultChannel; 45 private int defaultCount; 46 private static Hashtable systemChannels; 47 private static Hashtable userChannels; 48 public static final String eName = "Invalid Channel Name"; 49 public static final String eAllowed = "User Channels not allowed"; 50 public static final String eAdmin = "Admin only operation"; 51 52 55 ChannelManager() { 56 allowUserChannels = 'y'; 57 defaultChannel = "Lobby"; 58 defaultCount = 0; 59 systemChannels = null; 60 userChannels = null; 61 } 62 63 68 public boolean setDefaultChannel(String name) { 69 if (!name.equals(defaultChannel) && !isValidChannel(name)) { 70 return false; 71 } 72 defaultChannel = name; 73 return true; 74 } 75 76 83 public boolean addSystemChannel(String name, String pass) { 84 if (!isValidChannel(name)) { 85 return false; 86 } 87 if (systemChannels == null) { 88 systemChannels = new Hashtable (); 89 } 90 systemChannels.put(name, new ChannelManagerItem(pass)); 91 return true; 92 } 93 94 102 public String addUserChannel(String name, String pass, ClientConnection cc) { 103 if (allowUserChannels == 'n') { 104 return eAllowed; 105 } 106 if (allowUserChannels == 'a' && !cc.isAdmin()) { 107 return eAdmin; 108 } 109 if (!isValidChannel(name)) { 110 return eName; 111 } 112 if (userChannels == null) { 113 userChannels = new Hashtable (); 114 } 115 userChannels.put(name, new ChannelManagerItem(pass)); 116 return null; 117 } 118 119 126 public boolean userAdd(String name, String pass) { 127 if (defaultChannel.equals(name)) { 128 defaultCount++; 129 return true; 130 } 131 132 if (systemChannels != null && systemChannels.containsKey(name)) { 133 ChannelManagerItem value = (ChannelManagerItem) systemChannels.get(name); 134 if (value == null) { 135 return false; 136 } 137 if (value.pass == null || value.pass.equals(pass)) { 138 value.countpp(); 139 return true; 140 } 141 return false; 142 } 143 if (userChannels != null && userChannels.containsKey(name)) { 144 ChannelManagerItem value = (ChannelManagerItem) userChannels.get(name); 145 if (value == null) { 146 return false; 147 } 148 if (value.pass == null || value.pass.equals(pass)) { 149 value.countpp(); 150 return true; 151 } 152 } 153 return false; 154 } 155 156 162 public boolean userDel(String name) { 163 if (defaultChannel.equals(name)) { 164 defaultCount--; 165 return false; 166 } 167 168 if (systemChannels != null && systemChannels.containsKey(name)) { 169 ChannelManagerItem value = (ChannelManagerItem) systemChannels.get(name); 170 if (value != null) { 171 value.countmm(); 172 } 173 return false; 174 } 175 if (userChannels != null && userChannels.containsKey(name)) { 176 ChannelManagerItem value = (ChannelManagerItem) userChannels.get(name); 177 if (value == null) { 178 return false; 179 } 180 if (value.countmm()) { 181 userChannels.remove(name); 182 return true; 183 } 184 } 185 return false; 186 } 187 188 193 public boolean isValidChannel(String name) { 194 if (defaultChannel.equals(name) || 195 (systemChannels != null && systemChannels.containsKey(name)) || 196 (userChannels != null && userChannels.containsKey(name)) || 197 name.length() > 12 || !name.matches("[\\w_-]+?")) { 198 return false; 199 } 200 return true; 201 } 202 203 208 public boolean channelExists(String name) { 209 if (defaultChannel.equals(name) || 210 (systemChannels != null && systemChannels.containsKey(name)) || 211 (userChannels != null && userChannels.containsKey(name))) { 212 return true; 213 } 214 return false; 215 } 216 217 221 public String channelHasPass(String name) { 222 if (defaultChannel.equals(name)) { 223 return null; 224 } else if (systemChannels != null && systemChannels.containsKey(name)) { 225 ChannelManagerItem value = (ChannelManagerItem) systemChannels.get(name); 226 if (value != null) { 227 if (value.pass != null) { 228 return ""; 229 } 230 } 231 return null; 232 } else if (userChannels != null && userChannels.containsKey(name)) { 233 ChannelManagerItem value = (ChannelManagerItem) userChannels.get(name); 234 if (value != null) { 235 if (value.pass != null) { 236 return ""; 237 } 238 } 239 return null; 240 } 241 return null; 242 } 243 244 248 public Enumeration enumerate() { 249 Vector all = new Vector (); 250 all.add(defaultChannel); 251 if (systemChannels != null) { 252 Enumeration e = systemChannels.keys(); 253 while (e.hasMoreElements()) { 254 all.add(e.nextElement()); 255 } 256 } 257 if (userChannels != null) { 258 Enumeration e = userChannels.keys(); 259 while (e.hasMoreElements()) { 260 all.add(e.nextElement()); 261 } 262 } 263 return all.elements(); 264 } 265 266 269 public class ChannelManagerItem { 270 273 public int count; 274 275 278 public String pass; 279 280 283 ChannelManagerItem() { 284 count = 0; 285 pass = null; 286 } 287 288 292 ChannelManagerItem(String p) { 293 count = 0; 294 pass = (p == null ? null : new String (p)); 295 } 296 297 300 public void countpp() { 301 count++; 302 } 303 304 308 public boolean countmm() { 309 count--; 310 if (count == 0) 311 return true; 312 return false; 313 } 314 } 315 } 316 317 | Popular Tags |