package eu.tpmusielak.securephoto.server;
import eu.tpmusielak.securephoto.communication.ClientMessage;
import eu.tpmusielak.securephoto.communication.ServerMessage;
import eu.tpmusielak.securephoto.communication.ServerMessage.ServerResponse;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Arrays;
/**
* Created by IntelliJ IDEA.
* User: Tomasz P. Musielak
* Date: 06.12.11
* Time: 17:23
*/
public class ConnectionHandler extends Thread {
private Socket clientSocket;
private ObjectInputStream objectInput;
private ObjectOutputStream objectOutput;
private String address;
private String name;
private final SecureServer server;
public ConnectionHandler(SecureServer server, Socket clientSocket) {
this.clientSocket = clientSocket;
this.server = server;
name = "";
address = "";
try {
InetAddress inetAddress = InetAddress.getLocalHost();
address = Arrays.toString(inetAddress.getAddress());
name = inetAddress.getHostName();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
public void run() {
try {
objectOutput = new ObjectOutputStream(clientSocket.getOutputStream());
// Wait for message
objectInput = new ObjectInputStream(clientSocket.getInputStream());
ClientMessage clientMessage = (ClientMessage) objectInput.readObject();
handleMessage(clientMessage);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
closeConnections();
}
private void handleMessage(ClientMessage clientMessage) throws IOException {
String deviceID = clientMessage.getDeviceID();
switch (clientMessage.getType()) {
case AuthenticationRequest:
if(server.isKnown(deviceID)) {
server.printMsg("Known device:" + deviceID);
} else {
server.addKnownDevice(deviceID);
}
objectOutput.writeObject(new ServerMessage(ServerResponse.AUTH_OK, name, address));
objectOutput.flush();
break;
case ImageTaken:
server.printMsg("Image taken by device: " + deviceID + " with hash: " + clientMessage.getImageHash());
objectOutput.writeObject(new ServerMessage(ServerResponse.AUTH_OK, name, address));
objectOutput.flush();
break;
default:
break;
}
}
private void closeConnections() {
try {
objectOutput.close();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}