Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Thermocontroller/src/server/server.java
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
215 lines (189 sloc)
6.48 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package server; | |
import java.io.BufferedReader; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.io.PrintWriter; | |
import java.io.Serializable; | |
import java.net.ServerSocket; | |
import java.net.Socket; | |
import java.util.Hashtable; | |
import InputOutput.*; | |
import networking.*; | |
public class server extends ServerNetworking implements Thermostatable, Serializable { | |
private static server instance = null; | |
public static server getInstance() { | |
if (instance == null){ | |
try { | |
instance = new server(); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
return instance; | |
} | |
// Desired temperature | |
int desiredTemperature; | |
// Thermostat IP address | |
String thermostatIP; | |
// Database object | |
Database dataStorage; | |
// Threaded network listener so we don't block other operations | |
Thread serverCurrentTempListener; | |
// String to hold the current temperature | |
String currentTempString; | |
public server() throws Exception { | |
// Default admin user | |
this.dataStorage = new Database(this); | |
this.createTestUser(); | |
this.creatTestDevice(); | |
this.startServerListenerThreadCurrentTemp(); | |
dataStorage.printStruct(); | |
instance = this; | |
} | |
public boolean createUser(String email, String password, String ip, String serialpermission) { | |
dataStorage.createUser(email, password, ip, null); | |
return true; | |
} | |
public boolean createThermostat(String serial, String name, String desiredTemp) { | |
dataStorage.createThermostat(serial, name, desiredTemp); | |
return true; | |
} | |
public boolean createThermostat(String serialnumber, String name, String ip, String currenttemp, String desiredtemp){ | |
dataStorage.createThermostat(serialnumber, name, ip, currenttemp, desiredtemp); | |
return true; | |
} | |
public Hashtable<String, String> getUserFromEmail(String email) { | |
return dataStorage.getObjectFromTableAndKey("UserTable", email); | |
} | |
public Hashtable<String, String> getDeviceFromSerial(String serialnumber) { | |
return dataStorage.getObjectFromTableAndKey("Thermostat", serialnumber); | |
} | |
public String getCurrentTempFromSerialNumber(String serialnumber) { | |
return dataStorage.queryForValue("Thermostat", serialnumber, "currenttemp"); | |
} | |
public void setCurrentTempForSerialNumber(String serialnumber, String currtemp) { | |
dataStorage.updateTable("Thermostat", serialnumber, "currenttemp", currtemp); | |
} | |
public void setDesiredTempForSerialNumber(String serialnumber, String desiredtemp) { | |
dataStorage.updateTable("Thermostat", serialnumber, "desiredtemp", desiredtemp); | |
} | |
public String getDevicesFromEmail(String email) { | |
return this.dataStorage.getDevicesFromEmail(email); | |
} | |
// Sends the desired temperature on port sendDesiredTempPORT | |
public void sendDesiredTemp(String desiredTemperature, String thermostatIP) throws Exception { | |
// Opens a sending port | |
// Replace this with the thermostatIP string if we get multicast working | |
Socket sender = new Socket("192.168.1.103", 7002); | |
try { | |
while (true) { | |
// Instantiate a printwriter so we can write to the output stream | |
PrintWriter out = new PrintWriter(sender.getOutputStream(), true); | |
// Send out the value of desiredTemperature | |
int desiredTempInt = Integer.valueOf(desiredTemperature).intValue(); | |
out.println(desiredTempInt); | |
} | |
} finally { | |
// Immediately close the socket when finished | |
sender.close(); | |
} | |
} | |
// Threaded receiver function | |
// Listens on 7000 and outputs the received int to console | |
public void startServerListenerThreadCurrentTemp() { | |
Runnable runnable = new Runnable() { | |
public void run() { | |
try { | |
ServerSocket listener = new ServerSocket(7000); | |
while (true) { | |
try { | |
while (true) { | |
//sets the socket to an accept state | |
Socket socket = listener.accept(); | |
try { | |
// Creates a new input stream reader | |
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); | |
// Parses the input stream | |
int currentTemperature = Integer.parseInt(input.readLine()); | |
// Outputs the current temperature to the console and writes to disk | |
System.out.printf("The current temperature is: %d \n", currentTemperature); | |
currentTempString = Integer.toString(currentTemperature); | |
} finally { | |
socket.close(); | |
} | |
} | |
} finally { | |
listener.close(); | |
} | |
} | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
finally { | |
} | |
} | |
}; | |
serverCurrentTempListener = new Thread(runnable); | |
serverCurrentTempListener.start(); | |
} | |
/* | |
// Threaded receiver function | |
// Listens on 7000 and outputs the received int to console | |
public void startServerListenerThreadSerialNumber() { | |
Runnable runnable = new Runnable() { | |
public void run() { | |
try { | |
ServerSocket listener = new ServerSocket(7001); | |
while (true) { | |
try { | |
while (true) { | |
//sets the socket to an accept state | |
Socket socket = listener.accept(); | |
try { | |
// Creates a new input stream reader | |
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); | |
// Parses the input stream | |
int currentTemperature = Integer.parseInt(input.readLine()); | |
// Outputs the current temperature to the console and writes to disk | |
System.out.printf("This Raspberry Pi's serial number is: %d \n", currentTemperature); | |
String currentTempString = Integer.toString(currentTemperature); | |
//this.setCurrentTempForSerialNumber(); | |
} finally { | |
socket.close(); | |
} | |
} | |
} finally { | |
listener.close(); | |
} | |
} | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
finally { | |
} | |
} | |
}; | |
} | |
*/ | |
private void createTestUser(){ | |
String adminPassword = "admin"; | |
String ip = "127.0.0.1"; | |
String email = "admin@uconn.edu"; | |
String serialNumber = "00000011TEST"; | |
this.dataStorage.createUser(email, adminPassword, ip, serialNumber); | |
this.dataStorage.giveUserAccessToDeviceByEmailAndSerialNumber(email, serialNumber); | |
System.out.println(this.dataStorage.getDevicesFromEmail("admin@uconn.edu")); | |
} | |
private void creatTestDevice(){ | |
String deviceName = "Living Room"; | |
String ip = "127.0.0.2"; | |
String serialNumber = "00000011TEST"; | |
String currentTemp = "73"; | |
this.dataStorage.createThermostat(serialNumber, deviceName, ip, currentTemp, "80"); | |
} | |
public void datastructureLogEvent(String query) { | |
} | |
public void printDataBase(){ | |
this.dataStorage.printDataBase(); | |
} | |
} |