import java.awt.*; import java.net.*; import java.io.*; class lThread extends Thread implements constants { pClient parent = null; examinDlog examinePlayer = null; stringDlog stringDialog = null; coordDlog coordinateDialog = null; playerDlog playerDialog = null; scoreDlog scoreDialog = null; stdDlog stdDialog = null; detailDlog detailDialog = null; public lThread(pClient c) { parent = c; } public void run() { int thePacket = 0; for (;;) { thePacket = (int) parent.readLong(); /* System.out.println("Switching on packet " + thePacket); */ switch(thePacket) { case HANDSHAKE_PACKET: parent.sendString(C_RESPONSE_PACKET + clientVersion + "\0"); parent.sendString(C_RESPONSE_PACKET + parent.getParameter("num") + "\0"); parent.sendString(C_RESPONSE_PACKET + parent.getParameter("hash") + "\0"); parent.sendString(C_RESPONSE_PACKET + parent.getParameter("time") + "\0"); break; case CLOSE_CONNECTION_PACKET: lThreadQuit(); break; case PING_PACKET: parent.handlePing(); break; case ADD_PLAYER_PACKET: parent.users.AddUser(); break; case REMOVE_PLAYER_PACKET: parent.users.RemoveUser(); break; case SHUTDOWN_PACKET: parent.errorDialog.bringUp("The server is being brought down for maintenance.", "Now saving your game and logging you off.", "Please try back again in a few minutes."); break; case CLEAR_PACKET: parent.messages.ClearScreen(); break; case WRITE_LINE_PACKET: parent.messages.PrintLine(); break; case BUTTONS_PACKET: parent.buttons.Question(); break; case FULL_BUTTONS_PACKET: parent.buttons.turn(); break; case STRING_DIALOG_PACKET: stringDialog = new stringDlog(parent, false); break; case COORDINATES_DIALOG_PACKET: coordinateDialog = new coordDlog(parent); break; case PLAYER_DIALOG_PACKET: playerDialog = new playerDlog(parent); break; case PASSWORD_DIALOG_PACKET: stringDialog = new stringDlog(parent, true); break; case SCOREBOARD_DIALOG_PACKET: scoreDialog = new scoreDlog(parent); break; case DIALOG_PACKET: stdDialog = new stdDlog(parent); break; case CHAT_PACKET: parent.chat.PrintLine(); break; case ACTIVATE_CHAT_PACKET: parent.chat.activateChat(); break; case DEACTIVATE_CHAT_PACKET: parent.chat.deactivateChat(); break; case PLAYER_INFO_PACKET: examinePlayer = new examinDlog(parent); break; case CONNECTION_DETAIL_PACKET: detailDialog = new detailDlog(parent); break; case ERROR_PACKET: parent.errorDialog.bringUp("Server sent an error packet.", "Error: " + parent.readString(), "The game will now terminate."); lThreadQuit(); break; default: if (thePacket >= NAME_PACKET && thePacket <= VIRGIN_PACKET) { parent.status.UpdateStatusPane(thePacket); } else { parent.errorDialog.bringUp("Client received an unknown packet.", "readString error: " + thePacket, "The game will now terminate."); lThreadQuit(); } } } } public void lThreadQuit() { /* close the socket */ if (parent.socket != null) { try { parent.socket.close(); } catch (IOException e) { System.out.println("Error: " + e); } parent.socket = null; } /* remove the main windw */ parent.f.setVisible(false); parent.f.dispose(); /* destroy the listen thread */ stop(); } }