@Override
    public void run() {
        try {
            this.is = this.client.getInputStream();
            this.os = this.client.getOutputStream();
            this.ois = new ObjectInputStream(is);
            this.writer = new PrintWriter(this.client.getOutputStream(), true);
            
            Command cmd;
            Object obj;
            
            while (!masterStop) {
                obj = this.ois.readObject();
                if (obj.equals("-1")) {
                    halt();
                    break;
                } 
                if (obj instanceof Command) {
                    cmd = (Command) obj;
                    if (!cmd.equals(handler.poll())) {
                        System.out.println("Recieved Command on " + this.getName() + " -> \n" + cmd.toString());
                        this.handler.pass(cmd);
                        this.writer.println("Command Recieved on Server -> \n" + cmd.toString());
                    }
                }
                
            }
            
        } catch (SocketException e) {
            System.err.println("Client SocketException: " + e.getMessage());
            System.exit(-1);
        } catch (IOException e) {
            System.err.println("Client IOExcpetion: " + e.getMessage());
            System.exit(-1);
        } catch (Exception e) {
            System.err.println("Unknown Client Excpetion: " + e.getMessage());
            System.exit(-1);
        }
    }