package vn.edu.rmit.sadi;
public class GameHandler implements Runnable {
private Communicator client1;
private Communicator client2;
private GameBoard gameboard = new GameBoard();
private Player currentTurn = Player.Player1;
public void add(Communicator client) {
if (client1 == null) {
client1 = client;
} else {
client2 = client;
}
}
public void run() {
client1.write(Status.Continue);
while (true) {
Communicator current = currentTurn == Player.Player1 ? client1 : client2;
Communicator other = current == client1 ? client2 : client1;
Move move = (Move)current.read();
Status status = gameboard.move(currentTurn, move);
other.write(move);
switch (status) {
case Continue:
other.write(Status.Continue);
currentTurn = currentTurn == Player.Player1 ? Player.Player2 : Player.Player1;
break;
case Win:
current.write(Status.Win);
other.write(Status.Lose);
current.close();
other.close();
return;
case Tie:
current.write(Status.Tie);
other.write(Status.Tie);
current.close();
other.close();
return;
default:
throw new RuntimeException("Illegal state");
}
}
}
}