public void run() {
        serverQuery.getLogger().info("Input thread spawned");

        // Instantiate a TS3 Reader object
        TS3Reader reader = new TS3Reader(new InputStreamReader(stream));

        try {
            // Skip the first 2 lines (as they are just a welcome message)
            for(int i = 0; i < 2; i++) reader.readLine();

            // Read in input
            String input;
            while((input = reader.readLine()) != null) {
                if(input.startsWith("notify")) {
                    // Send to the server query to handle notification
                    serverQuery.getEventThread().notify(input);
                    continue;
                } else {
                    // Add input to our queue, blocking if full
                    queue.put(input);
                }

                // Break out of our loop if we were interrupted
                if(interrupted()) {
                    serverQuery.getLogger().debug(
                            "Input thread interrupted");
                    break;
                }
            }
        } catch(IOException e) {
            serverQuery.getLogger().debug("Unable to read from socket");
        } catch(InterruptedException e) {
            serverQuery.getLogger().debug("Input thread interrupted");
        }

        serverQuery.getLogger().info("Input thread terminated");
    }