[jetrix-cvs] jetrix/src/java/net/jetrix/listeners ClientListener.java,1.17,1.18
Brought to you by:
smanux
From: Emmanuel B. <sm...@us...> - 2005-05-03 16:56:57
|
Update of /cvsroot/jetrix/jetrix/src/java/net/jetrix/listeners In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23930 Modified Files: ClientListener.java Log Message: New interceptor API to modularize the ClientListener Index: ClientListener.java =================================================================== RCS file: /cvsroot/jetrix/jetrix/src/java/net/jetrix/listeners/ClientListener.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** ClientListener.java 3 May 2005 11:45:59 -0000 1.17 --- ClientListener.java 3 May 2005 16:56:47 -0000 1.18 *************** *** 1,5 **** /** * Jetrix TetriNET Server ! * Copyright (C) 2001-2004 Emmanuel Bourg * * This program is free software; you can redistribute it and/or --- 1,5 ---- /** * Jetrix TetriNET Server ! * Copyright (C) 2001-2005 Emmanuel Bourg * * This program is free software; you can redistribute it and/or *************** *** 22,32 **** import java.io.*; import java.net.*; import java.util.logging.*; import net.jetrix.*; - import net.jetrix.services.AbstractService; import net.jetrix.clients.*; import net.jetrix.config.*; import net.jetrix.messages.*; /** --- 22,35 ---- import java.io.*; import java.net.*; + import java.util.*; import java.util.logging.*; + import net.jetrix.*; import net.jetrix.clients.*; import net.jetrix.config.*; + import net.jetrix.listeners.interceptor.*; import net.jetrix.messages.*; + import net.jetrix.services.*; /** *************** *** 99,102 **** --- 102,106 ---- } + // spawn the client verifier processing the interceptors new ClientVerifier(socket).start(); } *************** *** 188,293 **** { Client client = getClient(socket); - User user = client.getUser(); - user.setLocale(serverConfig.getLocale()); ! // check if the server is locked ! if (serverConfig.getStatus() == ServerConfig.STATUS_LOCKED && !(client instanceof QueryClient)) ! { ! log.info("Server locked, client rejected (" + address + ")."); ! Message m = new NoConnectingMessage("The server is locked."); ! client.send(m); ! socket.close(); ! return; ! } ! ! // check if the server is full ! ClientRepository repository = ClientRepository.getInstance(); ! if (repository.getClientCount() >= serverConfig.getMaxPlayers() ! && !(client instanceof QueryClient)) { ! log.info("Server full, client rejected (" + address + ")."); ! Message m = new NoConnectingMessage("Server is full!"); ! client.send(m); ! socket.close(); ! return; ! } ! // test concurrent connections from the same host ! int maxConnections = serverConfig.getMaxConnections(); ! if (maxConnections > 0 && repository.getHostCount(address) >= maxConnections) ! { ! log.info("Too many connections from host, client rejected (" + address + ")."); ! Message m = new NoConnectingMessage("Too many connections from your host!"); ! client.send(m); ! socket.close(); ! return; ! } ! // testing name unicity ! if (repository.getClient(user.getName()) != null) ! { ! Message m = new NoConnectingMessage("Nickname already in use!"); ! client.send(m); ! socket.close(); ! return; ! } ! // validate the name ! String name = user.getName(); ! if (!(client instanceof QueryClient) && (name == null || "server".equals(name.toLowerCase()) || name.indexOf("\u00a0") != -1)) ! { ! Message m = new NoConnectingMessage("Invalid name!"); ! client.send(m); ! socket.close(); ! return; ! } ! log.fine("Client accepted (" + address + ")"); ! socket.setSoTimeout(serverConfig.getTimeout() * 1000); ! if (!(client instanceof QueryClient)) ! { ! // add the client to the repository ! repository.addClient(client); ! // send the message of the day ! if (serverConfig.getMessageOfTheDay() != null) ! { ! BufferedReader motd = new BufferedReader(new StringReader(serverConfig.getMessageOfTheDay())); ! String motdline; ! while ((motdline = motd.readLine()) != null) { ! PlineMessage m = new PlineMessage(); ! m.setText("<gray>" + motdline); ! client.send(m); } - motd.close(); - } - - // display the number of players online - int playerCount = ClientRepository.getInstance().getPlayerCount(); - int spectatorCount = ClientRepository.getInstance().getSpectatorCount(); - - PlineMessage online = new PlineMessage(); - String key = playerCount + spectatorCount > 1 ? "server.users-online" : "server.user-online"; - String pkey = playerCount > 1 ? "key:common.players" : "key:common.player"; - String skey = spectatorCount > 1 ? "key:common.spectators" : "key:common.spectator"; - online.setKey(key, playerCount, pkey, spectatorCount, skey); - - client.send(online); ! // forward the client to the server for channel assignation ! if (client.supportsAutoJoin()) { ! AddPlayerMessage m = new AddPlayerMessage(); ! m.setClient(client); ! Server.getInstance().send(m); } ! // update the server statistics ! serverConfig.getStatistics().increaseConnectionCount(); } - - // start the client - (new Thread(client, "client: " + client.getUser().getName())).start(); } catch (Exception e) --- 192,244 ---- { Client client = getClient(socket); ! if (client != null) { ! User user = client.getUser(); ! user.setLocale(serverConfig.getLocale()); ! // todo move the declaration of the interceptors in the server configuration ! Collection<ClientInterceptor> validators = new ArrayList<ClientInterceptor>(); ! validators.add(new AccessInterceptor()); ! validators.add(new NameCheckInterceptor()); ! // run the validators ! for (ClientInterceptor interceptor : validators) ! { ! interceptor.process(client); ! } ! log.fine("Client accepted (" + address + ")"); ! socket.setSoTimeout(serverConfig.getTimeout() * 1000); ! if (!(client instanceof QueryClient)) ! { ! // add the client to the repository ! ClientRepository repository = ClientRepository.getInstance(); ! repository.addClient(client); ! Collection<ClientInterceptor> interceptors = new ArrayList<ClientInterceptor>(); ! interceptors.add(new MotdInterceptor()); ! interceptors.add(new OnlineUsersInterceptor()); ! interceptors.add(new ServerStatsInterceptor()); ! // run the interceptors ! for (ClientInterceptor interceptor : interceptors) { ! interceptor.process(client); } ! // forward the client to the server for channel assignation ! if (client.supportsAutoJoin()) ! { ! AddPlayerMessage m = new AddPlayerMessage(); ! m.setClient(client); ! Server.getInstance().send(m); ! } } ! // start the client ! (new Thread(client, "client: " + client.getUser().getName())).start(); } } catch (Exception e) *************** *** 304,308 **** ioe.printStackTrace(); } ! e.printStackTrace(); } --- 255,263 ---- ioe.printStackTrace(); } ! ! if (!(e instanceof ClientValidationException)) ! { ! e.printStackTrace(); ! } } |