public void elaborateShootRequest(int x, int y, String side) {
   String controllerQuery = null;
   if (side.equals("guest")) {
     controllerQuery = cont.shootAtHostSide(x, y);
   }
   if (side.equals("host")) {
     controllerQuery = cont.shootAtGuestSide(x, y);
   }
   for (ServerService s : services) {
     s.sendMessageToClients(controllerQuery);
   }
   if (controllerQuery.startsWith("water")) waterResponse(controllerQuery);
   if (controllerQuery.startsWith("hit")) hitResponse(controllerQuery);
   if (controllerQuery.startsWith("destroyed")) destroyedResponse(controllerQuery);
   if (controllerQuery.startsWith("allShipsDestroyed")) allShipsDestroyed(controllerQuery);
 }
 public NetDaemon(boolean isServer, Game gameData, ConnectionInProgress cip, Controller cont) {
   setDaemon(true);
   playersServerSide = new ArrayList<String>();
   opponentResponse = false;
   serverResponse = false;
   ready = false;
   this.isServer = isServer;
   this.gameData = gameData;
   this.cont = cont;
   if (isServer) clients = cont.getGuestPlayers() + cont.getHostPlayers() - 1;
   clientsJoined = 0;
   players = clients;
   this.cip = cip;
   setPriority(Thread.MIN_PRIORITY);
   services = new ArrayList<ServerService>();
   responseFromServer = null;
   requestToServer = null;
   sSocket = null;
   mw = null;
   shouldRun = true;
 }
 public String[] getServerSidePlayers() {
   if (!isServer) {
     requestToServer.println("serverSidePlayerList");
     while (!serverResponse) {}
     playersServerSide = new ArrayList<String>();
     if (spl == null) return new String[1];
   }
   if (isServer) spl = cont.getServerSidePlayerList();
   StringTokenizer st = new StringTokenizer(spl);
   while (st.hasMoreTokens()) playersServerSide.add(st.nextToken());
   String[] t = new String[playersServerSide.size()];
   for (int l = 0; l < playersServerSide.size(); l++) t[l] = playersServerSide.get(l);
   serverResponse = false;
   return t;
 }
 public boolean placeShipsOnField(
     String field, String alignment, String shipName, int xStartCoordinate, int yStartCoordinate) {
   if (!gameData.shipAlreadyPlaced(shipName, alignment, xStartCoordinate, yStartCoordinate)) {
     if (!isServer) {
       requestToServer.println(
           "placeShip "
               + field
               + " "
               + alignment
               + " "
               + shipName
               + " "
               + xStartCoordinate
               + " "
               + yStartCoordinate);
       return true;
     }
     if (isServer) {
       boolean controllerQuery =
           cont.addShip(shipName, alignment, field, xStartCoordinate, yStartCoordinate);
       if (controllerQuery) {
         gameData.placeShipsOnField(alignment, shipName, xStartCoordinate, yStartCoordinate);
         for (ServerService s : services) {
           s.sendMessageToClients(
               "placeShip "
                   + field
                   + " "
                   + alignment
                   + " "
                   + shipName
                   + " "
                   + xStartCoordinate
                   + " "
                   + yStartCoordinate);
         }
         return true;
       }
     }
   }
   return false;
 }
 public void elaboratePlaceRequest(
     String field, String alignment, String shipName, int xStartCoordinate, int yStartCoordinate) {
   boolean controllerResponse = false;
   controllerResponse =
       cont.addShip(shipName, alignment, field, xStartCoordinate, yStartCoordinate);
   if (controllerResponse) {
     for (ServerService s : services) {
       s.sendMessageToClients(
           "shipSuccessfullyPlaced "
               + field
               + " "
               + alignment
               + " "
               + shipName
               + " "
               + new Integer(xStartCoordinate).toString()
               + " "
               + new Integer(yStartCoordinate).toString());
     }
   }
 }
 public void run() {
   if (isServer) {
     try {
       sSocket = new ServerSocket(portNr);
     } catch (IOException e) {
       e.printStackTrace();
     }
     while (shouldRun) {
       try {
         Socket s = sSocket.accept();
         ServerService c = new ServerService(s, gameData, this, cont);
         services.add(c);
         c.start();
         clientsJoined++;
         System.out.println(
             clientsJoined + " " + cont.getHostPlayers() + " " + cont.getGuestPlayers());
         if (clientsJoined == cont.getHostPlayers() + cont.getGuestPlayers() - 1) {
           System.out.println("ready");
           ready = true;
         }
       } catch (IOException e) {
         e.printStackTrace();
       }
     }
     for (ServerService a : services) a.setShouldRun(false);
   } else {
     while (shouldRun) {
       try {
         String response = responseFromServer.readLine();
         if (response.startsWith("spl")) {
           spl = response.substring(3);
           serverResponse = true;
         }
         if (response.startsWith("opl")) {
           opponentResponse = true;
           opl = response.substring(3);
         }
         if (response.startsWith("gamechallenge")) serverGameData = response;
         if (response.equals("sidefull")) cs.playerNotAdded();
         if (response.equals("playeradded")) cs.playerAdded();
         if (response.startsWith("chat")) {
           parseChatMessage(response);
         }
         if (response.startsWith("water")) {
           waterResponse(response);
         }
         if (response.startsWith("hit")) {
           System.out.println("ship shot");
           hitResponse(response);
         }
         if (response.startsWith("shipSuccessfullyPlaced")) {
           shipPlacedResponse(response);
         }
         if (response.startsWith("destroyed")) {
           destroyedResponse(response);
         }
         if (response.equals("endGame")) {
           closeDown();
         }
         if (response.startsWith("allShipsDestroyed")) allShipsDestroyed(response);
         response = null;
       } catch (IOException e) {
         e.printStackTrace();
       }
     }
   }
 }