package module.client;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.swing.text.Document;
import module.client.gui.ClientGUI;
import module.utility.EnDecoder;
import module.utility.IOUtil;
import module.utility.Parse;
public class ClientUser extends Thread {
private static boolean isExists = false;
private ClientGUI gui;
private Socket connect = null;
private BufferedReader inFromServer = null;
private boolean clientRun = true;
public ClientUser() {
if (isExists)
return;
isExists = true;
gui = new ClientGUI();
}
public boolean connectToServer(String ip, int port) {
InetAddress serverIP = null;
Socket temp = null;
try { // parse IP
serverIP = InetAddress.getByName(ip);
temp = new Socket(serverIP, port);
gui.setOutToServer(new DataOutputStream(temp.getOutputStream()));
if (connect != null)
connect.close();
connect = temp;
} catch (UnknownHostException e) {
System.out.println("Client: unknown host exception");
return false;
} catch (SocketException e) {
System.out.println("Client: socket exception");
return false;
} catch (IOException e) {
System.out.println("Client: IO exception");
return false;
}
return true;
}
public void run() {
try {
inFromServer = new BufferedReader(new InputStreamReader(
connect.getInputStream(), "UTF-8"));
String input = null;
String[] temp;
while (clientRun) {
input = IOUtil.readLineFromClientSocket(inFromServer);
input = EnDecoder.decodeChangeLine(input);
temp = input.split(":");
if (temp[0].equals("status")) { // messages to refresh the
// status
String out = Parse.mergeString(temp, 1, ':');
gui.getStatusPanel().setText("");
gui.getStatusPanel().setText(out);
} else { // message to display on the screen
synchronized (ClientGUI.class) {
gui.getScreenPanel().append(input + "\n");
Document doc = gui.getScreenPanel().getDocument();
gui.getScreenPanel().setCaretPosition(doc.getLength());
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
} finally {
try {
inFromServer.close();
gui.getMainFrame().dispatchEvent(new WindowEvent(
gui.getMainFrame(), WindowEvent.WINDOW_CLOSING));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// shock add for BattleTaskTest
public ClientGUI getGUI() {
return gui;
}
// shock add end
}