Skip to content
Permalink
ccb38327c4
Switch branches/tags

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?
Go to file
 
 
Cannot retrieve contributors at this time
216 lines (189 sloc) 6.49 KB
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", 7001);
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();
}
}