client
Clone or download
Modified Files
package com.StreamPi.Client.Connection;
package com.StreamPi.Client.Connection;
import com.StreamPi.ActionAPI.Action.Action;
import com.StreamPi.ActionAPI.Action.Action;
import com.StreamPi.ActionAPI.Action.ActionType;
import com.StreamPi.ActionAPI.Action.ActionType;
import com.StreamPi.ActionAPI.Action.DisplayTextAlignment;
import com.StreamPi.ActionAPI.Action.DisplayTextAlignment;
import com.StreamPi.ActionAPI.Action.Location;
import com.StreamPi.ActionAPI.Action.Location;
import com.StreamPi.ActionAPI.ActionProperty.ClientProperties;
import com.StreamPi.ActionAPI.ActionProperty.ClientProperties;
import com.StreamPi.ActionAPI.ActionProperty.Property.Property;
import com.StreamPi.ActionAPI.ActionProperty.Property.Property;
import com.StreamPi.ActionAPI.ActionProperty.Property.Type;
import com.StreamPi.ActionAPI.ActionProperty.Property.Type;
import com.StreamPi.Client.IO.Config;
import com.StreamPi.Client.IO.Config;
import com.StreamPi.Client.Info.ClientInfo;
import com.StreamPi.Client.Info.ClientInfo;
import com.StreamPi.Client.Profile.ClientProfile;
import com.StreamPi.Client.Profile.ClientProfile;
import com.StreamPi.Client.Profile.ClientProfiles;
import com.StreamPi.Client.Profile.ClientProfiles;
import com.StreamPi.Client.Window.ExceptionAndAlertHandler;
import com.StreamPi.Client.Window.ExceptionAndAlertHandler;
import com.StreamPi.Client.Window.Dashboard.ActionGridPane.ActionBox;
import com.StreamPi.Client.Window.Dashboard.ActionGridPane.ActionBox;
import com.StreamPi.ThemeAPI.Theme;
import com.StreamPi.ThemeAPI.Theme;
import com.StreamPi.Util.Alert.StreamPiAlertType;
import com.StreamPi.Util.Alert.StreamPiAlertType;
import com.StreamPi.Util.Exception.MinorException;
import com.StreamPi.Util.Exception.MinorException;
import com.StreamPi.Util.Exception.SevereException;
import com.StreamPi.Util.Exception.SevereException;
import com.StreamPi.Util.Exception.StreamPiException;
import com.StreamPi.Util.Exception.StreamPiException;
import com.StreamPi.Util.Platform.Platform;
import com.StreamPi.Util.Platform.Platform;
import com.StreamPi.Util.Platform.ReleaseStatus;
import com.StreamPi.Util.Platform.ReleaseStatus;
import com.StreamPi.Util.Version.Version;
import com.StreamPi.Util.Version.Version;
import javafx.concurrent.Task;
import javafx.concurrent.Task;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert;
import java.io.*;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.LogManager;
import java.util.logging.LogManager;
import java.util.logging.Logger;
import java.util.logging.Logger;
public class Client extends Thread{
public class Client extends Thread{
private Socket socket;
private Socket socket;
//private Logger logger;
//private Logger logger;
private DataOutputStream dos;
private DataOutputStream dos;
private DataInputStream dis;
private DataInputStream dis;
private AtomicBoolean stop = new AtomicBoolean(false);
private AtomicBoolean stop = new AtomicBoolean(false);
private ClientListener clientListener;
private ClientListener clientListener;
private ExceptionAndAlertHandler exceptionAndAlertHandler;
private ExceptionAndAlertHandler exceptionAndAlertHandler;
private ClientInfo clientInfo;
private ClientInfo clientInfo;
private String serverIP;
private String serverIP;
private int serverPort;
private int serverPort;
private Logger logger;
private Logger logger;
public Client(String serverIP, int serverPort, ClientListener clientListener, ExceptionAndAlertHandler exceptionAndAlertHandler)
public Client(String serverIP, int serverPort, ClientListener clientListener, ExceptionAndAlertHandler exceptionAndAlertHandler)
{
{
this.serverIP = serverIP;
this.serverIP = serverIP;
this.serverPort = serverPort;
this.serverPort = serverPort;
this.exceptionAndAlertHandler = exceptionAndAlertHandler;
this.exceptionAndAlertHandler = exceptionAndAlertHandler;
this.clientInfo = ClientInfo.getInstance();
this.clientInfo = ClientInfo.getInstance();
this.clientListener = clientListener;
this.clientListener = clientListener;
logger = Logger.getLogger(Client.class.getName());
logger = Logger.getLogger(Client.class.getName());
new Thread(new Task<Void>() {
new Thread(new Task<Void>() {
@Override
@Override
protected Void call()
protected Void call()
{
{
try
try
{
{
try {
try {
logger.info("Trying to connect to server at "+serverIP+":"+serverPort);
logger.info("Trying to connect to server at "+serverIP+":"+serverPort);
socket = new Socket();
socket = new Socket();
socket.connect(new InetSocketAddress(serverIP, serverPort), 5000);
socket.connect(new InetSocketAddress(serverIP, serverPort), 5000);
clientListener.setConnected(true);
clientListener.setConnected(true);
clientListener.updateSettingsConnectDisconnectButton();
clientListener.updateSettingsConnectDisconnectButton();
logger.info("Connected to "+socket.getRemoteSocketAddress()+" !");
logger.info("Connected to "+socket.getRemoteSocketAddress()+" !");
} catch (IOException e) {
} catch (IOException e) {
e.printStackTrace();
e.printStackTrace();
clientListener.setConnected(false);
clientListener.setConnected(false);
clientListener.updateSettingsConnectDisconnectButton();
clientListener.updateSettingsConnectDisconnectButton();
throw new MinorException("Connection Error", "Unable to connect to server. Please check settings and connection and try again.");
throw new MinorException("Connection Error", "Unable to connect to server. Please check settings and connection and try again.");
}
}
try
try
{
{
dos = new DataOutputStream(socket.getOutputStream());
dos = new DataOutputStream(socket.getOutputStream());
dis = new DataInputStream(socket.getInputStream());
dis = new DataInputStream(socket.getInputStream());
}
}
catch (IOException e)
catch (IOException e)
{
{
logger.severe(e.getMessage());
logger.severe(e.getMessage());
e.printStackTrace();
e.printStackTrace();
throw new MinorException("Unable to set up IO Streams to server. Check connection and try again.");
throw new MinorException("Unable to set up IO Streams to server. Check connection and try again.");
}
}
start();
start();
} catch (MinorException e)
} catch (MinorException e)
{
{
exceptionAndAlertHandler.handleMinorException(e);
exceptionAndAlertHandler.handleMinorException(e);
}
}
return null;
return null;
}
}
}).start();
}).start();
}
}
public synchronized void exit()
public synchronized void exit()
{
{
if(stop.get())
if(stop.get())
return;
return;
logger.info("Stopping ...");
logger.info("Stopping ...");
try
try
{
{
if(socket!=null)
if(socket!=null)
{
{
disconnect();
disconnect();
}
}
}
}
catch (SevereException e)
catch (SevereException e)
{
{
logger.severe(e.getMessage());
logger.severe(e.getMessage());
exceptionAndAlertHandler.handleSevereException(e);
exceptionAndAlertHandler.handleSevereException(e);
e.printStackTrace();
e.printStackTrace();
}
}
}
}
public void writeToStream(String text) throws SevereException
public void writeToStream(String text) throws SevereException
{
{
/*try
/*try
{
{
logger.debug(text);
logger.debug(text);
dos.writeUTF(text);
dos.writeUTF(text);
dos.flush();
dos.flush();
}
}
catch (IOException e)
catch (IOException e)
{
{
e.printStackTrace();
e.printStackTrace();
throw new SevereException("Unable to write to IO Stream!");
throw new SevereException("Unable to write to IO Stream!");
}*/
}*/
try
try
{
{
byte[] txtBytes = text.getBytes();
byte[] txtBytes = text.getBytes();
Thread.sleep(50);
Thread.sleep(50);
dos.writeUTF("string:: ::");
dos.writeUTF("string:: ::");
dos.flush();
dos.flush();
dos.writeInt(txtBytes.length);
dos.writeInt(txtBytes.length);
dos.flush();
dos.flush();
write(txtBytes);
write(txtBytes);
dos.flush();
dos.flush();
}
}
catch (IOException | InterruptedException e)
catch (IOException | InterruptedException e)
{
{
e.printStackTrace();
e.printStackTrace();
throw new SevereException("Unable to write to IO Stream!");
throw new SevereException("Unable to write to IO Stream!");
}
}
}
}
public void write(byte[] array) throws SevereException
public void write(byte[] array) throws SevereException
{
{
try
try
{
{
dos.write(array);
dos.write(array);
}
}
catch (IOException e)
catch (IOException e)
{
{
logger.severe(e.getMessage());
logger.severe(e.getMessage());
e.printStackTrace();
e.printStackTrace();
throw new SevereException("Unable to write to IO Stream!");
throw new SevereException("Unable to write to IO Stream!");
}
}
}
}
@Override
@Override
public void run() {
public void run() {
try
try
{
{
while(!stop.get())
while(!stop.get())
{
{
String msg = "";
String msg = "";
try
try
{
{
String raw = dis.readUTF();
String raw = dis.readUTF();
System.out.println("AAAAAAAAAAAAAAAAAA : "+raw);
System.out.println("AAAAAAAAAAAAAAAAAA : "+raw);
int length = dis.readInt();
int length = dis.readInt();
String[] precursor = raw.split("::");
String[] precursor = raw.split("::");
String inputType = precursor[0];
String inputType = precursor[0];
String secondArg = precursor[1];
String secondArg = precursor[1];
//ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
/*int count;
/*int count;
int chunkSize = 512;
int chunkSize = 512;
while (length>0)
while (length>0)
{
{
if(chunkSize > length)
if(chunkSize > length)
chunkSize = length;
chunkSize = length;
else
else
chunkSize = 512;
chunkSize = 512;
byte[] buffer = new byte[chunkSize];
byte[] buffer = new byte[chunkSize];
count = dis.read(buffer);
count = dis.read(buffer);
byteArrayOutputStream.write(buffer);
byteArrayOutputStream.write(buffer);
length-=count;
length-=count;
}*/
}*/
/*byte[] buffer = new byte[8192];
/*byte[] buffer = new byte[8192];
int read;
int read;
while((read = dis.read(buffer)) != -1){
while((read = dis.read(buffer)) != -1){
System.out.println("READ : "+read);
System.out.println("READ : "+read);
byteArrayOutputStream.write(buffer, 0, read);
byteArrayOutputStream.write(buffer, 0, read);
}
}
byteArrayOutputStream.close();
byteArrayOutputStream.close();
byte[] bArr = byteArrayOutputStream.toByteArray();*/
byte[] bArr = byteArrayOutputStream.toByteArray();*/
byte[] bArr = new byte[length];
byte[] bArr = new byte[length];
dis.readFully(bArr);
dis.readFully(bArr);
if(inputType.equals("string"))
if(inputType.equals("string"))
{
{
msg = new String(bArr);
msg = new String(bArr);
}
}
else if(inputType.equals("action_icon"))
else if(inputType.equals("action_icon"))
{
{
System.out.println("asdsdsxxxxxxxxxxxxxxxxxxxxxxxxxxx");
System.out.println("asdsdsxxxxxxxxxxxxxxxxxxxxxxxxxxx");
String[] secondArgSep = secondArg.split("!!");
String[] secondArgSep = secondArg.split("!!");
String profileID = secondArgSep[0];
String profileID = secondArgSep[0];
String actionID = secondArgSep[1];
String actionID = secondArgSep[1];
clientListener.getClientProfiles().getProfileFromID(profileID).saveActionIcon(actionID, bArr);
clientListener.getClientProfiles().getProfileFromID(profileID).saveActionIcon(actionID, bArr);
Action a = clientListener.getClientProfiles().getProfileFromID(profileID).getActionFromID(actionID);
Action a = clientListener.getClientProfiles().getProfileFromID(profileID).getActionFromID(actionID);
clientListener.clearActionBox(a.getLocation().getCol(), a.getLocation().getRow());
clientListener.clearActionBox(a.getLocation().getCol(), a.getLocation().getRow());
clientListener.renderAction(profileID, a);
clientListener.renderAction(profileID, a);
continue;
continue;
}
}
}
}
catch (IOException e)
catch (IOException e)
{
{
logger.severe(e.getMessage());
logger.severe(e.getMessage());
e.printStackTrace();
e.printStackTrace();
clientListener.setConnected(false);
clientListener.setConnected(false);
clientListener.updateSettingsConnectDisconnectButton();
clientListener.updateSettingsConnectDisconnectButton();
if(!stop.get())
if(!stop.get())
{
{
//isDisconnect.set(true); //Prevent running disconnect
//isDisconnect.set(true); //Prevent running disconnect
throw new MinorException("Accidentally disconnected from Server! (Failed at readUTF)");
throw new MinorException("Accidentally disconnected from Server! (Failed at readUTF)");
}
}
exit();
exit();
return;
return;
}
}
logger.info("Received text : '"+msg+"'");
logger.info("Received text : '"+msg+"'");
String[] sep = msg.split("::");
String[] sep = msg.split("::");
String command = sep[0];
String command = sep[0];
switch (command)
switch (command)
{
{
case "disconnect" : serverDisconnected(msg);
case "disconnect" : serverDisconnected(msg);
break;
break;
case "get_client_details" : sendClientDetails();
case "get_client_details" : sendClientDetails();
break;
break;
case "get_profiles" : sendProfileNamesToServer();
case "get_profiles" : sendProfileNamesToServer();
break;
break;
case "get_profile_details": sendProfileDetailsToServer(sep[1]);
case "get_profile_details": sendProfileDetailsToServer(sep[1]);
break;
break;
case "save_action_details": saveActionDetails(sep);
case "save_action_details": saveActionDetails(sep);
break;
break;
case "delete_action": deleteAction(sep[1], sep[2]);
case "delete_action": deleteAction(sep[1], sep[2]);
break;
break;
case "get_themes": sendThemesToServer();
case "get_themes": sendThemesToServer();
break;
break;
case "save_client_details": saveClientDetails(sep);
case "save_client_details": saveClientDetails(sep);
break;
break;
case "save_client_profile": saveProfileDetails(sep);
case "save_client_profile": saveProfileDetails(sep);
break;
break;
case "delete_profile": deleteProfile(sep[1]);
case "delete_profile": deleteProfile(sep[1]);
break;
break;
case "action_failed": actionFailed(sep[1], sep[2]);
case "action_failed": actionFailed(sep[1], sep[2]);
break;
break;
default: logger.warning("Command '"+command+"' does not match records. Make sure client and server versions are equal.");
default: logger.warning("Command '"+command+"' does not match records. Make sure client and server versions are equal.");
}
}
}
}
}
}
catch (SevereException e)
catch (SevereException e)
{
{
logger.severe(e.getMessage());
logger.severe(e.getMessage());
e.printStackTrace();
e.printStackTrace();
exceptionAndAlertHandler.handleSevereException(e);
exceptionAndAlertHandler.handleSevereException(e);
}
}
catch (MinorException e)
catch (MinorException e)
{
{
logger.severe(e.getMessage());
logger.severe(e.getMessage());
e.printStackTrace();
e.printStackTrace();
exceptionAndAlertHandler.handleMinorException(e);
exceptionAndAlertHandler.handleMinorException(e);
}
}
}
}
//commands
//commands
/*public void receiveActionIcon(String[] sep) throws MinorException {
/*public void receiveActionIcon(String[] sep) throws MinorException {
String profileID = sep[1];
String profileID = sep[1];
String actionID = sep[2];
String actionID = sep[2];
int bytesToRead = Integer.parseInt(sep[3]);
int bytesToRead = Integer.parseInt(sep[3]);
int port = Integer.parseInt(sep[4]);
int port = Integer.parseInt(sep[4]);
try
try
{
{
Socket tempSocket = new Socket(socket.getInetAddress(), port);
Socket tempSocket = new Socket(socket.getInetAddress(), port);
tempSocket.setReceiveBufferSize(bytesToRead);
tempSocket.setReceiveBufferSize(bytesToRead);
tempSocket.setSoTimeout(10000);
tempSocket.setSoTimeout(10000);
DataInputStream dataInputStream = new DataInputStream(tempSocket.getInputStream());
DataInputStream dataInputStream = new DataInputStream(tempSocket.getInputStream());
byte[] dataIcon = new byte[bytesToRead];
byte[] dataIcon = new byte[bytesToRead];
dataInputStream.read(dataIcon);
dataInputStream.read(dataIcon);
clientProfiles.getProfileFromID(profileID).getActionFromID(actionID).setIcon(dataIcon);
clientProfiles.getProfileFromID(profileID).getActionFromID(actionID).setIcon(dataIcon);
dataInputStream.close();
dataInputStream.close();
tempSocket.close();
tempSocket.close();
}
}
catch (IOException e)
catch (IOException e)
{
{
e.printStackTrace();
e.printStackTrace();
throw new MinorException("Unable to Receive icon");
throw new MinorException("Unable to Receive icon");
}
}
}*/
}*/
public void sendIcon(String profileID, String actionID, byte[] icon) throws SevereException
public void sendIcon(String profileID, String actionID, byte[] icon) throws SevereException
{
{
try
try
{
{
Thread.sleep(50);
Thread.sleep(50);
dos.writeUTF("action_icon::"+profileID+"!!"+actionID+"!!::"+icon.length);
dos.writeUTF("action_icon::"+profileID+"!!"+actionID+"!!::"+icon.length);
dos.flush();
dos.flush();
dos.writeInt(icon.length);
dos.writeInt(icon.length);
dos.flush();
dos.flush();
write(icon);
write(icon);
dos.flush();
dos.flush();
}
}
catch (IOException | InterruptedException e)
catch (IOException | InterruptedException e)
{
{
e.printStackTrace();
e.printStackTrace();
throw new SevereException("Unable to write to IO Stream!");
throw new SevereException("Unable to write to IO Stream!");
}
}
}
}
/*public void sendIcon(String profileID, String actionID, byte[] icon) throws SevereException
/*public void sendIcon(String profileID, String actionID, byte[] icon) throws SevereException
{
{
try
try
{
{
ServerSocket tmpServer = new ServerSocket(0);
ServerSocket tmpServer = new ServerSocket(0);
dos.writeUTF("action_icon::"+
dos.writeUTF("action_icon::"+
profileID+"::"+
profileID+"::"+
actionID+"::"+
actionID+"::"+
icon.length+"::"+
icon.length+"::"+
tmpServer.getLocalPort()+"::");
tmpServer.getLocalPort()+"::");
Socket socket = tmpServer.accept();
Socket socket = tmpServer.accept();
socket.setSendBufferSize(icon.length);
socket.setSendBufferSize(icon.length);
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataOutputStream.write(icon);
dataOutputStream.write(icon);
dataOutputStream.close();
dataOutputStream.close();
tmpServer.close();
tmpServer.close();
}
}
catch (IOException e)
catch (IOException e)
{
{
e.printStackTrace();
e.printStackTrace();
throw new SevereException(e.getMessage());
throw new SevereException(e.getMessage());
}
}
}*/
}*/
public void disconnect() throws SevereException
public void disconnect() throws SevereException
{
{
disconnect("");
disconnect("");
}
}
public void disconnect(String message) throws SevereException
public void disconnect(String message) throws SevereException
{
{
if(stop.get())
if(stop.get())
return;
return;
stop.set(true);
stop.set(true);
logger.info("Sending server disconnect message ...");
logger.info("Sending server disconnect message ...");
writeToStream("disconnect::"+message+"::");
writeToStream("disconnect::"+message+"::");
try
try
{
{
if(!socket.isClosed())
if(!socket.isClosed())
socket.close();
socket.close();
clientListener.setConnected(false);
clientListener.setConnected(false);
clientListener.updateSettingsConnectDisconnectButton();
clientListener.updateSettingsConnectDisconnectButton();
}
}
catch (IOException e)
catch (IOException e)
{
{
e.printStackTrace();
e.printStackTrace();
throw new SevereException("Unable to close socket");
throw new SevereException("Unable to close socket");
}
}
}
}
public void sendThemesToServer() throws SevereException
public void sendThemesToServer() throws SevereException
{
{
StringBuilder finalQuery = new StringBuilder("themes::");
StringBuilder finalQuery = new StringBuilder("themes::");
for(Theme theme : clientListener.getThemes().getThemeList())
for(Theme theme : clientListener.getThemes().getThemeList())
{
{
finalQuery.append(theme.getFullName())
finalQuery.append(theme.getFullName())
.append("__")
.append("__")
.append(theme.getShortName())
.append(theme.getShortName())
.append("__")
.append("__")
.append(theme.getAuthor())
.append(theme.getAuthor())
.append("__")
.append("__")
.append(theme.getVersion().getText())
.append(theme.getVersion().getText())
.append("__::");
.append("__::");
}
}
writeToStream(finalQuery.toString());
writeToStream(finalQuery.toString());
}
}
public void sendActionIcon(String clientProfileID, String actionID) throws SevereException
public void sendActionIcon(String clientProfileID, String actionID) throws SevereException
{
{
System.out.println("sending action icon "+clientProfileID+", "+actionID);
System.out.println("sending action icon "+clientProfileID+", "+actionID);
sendIcon(clientProfileID, actionID, clientListener.getClientProfiles().getProfileFromID(clientProfileID).getActionFromID(actionID).getIconAsByteArray());
sendIcon(clientProfileID, actionID, clientListener.getClientProfiles().getProfileFromID(clientProfileID).getActionFromID(actionID).getIconAsByteArray());
}
}
public void serverDisconnected(String message)
public void serverDisconnected(String message)
{
{
stop.set(true);
stop.set(true);
String txt = "Disconnected!";
String txt = "Disconnected!";
if(!message.equals("disconnect::::"))
if(!message.equals("disconnect::::"))
txt = "Message : "+message.split("::")[1];
txt = "Message : "+message.split("::")[1];
exceptionAndAlertHandler.onAlert("Disconnected from Server", txt, StreamPiAlertType.WARNING);
exceptionAndAlertHandler.onAlert("Disconnected from Server", txt, StreamPiAlertType.WARNING);
if(!socket.isClosed()) {
if(!socket.isClosed()) {
try {
try {
socket.close();
socket.close();
} catch (IOException e) {
} catch (IOException e) {
e.printStackTrace();
e.printStackTrace();
}
}
}
}
clientListener.setConnected(false);
clientListener.setConnected(false);
clientListener.updateSettingsConnectDisconnectButton();
clientListener.updateSettingsConnectDisconnectButton();
}
}
public void sendClientDetails() throws SevereException
public void sendClientDetails() throws SevereException
{
{
Version clientVersion = clientInfo.getVersion();
Version clientVersion = clientInfo.getVersion();
ReleaseStatus releaseStatus = clientInfo.getReleaseStatus();
ReleaseStatus releaseStatus = clientInfo.getReleaseStatus();
Version clientCommsStandard = clientInfo.getCommsStandardVersion();
Version clientCommsStandard = clientInfo.getCommsStandardVersion();
Version clientMinThemeStandard = clientInfo.getMinThemeSupportVersion();
Version clientMinThemeStandard = clientInfo.getMinThemeSupportVersion();
String clientNickname = Config.getInstance().getClientNickName();
String clientNickname = Config.getInstance().getClientNickName();
double screenWidth = Config.getInstance().getStartupWindowWidth();
double screenWidth = Config.getInstance().getStartupWindowWidth();
double screenHeight = Config.getInstance().getStartupWindowHeight();
double screenHeight = Config.getInstance().getStartupWindowHeight();
Platform OS = clientInfo.getPlatformType();
Platform OS = clientInfo.getPlatformType();
String defaultProfileID = Config.getInstance().getStartupProfileID();
String defaultProfileID = Config.getInstance().getStartupProfileID();
writeToStream("client_details::"+
writeToStream("client_details::"+
clientVersion.getText()+"::"+
clientVersion.getText()+"::"+
releaseStatus+"::"+
releaseStatus+"::"+
clientCommsStandard.getText()+"::"+
clientCommsStandard.getText()+"::"+
clientMinThemeStandard.getText()+"::"+
clientMinThemeStandard.getText()+"::"+
clientNickname+"::"+
clientNickname+"::"+
screenWidth+"::"+
screenWidth+"::"+
screenHeight+"::"+
screenHeight+"::"+
OS+"::" +
OS+"::" +
defaultProfileID+"::"+
defaultProfileID+"::"+
clientListener.getDefaultThemeFullName()+"::");
clientListener.getDefaultThemeFullName()+"::");
}
}
public void sendProfileNamesToServer() throws SevereException
public void sendProfileNamesToServer() throws SevereException
{
{
StringBuilder finalQuery = new StringBuilder("profiles::");
StringBuilder finalQuery = new StringBuilder("profiles::");
finalQuery.append(clientListener.getClientProfiles().getClientProfiles().size()).append("::");
finalQuery.append(clientListener.getClientProfiles().getClientProfiles().size()).append("::");
for(ClientProfile clientProfile : clientListener.getClientProfiles().getClientProfiles())
for(ClientProfile clientProfile : clientListener.getClientProfiles().getClientProfiles())
{
{
finalQuery.append(clientProfile.getID()).append("::");
finalQuery.append(clientProfile.getID()).append("::");
}
}
writeToStream(finalQuery.toString());
writeToStream(finalQuery.toString());
}
}
public void sendProfileDetailsToServer(String ID) throws SevereException
public void sendProfileDetailsToServer(String ID) throws SevereException
{
{
StringBuilder finalQuery = new StringBuilder("profile_details::");
StringBuilder finalQuery = new StringBuilder("profile_details::");
ClientProfile clientProfile = clientListener.getClientProfiles().getProfileFromID(ID);
ClientProfile clientProfile = clientListener.getClientProfiles().getProfileFromID(ID);
finalQuery.append(ID).append("::");
finalQuery.append(ID).append("::");
finalQuery.append(clientProfile.getName())
finalQuery.append(clientProfile.getName())
.append("::")
.append("::")
.append(clientProfile.getRows())
.append(clientProfile.getRows())
.append("::")
.append("::")
.append(clientProfile.getCols())
.append(clientProfile.getCols())
.append("::")
.append("::")
.append(clientProfile.getActionSize())
.append(clientProfile.getActionSize())
.append("::")
.append("::")
.append(clientProfile.getActionGap())
.append(clientProfile.getActionGap())
.append("::");
.append("::");
writeToStream(finalQuery.toString());
writeToStream(finalQuery.toString());
for(Action action : clientProfile.getActions())
for(Action action : clientProfile.getActions())
{
{
sendActionDetails(clientProfile.getID(), action);
sendActionDetails(clientProfile.getID(), action);
}
}
for(Action action : clientProfile.getActions())
for(Action action : clientProfile.getActions())
{
{
if(action.isHasIcon())
if(action.isHasIcon())
{
{
System.out.println("23123123123 : "+action.getID() + action.isHasIcon());
System.out.println("23123123123 : "+action.getID() + action.isHasIcon());
sendActionIcon(clientProfile.getID(), action.getID());
sendActionIcon(clientProfile.getID(), action.getID());
}
}
}
}
}
}
public void sendActionDetails(String profileID, Action action) throws SevereException {
public void sendActionDetails(String profileID, Action action) throws SevereException {
if(action == null)
if(action == null)
{
{
logger.info("NO SUCH ACTION");
logger.info("NO SUCH ACTION");
return;
return;
}
}
StringBuilder finalQuery = new StringBuilder("action_details::");
StringBuilder finalQuery = new StringBuilder("action_details::");
finalQuery.append(profileID)
finalQuery.append(profileID)
.append("::")
.append("::")
.append(action.getID())
.append(action.getID())
.append("::")
.append("::")
.append(action.getActionType())
.append(action.getActionType())
.append("::");
.append("::");
if(action.getActionType() == ActionType.NORMAL) {
if(action.getActionType() == ActionType.NORMAL) {
finalQuery.append(action.getVersion().getText());
finalQuery.append(action.getVersion().getText());
}
}
finalQuery.append("::");
finalQuery.append("::");
if(action.getActionType() ==ActionType.NORMAL)
if(action.getActionType() ==ActionType.NORMAL)
{
{
finalQuery.append(action.getModuleName());
finalQuery.append(action.getModuleName());
}
}
finalQuery.append("::");
finalQuery.append("::");
//display
//display
finalQuery.append(action.getBgColourHex())
finalQuery.append(action.getBgColourHex())
.append("::");
.append("::");
//icon
//icon
finalQuery.append(action.isHasIcon())
finalQuery.append(action.isHasIcon())
.append("::")
.append("::")
.append(action.isShowIcon())
.append(action.isShowIcon())
.append("::");
.append("::");
//text
//text
finalQuery.append(action.isShowDisplayText())
finalQuery.append(action.isShowDisplayText())
.append("::")
.append("::")
.append(action.getDisplayTextFontColourHex())
.append(action.getDisplayTextFontColourHex())
.append("::")
.append("::")
.append(action.getDisplayText())
.append(action.getDisplayText())
.append("::")
.append("::")
.append(action.getDisplayTextAlignment())
.append(action.getDisplayTextAlignment())
.append("::");
.append("::");
//location
//location
if(action.getLocation() == null)
if(action.getLocation() == null)
finalQuery.append("-1::-1::");
finalQuery.append("-1::-1::");
else
else
finalQuery.append(action.getLocation().getRow())
finalQuery.append(action.getLocation().getRow())
.append("::")
.append("::")
.append(action.getLocation().getCol())
.append(action.getLocation().getCol())
.append("::");
.append("::");
//client properties
//client properties
ClientProperties clientProperties = action.getClientProperties();
ClientProperties clientProperties = action.getClientProperties();
finalQuery.append(clientProperties.getSize())
finalQuery.append(clientProperties.getSize())
.append("::");
.append("::");
for(Property property : clientProperties.get())
for(Property property : clientProperties.get())
{
{
finalQuery.append(property.getName())
finalQuery.append(property.getName())
.append("__")
.append("__")
.append(property.getRawValue())
.append(property.getRawValue())
.append("__");
.append("__");
finalQuery.append("!!");
finalQuery.append("!!");
}
}
finalQuery.append("::")
finalQuery.append("::")
.append(action.getParent())
.append(action.getParent())
.append("::");
.append("::");
writeToStream(finalQuery.toString());
writeToStream(finalQuery.toString());
}
}
public void saveActionDetails(String[] sep)
public void saveActionDetails(String[] sep)
{
{
String profileID = sep[1];
String profileID = sep[1];
String ID = sep[2];
String ID = sep[2];
ActionType actionType = ActionType.valueOf(sep[3]);
ActionType actionType = ActionType.valueOf(sep[3]);
//4 - Version
//4 - Version
//5 - ModuleName
//5 - ModuleName
//display
//display
String bgColorHex = sep[6];
String bgColorHex = sep[6];
//icon
//icon
boolean isHasIcon = sep[7].equals("true");
boolean isHasIcon = sep[7].equals("true");
boolean isShowIcon = sep[8].equals("true");
boolean isShowIcon = sep[8].equals("true");
//text
//text
boolean isShowDisplayText = sep[9].equals("true");
boolean isShowDisplayText = sep[9].equals("true");
String displayFontColor = sep[10];
String displayFontColor = sep[10];
String displayText = sep[11];
String displayText = sep[11];
DisplayTextAlignment displayTextAlignment = DisplayTextAlignment.valueOf(sep[12]);
DisplayTextAlignment displayTextAlignment = DisplayTextAlignment.valueOf(sep[12]);
//location
//location
String row = sep[13];
String row = sep[13];
String col = sep[14];
String col = sep[14];
Location location = new Location(Integer.parseInt(row), Integer.parseInt(col));
Location location = new Location(Integer.parseInt(row), Integer.parseInt(col));
Action action = new Action(ID, actionType);
Action action = new Action(ID, actionType);
if(actionType == ActionType.NORMAL)
if(actionType == ActionType.NORMAL)
{
{
try
try
{
{
action.setVersion(new Version(sep[4]));
action.setVersion(new Version(sep[4]));
action.setModuleName(sep[5]);
action.setModuleName(sep[5]);
}
}
catch (Exception e)
catch (Exception e)
{
{
logger.severe(e.getMessage());
logger.severe(e.getMessage());
e.printStackTrace();
e.printStackTrace();
}
}
}
}
action.setBgColourHex(bgColorHex);
action.setBgColourHex(bgColorHex);
action.setShowIcon(isShowIcon);
action.setShowIcon(isShowIcon);
action.setHasIcon(isHasIcon);
action.setHasIcon(isHasIcon);
System.out.println("IS HAS ICON : "+isHasIcon+", IS SHOW ICON :"+isShowIcon);
System.out.println("IS HAS ICON : "+isHasIcon+", IS SHOW ICON :"+isShowIcon);
action.setShowDisplayText(isShowDisplayText);
action.setShowDisplayText(isShowDisplayText);
action.setDisplayTextFontColourHex(displayFontColor);
action.setDisplayTextFontColourHex(displayFontColor);
action.setDisplayText(displayText);
action.setDisplayText(displayText);
action.setDisplayTextAlignment(displayTextAlignment);
action.setDisplayTextAlignment(displayTextAlignment);
action.setLocation(location);
action.setLocation(location);
//client properties
//client properties
int clientPropertiesSize = Integer.parseInt(sep[15]);
int clientPropertiesSize = Integer.parseInt(sep[15]);
String[] clientPropertiesRaw = sep[16].split("!!");
String[] clientPropertiesRaw = sep[16].split("!!");
ClientProperties clientProperties = new ClientProperties();
ClientProperties clientProperties = new ClientProperties();
if(actionType == ActionType.FOLDER)
if(actionType == ActionType.FOLDER)
clientProperties.setDuplicatePropertyAllowed(true);
clientProperties.setDuplicatePropertyAllowed(true);
for(int i = 0;i<clientPropertiesSize; i++)
for(int i = 0;i<clientPropertiesSize; i++)
{
{
String[] clientPraw = clientPropertiesRaw[i].split("__");
String[] clientPraw = clientPropertiesRaw[i].split("__");
Property property = new Property(clientPraw[0], Type.STRING);
Property property = new Property(clientPraw[0], Type.STRING);
if(clientPraw.length > 1)
if(clientPraw.length > 1)
property.setRawValue(clientPraw[1]);
property.setRawValue(clientPraw[1]);
clientProperties.addProperty(property);
clientProperties.addProperty(property);
}
}
action.setClientProperties(clientProperties);
action.setClientProperties(clientProperties);
String parent = sep[17];
String parent = sep[17];
action.setParent(parent);
action.setParent(parent);
try
try
{
{
Action old = clientListener.getClientProfiles().getProfileFromID(profileID).getActionFromID(action.getID());
Action old = clientListener.getClientProfiles().getProfileFromID(profileID).getActionFromID(action.getID());
if(old != null)
if(old != null)
{
{
if(action.isHasIcon())
if(action.isHasIcon())
action.setIcon(clientListener.getClientProfiles().getProfileFromID(profileID).getActionFromID(action.getID()).getIconAsByteArray());
action.setIcon(clientListener.getClientProfiles().getProfileFromID(profileID).getActionFromID(action.getID()).getIconAsByteArray());
}
}
clientListener.getClientProfiles().getProfileFromID(profileID).addAction(action);
clientListener.getClientProfiles().getProfileFromID(profileID).addAction(action);
System.out.println("XXXXXXXXXXX " +action.isHasIcon());
System.out.println("XXXXXXXXXXX " +action.isHasIcon());
clientListener.getClientProfiles().getProfileFromID(profileID).saveActions();
clientListener.getClientProfiles().getProfileFromID(profileID).saveActions();
if(clientListener.getCurrentProfile().getID().equals(profileID))
if(clientListener.getCurrentProfile().getID().equals(profileID) && action.getLocation().getCol()!=-1)
{
{
javafx.application.Platform.runLater(()->{
javafx.application.Platform.runLater(()->{
ActionBox box = clientListener.getActionBox(action.getLocation().getCol(), action.getLocation().getRow());
ActionBox box = clientListener.getActionBox(action.getLocation().getCol(), action.getLocation().getRow());
System.out.println(box==null);
System.out.println("GATYYY : "+action.getLocation().getCol()+","+action.getLocation().getRow());
box.clear();
box.clear();
box.setAction(action);
box.setAction(action);
box.baseInit();
box.baseInit();
box.init();
box.init();
});
});
}
}
//clientListener.clearActionBox(action.getLocation().getCol(), action.getLocation().getRow());
//clientListener.clearActionBox(action.getLocation().getCol(), action.getLocation().getRow());
//clientListener.renderAction(profileID, action);
//clientListener.renderAction(profileID, action);
}
}
catch (Exception e)
catch (Exception e)
{
{
e.printStackTrace();
e.printStackTrace();
exceptionAndAlertHandler.handleMinorException(new MinorException(e.getMessage()));
exceptionAndAlertHandler.handleMinorException(new MinorException(e.getMessage()));
}
}
}
}
public void deleteAction(String profileID, String actionID)
public void deleteAction(String profileID, String actionID)
{
{
try
try
{
{
Action acc = clientListener.getClientProfiles().getProfileFromID(profileID).getActionFromID(actionID);
Action acc = clientListener.getClientProfiles().getProfileFromID(profileID).getActionFromID(actionID);
if(acc.getActionType() == ActionType.FOLDER)
if(acc.getActionType() == ActionType.FOLDER)
{
{
ArrayList<String> idsToBeRemoved = new ArrayList<>();
ArrayList<String> idsToBeRemoved = new ArrayList<>();
ArrayList<String> folders = new ArrayList<>();
ArrayList<String> folders = new ArrayList<>();
String folderToBeDeletedID = clientListener.getClientProfiles().getProfileFromID(profileID).getActionFromID(actionID).getID();
String folderToBeDeletedID = clientListener.getClientProfiles().getProfileFromID(profileID).getActionFromID(actionID).getID();
folders.add(folderToBeDeletedID);
folders.add(folderToBeDeletedID);
boolean startOver = true;
boolean startOver = true;
while(startOver)
while(startOver)
{
{
startOver = false;
startOver = false;
for(Action action : clientListener.getClientProfiles().getProfileFromID(profileID).getActions())
for(Action action : clientListener.getClientProfiles().getProfileFromID(profileID).getActions())
{
{
if(folders.contains(action.getParent()))
if(folders.contains(action.getParent()))
{
{
if(!idsToBeRemoved.contains(action.getID()))
if(!idsToBeRemoved.contains(action.getID()))
{
{
idsToBeRemoved.add(action.getID());
idsToBeRemoved.add(action.getID());
if(action.getActionType() == ActionType.FOLDER)
if(action.getActionType() == ActionType.FOLDER)
{
{
folders.add(action.getID());
folders.add(action.getID());
startOver = true;
startOver = true;
}
}
}
}
}
}
}
}
}
}
for(String ids : idsToBeRemoved)
for(String ids : idsToBeRemoved)
{
{
clientListener.getClientProfiles().getProfileFromID(profileID).removeAction(ids);
clientListener.getClientProfiles().getProfileFromID(profileID).removeAction(ids);
}
}
}
}
else if (acc.getActionType() == ActionType.COMBINE)
else if (acc.getActionType() == ActionType.COMBINE)
{
{
for(Property property : acc.getClientProperties().get())
for(Property property : acc.getClientProperties().get())
{
{
clientListener.getClientProfiles().getProfileFromID(profileID).removeAction(property.getRawValue());
clientListener.getClientProfiles().getProfileFromID(profileID).removeAction(property.getRawValue());
}
}
}
}
clientListener.getClientProfiles().getProfileFromID(profileID).removeAction(acc.getID());
clientListener.getClientProfiles().getProfileFromID(profileID).removeAction(acc.getID());
clientListener.getClientProfiles().getProfileFromID(profileID).saveActions();
clientListener.getClientProfiles().getProfileFromID(profileID).saveActions();
clientListener.clearActionBox(acc.getLocation().getCol(), acc.getLocation().getRow());
if(acc.getLocation().getCol()!=-1)
clientListener.addBlankActionBox(acc.getLocation().getCol(), acc.getLocation().getRow());
{
clientListener.clearActionBox(acc.getLocation().getCol(), acc.getLocation().getRow());
clientListener.addBlankActionBox(acc.getLocation().getCol(), acc.getLocation().getRow());
}
}
}
catch (Exception e)
catch (Exception e)
{
{
e.printStackTrace();
e.printStackTrace();
exceptionAndAlertHandler.handleMinorException(new MinorException(e.getMessage()));
exceptionAndAlertHandler.handleMinorException(new MinorException(e.getMessage()));
}
}
}
}
public void saveClientDetails(String[] sep)
public void saveClientDetails(String[] sep)
{
{
try
try
{
{
Config.getInstance().setNickName(sep[1]);
Config.getInstance().setNickName(sep[1]);
String oldWidth = Config.getInstance().getStartupWindowWidth()+"";
String oldWidth = Config.getInstance().getStartupWindowWidth()+"";
String oldHeight = Config.getInstance().getStartupWindowHeight()+"";
String oldHeight = Config.getInstance().getStartupWindowHeight()+"";
Config.getInstance().setStartupWindowSize(
Config.getInstance().setStartupWindowSize(
Double.parseDouble(sep[2]),
Double.parseDouble(sep[2]),
Double.parseDouble(sep[3])
Double.parseDouble(sep[3])
);
);
Config.getInstance().setStartupProfileID(sep[4]);
Config.getInstance().setStartupProfileID(sep[4]);
String oldThemeFullName = Config.getInstance().getCurrentThemeFullName();
String oldThemeFullName = Config.getInstance().getCurrentThemeFullName();
Config.getInstance().setCurrentThemeFullName(sep[5]);
Config.getInstance().setCurrentThemeFullName(sep[5]);
if(!oldHeight.equals(sep[3]) || !oldWidth.equals(sep[2]) || !oldThemeFullName.equals(sep[5]))
if(!oldHeight.equals(sep[3]) || !oldWidth.equals(sep[2]) || !oldThemeFullName.equals(sep[5]))
javafx.application.Platform.runLater(()-> clientListener.init());
javafx.application.Platform.runLater(()-> clientListener.init());
Config.getInstance().save();
Config.getInstance().save();
javafx.application.Platform.runLater(()->clientListener.loadSettings());
javafx.application.Platform.runLater(()->clientListener.loadSettings());
}
}
catch (SevereException e)
catch (SevereException e)
{
{
e.printStackTrace();
e.printStackTrace();
exceptionAndAlertHandler.handleSevereException(e);
exceptionAndAlertHandler.handleSevereException(e);
}
}
}
}
public void saveProfileDetails(String[] sep) throws SevereException, MinorException
public void saveProfileDetails(String[] sep) throws SevereException, MinorException
{
{
ClientProfile clientProfile = clientListener.getClientProfiles().getProfileFromID(sep[1]);
ClientProfile clientProfile = clientListener.getClientProfiles().getProfileFromID(sep[1]);
if(clientProfile == null)
if(clientProfile == null)
{
{
clientProfile = new ClientProfile(new File(Config.getInstance().getProfilesPath().toString()+"/"+sep[1]+".xml"),
clientProfile = new ClientProfile(new File(Config.getInstance().getProfilesPath().toString()+"/"+sep[1]+".xml"),
Config.getInstance().getIconsPath());
Config.getInstance().getIconsPath());
}
}
clientProfile.setName(sep[2]);
clientProfile.setName(sep[2]);
clientProfile.setRows(Integer.parseInt(sep[3]));
clientProfile.setRows(Integer.parseInt(sep[3]));
clientProfile.setCols(Integer.parseInt(sep[4]));
clientProfile.setCols(Integer.parseInt(sep[4]));
clientProfile.setActionSize(Integer.parseInt(sep[5]));
clientProfile.setActionSize(Integer.parseInt(sep[5]));
clientProfile.setActionGap(Integer.parseInt(sep[6]));
clientProfile.setActionGap(Integer.parseInt(sep[6]));
try
try
{
{
clientListener.getClientProfiles().addProfile(clientProfile);
clientListener.getClientProfiles().addProfile(clientProfile);
clientProfile.saveProfileDetails();
clientProfile.saveProfileDetails();
clientListener.refreshGridIfCurrent(sep[1]);
clientListener.refreshGridIfCurrent(sep[1]);
javafx.application.Platform.runLater(()->clientListener.loadSettings());
javafx.application.Platform.runLater(()->clientListener.loadSettings());
}
}
catch (Exception e)
catch (Exception e)
{
{
e.printStackTrace();
e.printStackTrace();
throw new SevereException(e.getMessage());
throw new SevereException(e.getMessage());
}
}
}
}
public void deleteProfile(String ID)
public void deleteProfile(String ID)
{
{
clientListener.getClientProfiles().deleteProfile(clientListener.getClientProfiles().getProfileFromID(ID));
clientListener.getClientProfiles().deleteProfile(clientListener.getClientProfiles().getProfileFromID(ID));
}
}
public void onActionClicked(String profileID, String actionID) throws SevereException {
public void onActionClicked(String profileID, String actionID) throws SevereException {
writeToStream("action_clicked::"+profileID+"::"+actionID+"::");
writeToStream("action_clicked::"+profileID+"::"+actionID+"::");
}
}
public void actionFailed(String profileID, String actionID)
public void actionFailed(String profileID, String actionID)
{
{
clientListener.onActionFailed(profileID, actionID);
clientListener.onActionFailed(profileID, actionID);
}
}
}
}