-
Notifications
You must be signed in to change notification settings - Fork 6
/
VirtualMachine.java
118 lines (95 loc) · 2.99 KB
/
VirtualMachine.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
VirtualMachine.java
Contains the individual thread running for each IoT device
*/
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
import javax.net.ssl.SSLSocket;
public class VirtualMachine extends Thread {//the VirtualMachine class will be another thread
private String server;//lot of variable initializing
private int serverPort;
private Socket socket;
private SSLSocket sslSocket;
private volatile IoTDevice device;//value of variable will never be threaded locally
private boolean isUsingSSl = false;
private String className;
private Logger logger;
public VirtualMachine(Socket ss, Logger l, IoTDevice d, String cn){ //Initializes an simple unencrypted connection
super();
server = d.getServerIP();
serverPort = d.getServerPort();
socket = ss;
device = d;
className = cn;
logger = l;
}
public VirtualMachine(SSLSocket ss, Logger l, IoTDevice d, String cn){ //Initializes an SSL connection with a client that has SSL enabled
super();
server = d.getServerIP();
serverPort = d.getServerPort();
sslSocket = ss;
device = d;
isUsingSSl = true;
className = cn;
logger = l;
}
public void setDevice(IoTDevice d){
device = d;
}
public String getClassName(){
return className;
}
public IoTDevice getDevice(){
return device;
}
public void run(){ //Overwrites run
Receiver receiver = new Receiver(server, serverPort);
logger.println("Connected to " + server + " on port " + serverPort);
Sender sender;
if(isUsingSSl) sender = new Sender(sslSocket);
else sender = new Sender(socket);
String message = "";
String iotMessage = "";
receiver.sendMessage("test");
while(true){ //Receive and log the messages sent by client
if(iotMessage.length() > 0) {
System.out.println("Got message \"" + iotMessage + "\" from IoT device");
receiver.sendMessage(iotMessage);
System.out.println("Sent message \"" + iotMessage + "\" to server");
}
message = receiver.getMessage();
if(message.length() > 0){
System.out.println("Got message \"" + message + "\"");
try{
message = device.filterMessage(message);
}
catch(Exception e){
logger.println("Permission denied");
}
sender.sendMessage(message);
System.out.println("Sent message \"" + message + "\" to IoT device");
}
iotMessage = sender.getMessage();
if(sender.isSocketClosed()){
logger.println("Device connection closed. Closing thread");
return;
}
else if(receiver.isSocketClosed()){
logger.println("Server connection closed. Closing thread");
return;
}
else{
sender.sendMessage("");
receiver.sendMessage("");
}
try{
Thread.sleep(10);
}
catch(Exception e){
logger.println("Got Exception " + e.toString() + " in VirtualMachine");
e.printStackTrace();
}
}
}
}