import processing.serial.*;      // import the serial library
import processing.net.* ;        // import the net library

final int portNum = 37300 ;
Server gameServer ;
Client leftPlayer  = null ;
Client rightPlayer = null ;
BufferedReader leftReader ;
PrintWriter    leftWriter ;
BufferedReader rightReader ;
PrintWriter    rightWriter ;



PFont myFont;
int fontSize = 36;

void setup() {
  // set the window size:
  size(640, 480);

  // create a font with the second font available to the system:
  //  Note from JDB -- this seems so strangely unpredictable
  PFont myFont = createFont(PFont.list()[2], fontSize);
  textFont(myFont);

  gameServer = new Server(this, portNum) ;
}

int[][] performGameStartProtocol(BufferedReader inStream, PrintWriter outStream) {
  try {
    String[] words ;
    // Let's read and write five lines
    // Client goes first
    for (int n=0 ; n<10; ++n) {
      words = splitTokens(inStream.readLine(), " ,\n\r\t") ;
      String repeat = "" ;
      for (int i=0; i<words.length; ++i) {
        repeat += " <" + words[i] + ">" ;
      }
      outStream.write("Tokens of line " + n + ":" + repeat + "\n\r") ;
      outStream.flush() ;
    }
  } catch(IOException ioe) { }
  return null ;
}

void displayWaitingMessage() {
  if (leftPlayer == null) {
    text("Waiting for first player", 100, 100) ;
  } else if (rightPlayer == null) {
    text("Waiting for second player", 100, 100) ;
  } else {
    text(leftPlayer.ip() + " vs " + rightPlayer.ip(), 100, 100) ;
  }
}

void draw() {
  background(0) ;
  if (leftPlayer == null) {
    if (gameServer.available() != null && gameServer.clientCount > 0) {
      leftPlayer = gameServer.clients[0] ;
      leftReader = createReader(leftPlayer.input) ;
      leftWriter = createWriter(leftPlayer.output) ;
      performGameStartProtocol(leftReader, leftWriter) ;
    } else {
      displayWaitingMessage() ;
    }
  } else if (rightPlayer == null) {
    if (gameServer.available() != null && gameServer.clientCount > 1 ) {
      rightPlayer = gameServer.clients[1] ;
      rightReader = createReader(rightPlayer.input) ;
      rightWriter = createWriter(rightPlayer.output) ;
      performGameStartProtocol(rightReader, rightWriter) ;
    } else {
      displayWaitingMessage() ;
    }
  } else /* two Players! */ {
    text(leftPlayer.ip() + " vs " + rightPlayer.ip(), 100, 100) ;    
  }
}

