phantasia4/
phantasia4/conf/
phantasia4/phantasia/bin/
phantasia4/phantasia/src/utilities/
phantasia4/public_html/cgi-bin/
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;
    passDlog passwordDialog = null;
    scoreDlog scoreDialog = null;

    public lThread(pClient c) {
	parent = c;

        stringDialog = new stringDlog(parent);
        coordinateDialog = new coordDlog(parent);
        playerDialog = new playerDlog(parent);
	passwordDialog = new passDlog(parent);

    }

    public void run() {

	int thePacket = 0;
	stdDlog stdDialog = null;
	detailDlog detailDialog = null;
        examinePlayer = null;

	for (;;) {

	    thePacket = (int) parent.readLong();
	    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.bringUp();
		break;

	    case COORDINATES_DIALOG_PACKET:
		coordinateDialog.bringUp();
		break;

	    case PLAYER_DIALOG_PACKET:
		playerDialog.bringUp();
		break;

	    case PASSWORD_DIALOG_PACKET:
		passwordDialog.bringUp();
		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.bringUp();
		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.hide();
        parent.f.dispose();

            /* destroy the listen thread */
        stop();
    }
}