/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.client.conn;
import com.bean.ActionRequestBean;
import com.client.gui.ClientMain;
import com.client.util.Utility;
import java.awt.Frame;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
/**
*
* @author Administrator
*/
public class ConnectionManager implements Runnable {
public static String serverIP = "";
public static boolean serverStarted = false;
public static final int SERVER_PORT = 9000;
Socket clientSocket = null;
public static boolean notConneted = true;
RequestHandler requestHandler = null;
ClientMain clientMain = null;
private final String IPADDRESS_PATTERN = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
+ "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
+ "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
+ "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
public ConnectionManager(ClientMain clientMain) {
this.clientMain = clientMain;
requestHandler = new RequestHandler();
}
public void startClient() {
Thread clientThread = new Thread(this);
clientThread.start();
}
public void run() {
Pattern pattern = Pattern.compile(IPADDRESS_PATTERN);
while (notConneted) {
try {
String ipString = JOptionPane.showInputDialog(null, "IP Address", "");
if (ipString == null) {
System.exit(0);
} else {
Matcher matcher = pattern.matcher(ipString);
if (matcher.find()) {
clientSocket = new Socket(ipString, SERVER_PORT);
sendDataToServer(new Utility().getSystemInformations());
notConneted = false;
serverStarted = true;
DesktopImageManger desktopImageManger = new DesktopImageManger(this);
Thread sendScreenThread = new Thread(desktopImageManger);
sendScreenThread.start();
while (serverStarted) {
ObjectInputStream readFromClient = new ObjectInputStream(
clientSocket.getInputStream());
Object readData = readFromClient.readObject();
processClientData(readData);
}
} else {
JOptionPane.showMessageDialog(null, "Invalid IP Address", "Invalid IP", JOptionPane.ERROR_MESSAGE);
}
}
} catch (ClassNotFoundException ex) {
Logger.getLogger(ConnectionManager.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnknownHostException ex) {
JOptionPane.showMessageDialog(null, "Falied to Connect to server",
"Connect to Server", JOptionPane.ERROR_MESSAGE);
// System.exit(0);
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage(),
"Connect to Server", JOptionPane.ERROR_MESSAGE);
// System.exit(0);
}
}
}
public synchronized void sendDataToServer(Object data) throws IOException {
if (clientSocket != null) {
ObjectOutputStream writeToServer = new ObjectOutputStream(
clientSocket.getOutputStream());
writeToServer.writeObject(data);
writeToServer.flush();
}
}
private void processClientData(Object readData) {
if (readData instanceof String) {
String data = (String) readData;
try {
if (data.startsWith("MESSAGE:")) {
clientMain.chatWithServerJFrame.viewSendReceiveMsg(data.substring(7));
clientMain.chatWithServerJFrame.setVisible(true);
clientMain.chatWithServerJFrame.setState(Frame.NORMAL);
} else if (data.startsWith("ERROR:")) {
clientMain.chatWithServerJFrame.viewErreorMsg(data.substring(6));
clientMain.chatWithServerJFrame.setVisible(true);
clientMain.chatWithServerJFrame.setState(Frame.NORMAL);
} else if (data.startsWith("TIME:")) {
String msg = data.trim();
String time = msg.substring(msg.indexOf(":") + 1, msg.length());
System.out.println("..." + time + "....");
try {
int parseInt = Integer.parseInt(time);
if (parseInt == 0) {
DesktopImageManger.delay = 100;
} else {
DesktopImageManger.delay = 1000 * parseInt * 60;
System.out.println("Time Changed");
}
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
} else if (data.startsWith("ALERT:")) {
String msg = data.trim();
String info = msg.substring(msg.indexOf(":") + 1, msg.length());
String title = info.substring(0, info.indexOf("|"));
String content = info.substring(info.indexOf("|") + 1, info.length());
JOptionPane.showMessageDialog(null, content, "Alert From Admin : " + title, JOptionPane.WARNING_MESSAGE);
}
} catch (StringIndexOutOfBoundsException ex) {
ex.printStackTrace();
}
requestHandler.processServerRequest((String) readData);
} else if (readData instanceof ActionRequestBean) {
requestHandler.actionHandler((ActionRequestBean) readData);
}
}
}