/*
* Copyright (c) 2000-2007 by Rodney Kinney
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License (LGPL) as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, copies are available
* at http://www.opensource.org.
*/
/*
* Copyright (c) 2003 by Rodney Kinney. All rights reserved.
* Date: Jun 4, 2003
*/
package VASSAL.chat.node;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;
import VASSAL.tools.ArgsParser;
/**
* The server-side Main class
*/
public class Server extends Thread {
private AsynchronousServerNode rootNode;
private ServerSocket socket;
public Server(AsynchronousServerNode rootNode, int port) throws IOException {
this.rootNode = rootNode;
socket = new ServerSocket(port);
System.err.println("Started server on port " + port); //$NON-NLS-1$
start();
}
public void run() {
int consecutiveFailures = 0;
while (consecutiveFailures < 10) {
try {
Socket s = socket.accept();
new PlayerNode(s, rootNode);
consecutiveFailures = 0;
}
// FIXME: review error message
catch (Exception e) {
e.printStackTrace();
consecutiveFailures++;
}
}
System.exit(1);
}
public static void main(String[] args) throws Exception {
Properties p = new ArgsParser(args).getProperties();
int port = Integer.parseInt(p.getProperty("port", "5050")); //$NON-NLS-1$ //$NON-NLS-2$
String reportURL = p.getProperty("URL", "http://www.vassalengine.org/util/"); //$NON-NLS-1$ //$NON-NLS-2$
if ("null".equals(reportURL)) { //$NON-NLS-1$
reportURL = null;
}
if (!"true".equals(p.getProperty("test"))) { //$NON-NLS-1$ //$NON-NLS-2$
new Server(new AsynchronousServerNode(reportURL), port);
new LockWatcher(1000L*60*30,1000L*60,port).start();
}
if (p.getProperty("test") != null) { //$NON-NLS-1$
Socket soc = new Socket("localHost", port); //$NON-NLS-1$
SocketHandler handler = new BufferedSocketHandler(soc, new SocketWatcher() {
public void handleMessage(String msg) {
System.err.println(msg);
}
public void socketClosed(SocketHandler handler) {
}
});
handler.start();
handler.writeLine(Protocol.encodeRegisterCommand("rk", "test/Main Room", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
final BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
try {
String line;
while ((line = reader.readLine()) != null) {
if (line.startsWith("JOIN")) { //$NON-NLS-1$
final String room = line.substring("JOIN".length()).trim(); //$NON-NLS-1$
handler.writeLine(Protocol.encodeJoinCommand("test/" + room)); //$NON-NLS-1$
}
else if (line.startsWith("BYE")) { //$NON-NLS-1$
handler.close();
}
else if (line.startsWith("HELLO")) { //$NON-NLS-1$
soc = new Socket("localHost", port); //$NON-NLS-1$
handler = new BufferedSocketHandler(soc, new SocketWatcher() {
public void handleMessage(String msg) {
System.err.println(msg);
}
public void socketClosed(SocketHandler handler) {
}
});
handler.start();
handler.writeLine(Protocol.encodeRegisterCommand("rk", "test/Main Room", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
else if (line.startsWith("*")) { //$NON-NLS-1$
int length = Integer.parseInt(line.substring(1));
final StringBuilder buffer = new StringBuilder();
for (int i=0;i<length;++i) {
char c = (char) ('a' + i%10);
if (c == 'a') {
c = 'A';
}
buffer.append(c);
}
String msg = Protocol.encodeForwardCommand("test/*",buffer.toString()); //$NON-NLS-1$
handler.writeLine(msg);
}
else {
handler.writeLine(line);
}
}
}
finally {
try {
reader.close();
}
// FIXME: review error message
catch (IOException e) {
e.printStackTrace();
}
}
}
}
}