package ww10;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import ww10.WW10Protocol.PrologBotDescription;
public class PrologBotServer implements Runnable {
public final int port;
private boolean running = true;
private ServerSocket serverSocket;
public PrologBotServer() {
this(20000);
}
public PrologBotServer(int port) {
this.port = port;
try {
serverSocket = new ServerSocket(port);
} catch (IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
System.out.println("Could not listen on port: " + port);
System.exit(-1);
}
}
public void stop() throws IOException {
running = false;
serverSocket.close();
}
@Override
public void run() {
while (running) {
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
System.out.println("Incoming connection");
InputStream inputStream = clientSocket.getInputStream();
OutputStream outputStream = clientSocket.getOutputStream();
read(inputStream);
inputStream.close();
outputStream.close();
clientSocket.close();
} catch (IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
System.out.println("Accept failed: 4444");
System.exit(-1);
}
}
}
private void read(InputStream inputStream) {
try {
PrologBotDescription bot = PrologBotDescription.parseFrom(inputStream);
onNewBot(bot);
} catch (IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
System.out.println("Could not parse from inputstream.");
System.exit(-1);
}
}
protected void onNewBot(PrologBotDescription bot) {
}
public static void main(String[] args) {
(new PrologBotServer() {
@Override
protected void onNewBot(PrologBotDescription bot) {
System.out.println(bot.toString());
}
}).run();
}
}