[jetrix-cvs] SF.net SVN: jetrix:[744] jetrix/trunk
Brought to you by:
smanux
From: <sm...@us...> - 2008-08-27 14:36:48
|
Revision: 744 http://jetrix.svn.sourceforge.net/jetrix/?rev=744&view=rev Author: smanux Date: 2008-08-27 14:36:45 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Implemented the TServ mode of the tspec protocol Modified Paths: -------------- jetrix/trunk/doc/changelog.txt jetrix/trunk/src/java/net/jetrix/clients/TSpecClient.java jetrix/trunk/src/java/net/jetrix/listeners/TSpecListener.java jetrix/trunk/src/java/net/jetrix/protocols/TspecProtocol.java Modified: jetrix/trunk/doc/changelog.txt =================================================================== --- jetrix/trunk/doc/changelog.txt 2008-08-27 09:22:05 UTC (rev 743) +++ jetrix/trunk/doc/changelog.txt 2008-08-27 14:36:45 UTC (rev 744) @@ -10,6 +10,7 @@ - Implemented the channel operator access level. It's now possible to restrict some commands to the first player in the channel (/move, /start...) - Added support for the client identification protocol (i.e lvl 0 0 request, clientinfo response) - The number of players and spectators currently online is now displayed on logging in +- The 'TServ' mode of TSpec is now supported Admin visible changes - Jetrix now requires Java 6 Modified: jetrix/trunk/src/java/net/jetrix/clients/TSpecClient.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/clients/TSpecClient.java 2008-08-27 09:22:05 UTC (rev 743) +++ jetrix/trunk/src/java/net/jetrix/clients/TSpecClient.java 2008-08-27 14:36:45 UTC (rev 744) @@ -19,6 +19,11 @@ package net.jetrix.clients; +import java.io.IOException; + +import net.jetrix.Message; +import net.jetrix.messages.SmsgMessage; + /** * Spectator client. * @@ -27,8 +32,40 @@ */ public class TSpecClient extends TetrinetClient { + public static final int TETRIX_MODE = 0; + public static final int TSERV_MODE = 1; + + private int mode; + + public void setMode(int mode) + { + this.mode = mode; + } + + public int getMode() + { + return mode; + } + protected boolean isAsynchronous() { return false; } + + public Message receive() throws IOException + { + Message message = super.receive(); + + if (message instanceof SmsgMessage && mode == TSERV_MODE) + { + SmsgMessage smsg = (SmsgMessage) message; + if (smsg.isPrivate()) + { + // echo the message to the player + send(message); + } + } + + return message; + } } Modified: jetrix/trunk/src/java/net/jetrix/listeners/TSpecListener.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/listeners/TSpecListener.java 2008-08-27 09:22:05 UTC (rev 743) +++ jetrix/trunk/src/java/net/jetrix/listeners/TSpecListener.java 2008-08-27 14:36:45 UTC (rev 744) @@ -21,7 +21,6 @@ import java.io.*; import java.net.*; -import java.util.*; import net.jetrix.*; import net.jetrix.protocols.TspecProtocol; import net.jetrix.protocols.TetrinetProtocol; @@ -51,38 +50,38 @@ TetrinetProtocol protocol = ProtocolManager.getInstance().getProtocol(TetrinetProtocol.class); String init = protocol.readLine(new InputStreamReader(socket.getInputStream())); - String dec = TetrinetProtocol.decode(init); + TSpecClient client = new TSpecClient(); + client.setProtocol(ProtocolManager.getInstance().getProtocol(TspecProtocol.class)); + client.setSocket(socket); - // init string parsing "tetristart <nickname> <version>" - StringTokenizer st = new StringTokenizer(dec, " "); - List<String> tokens = new ArrayList<String>(); + User user = new User(); + user.setSpectator(); + client.setUser(user); - while (st.hasMoreTokens()) + // test if the client is using the tspec protocol (<nickname> <encoded password>) + if (init.contains(" ")) { - tokens.add(st.nextToken()); + client.setMode(TSpecClient.TSERV_MODE); + user.setName(init.substring(0, init.indexOf(" "))); } - - if (tokens.size() > 3) + else { - return null; - } + client.setMode(TSpecClient.TETRIX_MODE); + String dec = TetrinetProtocol.decode(init); - TSpecClient client = new TSpecClient(); - User user = new User(); - user.setName(tokens.get(1)); - user.setSpectator(); - client.setSocket(socket); - client.setUser(user); - client.setProtocol(ProtocolManager.getInstance().getProtocol(TspecProtocol.class)); + // init string parsing "tetristart <nickname> <version>" + String[] tokens = dec.split(" "); - if (tokens.size() > 3) - { - Message m = new NoConnectingMessage("No space allowed in nickname !"); - client.send(m); - return null; + if (tokens.length > 3) + { + Message m = new NoConnectingMessage("No space allowed in nickname !"); + client.send(m); + return null; + } + + user.setName(tokens[1]); } return client; } - } Modified: jetrix/trunk/src/java/net/jetrix/protocols/TspecProtocol.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/protocols/TspecProtocol.java 2008-08-27 09:22:05 UTC (rev 743) +++ jetrix/trunk/src/java/net/jetrix/protocols/TspecProtocol.java 2008-08-27 14:36:45 UTC (rev 744) @@ -50,6 +50,8 @@ if (line.startsWith("pline") && !line.startsWith("plineact")) { + // pline message with the tetrix mode + SmsgMessage smsg = new SmsgMessage(); smsg.setSlot(Integer.parseInt(line.substring(6, 7))); @@ -76,7 +78,30 @@ message = smsg; } } + else if (line.startsWith("/pline")) + { + // pline message with the tserv mode + SmsgMessage smsg = new SmsgMessage(); + smsg.setText(line.substring("/pline".length())); + smsg.setPrivate(false); + message = smsg; + } + else if (line.startsWith("/")) + { + // direct command in tserv mode + line = "pline 1 " + line; + } + else if (line.startsWith("<") && line.contains(">")) + { + // private comment in tserv mode + SmsgMessage smsg = new SmsgMessage(); + smsg.setText(line.substring(line.indexOf(">") + 1).trim()); + smsg.setPrivate(true); + + message = smsg; + } + return message != null ? message : super.getMessage(line); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |