public void save() { try { attributes = "~cIC\n" + characterInventory.getTotalCapacity() + "\ncIC~\n\n" + "~cI\n" + getItemNames() + "\ncI~\n\n" + "~cC\n" + room.getRoom() + "\ncC~\n\n" + "~cSc\n" + score + "\ncSc~\n\n"; r.writeStringToFile(attributes); } catch (FileNotFoundException ex) { Logger.getLogger(Character.class.getName()).log(Level.SEVERE, null, ex); ex.printStackTrace(); System.out.println("File not found"); } catch (IOException ex) { Logger.getLogger(Character.class.getName()).log(Level.SEVERE, null, ex); ex.printStackTrace(); System.out.println("I/O error."); } }
// Message format, always two lines // signal\r\n // data\r\n // QUERY : // CREATE : RoomName UserName Grid // CONNECT : Index // TEARDOWN : Index // Room store format // UserName RoomName Grid Index private void handleMessage() throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); PrintWriter pw = new PrintWriter(client.getOutputStream()); System.out.println(Thread.currentThread().getName() + " Wait for Signal"); String ss = in.readLine(); int signal = Integer.valueOf(ss); switch (signal) { case BingoSignal.QUERY: // Begin signal System.out.println(Thread.currentThread().getName() + " QUERY"); pw.println(BingoSignal.QUERY); /*for(String info: Room.getRoomsInfo()) pw.println(info);*/ for (String s : Room.getRoomsInfo()) pw.println(s); pw.println("Q_DONE"); pw.flush(); System.out.println(Thread.currentThread().getName() + " QUERY DONE"); for (String s : Room.getRoomsInfo()) System.out.println(s); // Ending signal // send back break; case BingoSignal.CREATE: { System.out.println(Thread.currentThread().getName() + " CREATE"); new HandleCreate(client).start(); System.out.println(Thread.currentThread().getName() + " CREATE DONE"); break; } case BingoSignal.TEARDOWN: { System.out.println(Thread.currentThread().getName() + " TEARDOWN"); for (String s : Room.getRoomsInfo()) System.out.println(s); int index = Integer.valueOf(in.readLine()); Room.removeRoom(index); pw.println(BingoSignal.TEARDOWN); pw.flush(); System.out.println(Thread.currentThread().getName() + " TEARDOWN DONE"); break; } case BingoSignal.CONNECT: { // send to both System.out.println(Thread.currentThread().getName() + " CONNECT"); int mIndex = Integer.valueOf(in.readLine()); ServerSocket nServer = new ServerSocket(0); pw.println(nServer.getLocalPort()); pw.flush(); Socket participant = nServer.accept(); System.out.println(Thread.currentThread().getName() + " ACCEPT"); Pair guest = new Pair(participant, nServer); Room.getRoom(mIndex).addParticipant(guest); System.out.println(Thread.currentThread().getName() + " GUEST"); Room.getRoom(mIndex).GameRoomStart(); System.out.println(Thread.currentThread().getName() + " CONNECT DONE"); break; } default: // garbage System.out.println(ss); break; } }