MiniServer.java
import java.net.*;
import java.io.*;
/**
*/
public class MiniServer implements Runnable,Stoppable,Nameable
{
private String name;
private Socket sock;
private Packetizer packer;
private Object model;
private boolean done = false;
public MiniServer(String name,Socket sock,Object model)
{
this.name = name;
this.sock = sock;
this.model = model;
player = new Player(name);
model.addPlayer(player);
try {
packer = new Packetizer(sock,new XSBuilder());
}
catch(IOException e_io) {
System.err.println(
"Exception creating Packetizer: " + e_io);
packer = null;
}
}
public void stop()
{
done = true;
}
public void rename(String newname)
{
name = newname;
}
public String toString()
{
return "MiniServer[" +
"name='" + name + "'," +
"port=" + sock.getPort() + "]";
}
public void run()
{
if (packer == null)
return;
packer.start();
try {
while (!done) {
if (packer.messageAvailable()) {
Object obj = packer.readMessage();
System.err.println(name + " rcvd: " + obj);
if (obj == null)
break; // XXX Never happens.
if (obj instanceof CommandObject) {
CommandObject call = (CommandObject)obj;
Object answer = call.doCommand(model);
packer.sendMessage(answer);
System.err.println(name + " sent: " + answer);
}
if (obj instanceof ControlObject) {
((ControlObject)obj).doFunction(this);
packer.sendMessage("OK");
System.err.println(name + " sent: OK");
}
}
Thread.sleep(20);
}
System.err.println(this + " -- stopping.");
}
catch(InterruptedException e_ie) {
System.out.println(this + " -- Interrupted: " + e_ie);
}
finally {
if (packer != null)
packer.stop();
}
}
}