[jetrix-cvs] SF.net SVN: jetrix:[837] jetrix/trunk/src
Brought to you by:
smanux
From: <sm...@us...> - 2010-04-11 22:42:27
|
Revision: 837 http://jetrix.svn.sourceforge.net/jetrix/?rev=837&view=rev Author: smanux Date: 2010-04-11 22:42:20 +0000 (Sun, 11 Apr 2010) Log Message: ----------- Introduced an output encoding per client Modified Paths: -------------- jetrix/trunk/src/java/net/jetrix/Client.java jetrix/trunk/src/java/net/jetrix/Protocol.java jetrix/trunk/src/java/net/jetrix/agent/QueryAgent.java jetrix/trunk/src/java/net/jetrix/agent/TetrinetAgent.java jetrix/trunk/src/java/net/jetrix/clients/ConsoleClient.java jetrix/trunk/src/java/net/jetrix/clients/QueryClient.java jetrix/trunk/src/java/net/jetrix/clients/TetrinetClient.java jetrix/trunk/src/java/net/jetrix/listeners/TSpecListener.java jetrix/trunk/src/java/net/jetrix/listeners/TetrinetListener.java jetrix/trunk/src/java/net/jetrix/protocols/AbstractProtocol.java jetrix/trunk/src/java/net/jetrix/protocols/TetrinetProtocol.java jetrix/trunk/src/test/net/jetrix/agent/QueryAgentTest.java Modified: jetrix/trunk/src/java/net/jetrix/Client.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/Client.java 2010-04-11 21:25:35 UTC (rev 836) +++ jetrix/trunk/src/java/net/jetrix/Client.java 2010-04-11 22:42:20 UTC (rev 837) @@ -96,6 +96,13 @@ long getIdleTime(); /** + * Returns the character encoding to be used for the messages sent to the client. + * + * @since 0.3 + */ + String getEncoding(); + + /** * Send a message to the client. The raw message property must be set. * * @param message the message to send Modified: jetrix/trunk/src/java/net/jetrix/Protocol.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/Protocol.java 2010-04-11 21:25:35 UTC (rev 836) +++ jetrix/trunk/src/java/net/jetrix/Protocol.java 2010-04-11 22:42:20 UTC (rev 837) @@ -19,9 +19,9 @@ package net.jetrix; -import java.util.*; -import java.io.Reader; import java.io.IOException; +import java.io.InputStream; +import java.util.Locale; /** * A protocol to communicate with a client. A protocol is responsible for @@ -91,6 +91,6 @@ * @param in the stream to be read * @throws IOException thrown if the stream is closed */ - String readLine(Reader in) throws IOException; + String readLine(InputStream in) throws IOException; } Modified: jetrix/trunk/src/java/net/jetrix/agent/QueryAgent.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/agent/QueryAgent.java 2010-04-11 21:25:35 UTC (rev 836) +++ jetrix/trunk/src/java/net/jetrix/agent/QueryAgent.java 2010-04-11 22:42:20 UTC (rev 837) @@ -19,12 +19,11 @@ package net.jetrix.agent; -import java.io.BufferedReader; -import java.io.BufferedWriter; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.Writer; +import java.io.InputStream; +import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; import java.util.ArrayList; @@ -48,8 +47,8 @@ { private String hostname; private Socket socket; - private BufferedReader in; - private Writer out; + private InputStream in; + private OutputStream out; private Logger log = Logger.getLogger("net.jetrix"); @@ -58,8 +57,8 @@ this.hostname = hostname; socket = new Socket(); socket.connect(new InetSocketAddress(hostname, 31457), 5000); - in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "ISO-8859-1")); - out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "ISO-8859-1")); + in = new BufferedInputStream(socket.getInputStream()); + out = new BufferedOutputStream(socket.getOutputStream()); socket.setSoTimeout(10000); } @@ -73,7 +72,7 @@ public void send(String message) throws IOException { - out.write(message); + out.write(message.getBytes("ISO-8859-1")); out.write(0xFF); out.flush(); } @@ -113,9 +112,10 @@ send("version"); // read the result - String version = in.readLine(); - in.readLine(); - + QueryProtocol protocol = new QueryProtocol(); + String version = protocol.readLine(in); + protocol.readLine(in); + return version; } @@ -128,8 +128,9 @@ send("playerquery"); // read the result - String line = in.readLine(); - + QueryProtocol protocol = new QueryProtocol(); + String line = protocol.readLine(in); + if (line.startsWith("Number of players logged in: ")) { return Integer.parseInt(line.substring(line.indexOf(":") + 1).trim()); Modified: jetrix/trunk/src/java/net/jetrix/agent/TetrinetAgent.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/agent/TetrinetAgent.java 2010-04-11 21:25:35 UTC (rev 836) +++ jetrix/trunk/src/java/net/jetrix/agent/TetrinetAgent.java 2010-04-11 22:42:20 UTC (rev 837) @@ -19,10 +19,10 @@ package net.jetrix.agent; -import java.io.BufferedReader; +import java.io.BufferedInputStream; import java.io.BufferedWriter; import java.io.IOException; -import java.io.InputStreamReader; +import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.net.Socket; @@ -49,7 +49,7 @@ private int slot; private Socket socket; - private BufferedReader in; + private InputStream in; private Writer out; protected Protocol protocol = new TetrinetProtocol(); @@ -82,7 +82,7 @@ socket = new Socket(hostname, port); socket.setSoTimeout(15000); - in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "ISO-8859-1")); + in = new BufferedInputStream(socket.getInputStream()); out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "ISO-8859-1")); send(TetrinetProtocol.encode(name, version, socket.getInetAddress().getAddress(), false)); Modified: jetrix/trunk/src/java/net/jetrix/clients/ConsoleClient.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/clients/ConsoleClient.java 2010-04-11 21:25:35 UTC (rev 836) +++ jetrix/trunk/src/java/net/jetrix/clients/ConsoleClient.java 2010-04-11 22:42:20 UTC (rev 837) @@ -21,6 +21,7 @@ import java.io.*; import java.net.*; +import java.nio.charset.Charset; import java.util.*; import java.util.logging.Logger; @@ -167,6 +168,11 @@ return 0; } + public String getEncoding() + { + return Charset.defaultCharset().name(); + } + public void disconnect() { try Modified: jetrix/trunk/src/java/net/jetrix/clients/QueryClient.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/clients/QueryClient.java 2010-04-11 21:25:35 UTC (rev 836) +++ jetrix/trunk/src/java/net/jetrix/clients/QueryClient.java 2010-04-11 22:42:20 UTC (rev 837) @@ -174,7 +174,8 @@ try { - out.write(rawMessage + QueryProtocol.EOL, 0, rawMessage.length() + 1); + out.write(rawMessage.getBytes(getEncoding())); + out.write(QueryProtocol.EOL); out.flush(); if (log.isLoggable(Level.FINEST)) Modified: jetrix/trunk/src/java/net/jetrix/clients/TetrinetClient.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/clients/TetrinetClient.java 2010-04-11 21:25:35 UTC (rev 836) +++ jetrix/trunk/src/java/net/jetrix/clients/TetrinetClient.java 2010-04-11 22:42:20 UTC (rev 837) @@ -51,8 +51,8 @@ protected boolean disconnected; private boolean running; - protected Reader in; - protected Writer out; + protected InputStream in; + protected OutputStream out; protected Socket socket; protected ServerConfig serverConfig; protected Logger log = Logger.getLogger("net.jetrix"); @@ -227,7 +227,8 @@ { synchronized (out) { - out.write(rawMessage + getProtocol().getEOL(), 0, rawMessage.length() + 1); + out.write(rawMessage.getBytes(getEncoding())); + out.write(getProtocol().getEOL()); out.flush(); } @@ -280,8 +281,8 @@ this.socket = socket; try { - in = new BufferedReader(new InputStreamReader(socket.getInputStream(), ServerConfig.ENCODING)); - out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), ServerConfig.ENCODING)); + in = new BufferedInputStream(socket.getInputStream()); + out = new BufferedOutputStream(socket.getOutputStream()); } catch (IOException e) { @@ -359,6 +360,11 @@ return System.currentTimeMillis() - lastMessageTime; } + public String getEncoding() + { + return "ISO-8859-1"; + } + public void disconnect() { disconnected = true; Modified: jetrix/trunk/src/java/net/jetrix/listeners/TSpecListener.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/listeners/TSpecListener.java 2010-04-11 21:25:35 UTC (rev 836) +++ jetrix/trunk/src/java/net/jetrix/listeners/TSpecListener.java 2010-04-11 22:42:20 UTC (rev 837) @@ -19,7 +19,6 @@ package net.jetrix.listeners; -import java.io.*; import java.net.*; import net.jetrix.*; import net.jetrix.protocols.TspecProtocol; @@ -48,7 +47,7 @@ public Client getClient(Socket socket) throws Exception { TetrinetProtocol protocol = ProtocolManager.getInstance().getProtocol(TetrinetProtocol.class); - String init = protocol.readLine(new InputStreamReader(socket.getInputStream())); + String init = protocol.readLine(socket.getInputStream()); TSpecClient client = new TSpecClient(); client.setProtocol(ProtocolManager.getInstance().getProtocol(TspecProtocol.class)); Modified: jetrix/trunk/src/java/net/jetrix/listeners/TetrinetListener.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/listeners/TetrinetListener.java 2010-04-11 21:25:35 UTC (rev 836) +++ jetrix/trunk/src/java/net/jetrix/listeners/TetrinetListener.java 2010-04-11 22:42:20 UTC (rev 837) @@ -19,7 +19,6 @@ package net.jetrix.listeners; -import java.io.*; import java.net.*; import java.util.*; @@ -53,7 +52,7 @@ { // read the first line sent by the client Protocol protocol1 = protocolManager.getProtocol(TetrinetProtocol.class); - String init = protocol1.readLine(new InputStreamReader(socket.getInputStream())); + String init = protocol1.readLine(socket.getInputStream()); // test if the client is using the query protocol Protocol protocol = protocolManager.getProtocol(QueryProtocol.class); Modified: jetrix/trunk/src/java/net/jetrix/protocols/AbstractProtocol.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/protocols/AbstractProtocol.java 2010-04-11 21:25:35 UTC (rev 836) +++ jetrix/trunk/src/java/net/jetrix/protocols/AbstractProtocol.java 2010-04-11 22:42:20 UTC (rev 837) @@ -19,11 +19,12 @@ package net.jetrix.protocols; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + import net.jetrix.Protocol; -import java.io.IOException; -import java.io.Reader; - /** * Abstract protocol implementing the readLine(Reader) method. * @@ -34,25 +35,27 @@ */ public abstract class AbstractProtocol implements Protocol { - public String readLine(Reader in) throws IOException + public String readLine(InputStream in) throws IOException { - StringBuilder input = new StringBuilder(); - - int readChar; - while ((readChar = in.read()) != -1 && readChar != getEOL() && readChar != 0x0A && readChar != 0x0D) + ByteArrayOutputStream input = new ByteArrayOutputStream(256); + + // todo define a maximum line length + + int b; + while ((b = in.read()) != -1 && b != getEOL() && b != 0x0A && b != 0x0D) { - if (readChar != 0x0A && readChar != 0x0D) + if (b != 0x0A && b != 0x0D) { - input.append((char) readChar); + input.write(b); } } - - if (readChar == -1) + + if (b == -1) { throw new IOException("End of stream"); } - - return input.toString(); + + return input.toString("ISO-8859-1"); } public boolean equals(Object o) Modified: jetrix/trunk/src/java/net/jetrix/protocols/TetrinetProtocol.java =================================================================== --- jetrix/trunk/src/java/net/jetrix/protocols/TetrinetProtocol.java 2010-04-11 21:25:35 UTC (rev 836) +++ jetrix/trunk/src/java/net/jetrix/protocols/TetrinetProtocol.java 2010-04-11 22:42:20 UTC (rev 837) @@ -239,22 +239,19 @@ // newgame else if ("newgame".equals(cmd)) { - NewGameMessage newgame = new NewGameMessage(); - m = newgame; + m = new NewGameMessage(); // todo parse the game settings } // endgame else if ("endgame".equals(cmd)) { - EndGameMessage end = new EndGameMessage(); - m = end; + m = new EndGameMessage(); } // ingame else if ("ingame".equals(cmd)) { - IngameMessage ingame = new IngameMessage(); - m = ingame; + m = new IngameMessage(); } // playerlost <slot> else if ("playerlost".equals(cmd)) @@ -556,7 +553,7 @@ message.append(s.getClassicRules() ? "1" : "0"); // extended parameter for 1.14 clients - if (s.getSameBlocks() == true) + if (s.getSameBlocks()) { message.append(" "); String hexstring = Integer.toHexString(m.getSeed()).toUpperCase(); Modified: jetrix/trunk/src/test/net/jetrix/agent/QueryAgentTest.java =================================================================== --- jetrix/trunk/src/test/net/jetrix/agent/QueryAgentTest.java 2010-04-11 21:25:35 UTC (rev 836) +++ jetrix/trunk/src/test/net/jetrix/agent/QueryAgentTest.java 2010-04-11 22:42:20 UTC (rev 837) @@ -29,10 +29,12 @@ */ public class QueryAgentTest extends TestCase { + private String hostname = "tetrinet.fr"; + public void testGetVersion() throws Exception { QueryAgent agent = new QueryAgent(); - agent.connect("tetrinet.fr"); + agent.connect(hostname); String version = agent.getVersion(); agent.disconnect(); @@ -42,7 +44,7 @@ public void testGetPlayerNumber() throws Exception { QueryAgent agent = new QueryAgent(); - agent.connect("tetrinet.fr"); + agent.connect(hostname); int count = agent.getPlayerNumber(); agent.disconnect(); @@ -52,7 +54,7 @@ public void testGetChannels() throws Exception { QueryAgent agent = new QueryAgent(); - agent.connect("tetrinet.fr"); + agent.connect(hostname); List<ChannelInfo> channels = agent.getChannels(); agent.disconnect(); @@ -63,7 +65,7 @@ public void testGetPlayers() throws Exception { QueryAgent agent = new QueryAgent(); - agent.connect("tetrinet.fr"); + agent.connect("tetridome.com"); List<PlayerInfo> players = agent.getPlayers(); agent.disconnect(); @@ -74,7 +76,7 @@ public void testGetPing() throws Exception { QueryAgent agent = new QueryAgent(); - agent.connect("tetrinet.fr"); + agent.connect(hostname); long ping = agent.getPing(); agent.disconnect(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |