/*
* tgFX Socket Monitor Class
* Copyright Synthetos.com
*/
package tgfx.external;
import tgfx.SerialDriver;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.channels.ClosedChannelException;
import java.util.Observable;
import java.util.Observer;
import tgfx.Main;
import tgfx.tinyg.TinygDriver;
/**
*
* @author ril3y
*/
public class SocketMonitor {
private SerialDriver ser = SerialDriver.getInstance();
private int LISTENER_PORT;
private ServerSocket server;
private int clientCount = 0;
public SocketMonitor(String tmpport) {
LISTENER_PORT = Integer.parseInt(tmpport);
this.initServer();
this.handleConnections();
}
int countClientConnections() {
return (clientCount);
}
boolean initServer() {
try {
server = new ServerSocket(LISTENER_PORT);
return (true);
} catch (IOException e) {
Main.print("Could not listen on port: " + String.valueOf(LISTENER_PORT));
return (false);
}
}
public void handleConnections() {
Main.print("[+]Remote Monitor Listening for Connections....");
// while (ser.isConnected()) {
try {
final Socket socket = server.accept();
ConnectionHandler connectionHandler = new ConnectionHandler(socket);
} catch (IOException ex) {
Main.print("[!]Error: " + ex.getMessage());
}
// }
Main.print("[!]Socket Monitor Terminated...");
}
public SocketMonitor(ServerSocket server) {
this.server = server;
}
}
/*
* New Class Here
*/
class ConnectionHandler implements Runnable, Observer {
private boolean disconnect = false;
public Socket socket;
@Override
public void update(Observable o, Object arg) {
String[] MSG = (String[]) arg;
if (MSG[0] == "JSON") {
final String line = MSG[1];
try {
this.write(MSG[1] + "\n");
} catch (IOException ex) {
disconnect = true;
} catch (Exception ex) {
Main.print("update(): " + ex.getMessage());
}
}
}
public ConnectionHandler(Socket socket) {
this.socket = socket;
SerialDriver ser = SerialDriver.getInstance();
Main.print("[+]Opening Remote Listener Socket");
// ser.addObserver(this);
Thread t = new Thread(this);
// t.start();
}
private void write(String l) throws Exception {
//Method for writing to the socket
socket.getOutputStream().write(l.getBytes());
}
public void run() {
try {
BufferedReader stdIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Main.print("GOT: " + stdIn.readLine());
// try {
// this.write("[+]Connected to tgFX\n");
// } catch (Exception ex) {
// }
TinygDriver tg = TinygDriver.getInstance();
String line = "";
SerialDriver ser = SerialDriver.getInstance();
while (ser.isConnected() && !disconnect) {
try {
line = stdIn.readLine() + "\n";
tg.write(line);
Thread.sleep(100);
} catch (IOException ex) {
disconnect = true;
} catch (Exception ex) {
Main.print("run(): " + ex.getMessage());
break;
}
}
Main.print("[+]Closing Remote Listener Socket");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}