package com.luxoft.bankapp.server; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket; import com.luxoft.bankapp.exception.ClientExistsException; import com.luxoft.bankapp.model.Bank; import com.luxoft.bankapp.model.Client; import com.luxoft.bankapp.service.BankApplication; public class ServerThread implements Runnable { private ServerSocket socket; private Socket clientSocket; private ObjectOutputStream out; private ObjectInputStream in; ClientDAOImp cdi; BankOfficeDAOImp bdi; Bank ingBank = new Bank("ING"); BankServerThreaded bst = new BankServerThreaded(); public ServerThread(Socket clientSocket) { this.clientSocket = clientSocket; } public void run() { BankApplication bankApp = new BankApplication(); for (Client c : bankApp.initialize().values()) { try { ingBank.addClient(c); } catch (ClientExistsException e) { e.printStackTrace(); } } try { System.out.println("Server: Connected to " + clientSocket.getInetAddress().getHostName()); out = new ObjectOutputStream(clientSocket.getOutputStream()); in = new ObjectInputStream(clientSocket.getInputStream()); out.flush(); String serverMessage, userMessage; userMessage = (String) in.readObject(); System.out.println("Server: User Type :" + userMessage.toString()); if (userMessage.toString().equalsIgnoreCase("Client")) { //Client User logic cdi = new ClientDAOImp(ingBank); serverMessage = cdi.execute(userMessage); out.writeObject(serverMessage); while (userMessage != null && !(userMessage.toString().equalsIgnoreCase("exit"))) { userMessage = (String) in.readObject(); System.out.println("Client: " + userMessage.toString()); out.writeObject(cdi.execute(userMessage.toString())); out.flush(); } } else if (userMessage.toString().equalsIgnoreCase("Office")) { //Office User logic bdi = new BankOfficeDAOImp(ingBank); serverMessage = bdi.execute(userMessage); out.writeObject(serverMessage); out.flush(); while (userMessage != null && !(userMessage.toString().equalsIgnoreCase("exit"))) { userMessage = (String) in.readObject(); System.out.println("Office: " + userMessage.toString()); out.writeObject(bdi.execute(userMessage.toString())); out.flush(); } } else { System.out.println("Unknown user"); } bst.getClientCounter().getAndDecrement(); //Decrementing Client counter after disconnect } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { try { out.close(); in.close(); socket.close(); System.out.println("Connections closed"); } catch (IOException e) { e.printStackTrace(); } } } }