@Override
    public void run() {
        try {
            LOG.info("Starting ConnectionListener on port: " + listener.getLocalPort());
            while (true) {
                Socket client = listener.accept();
                GameNetworkInterface gnet = Guice.createInjector(new GuiceConfig()).getInstance(GameNetworkInterface.class);
                gnet.connectTo(client);
                IPacket inpack = gnet.receive(CONNECTION_TIMEOUT);
                handlePacket(gnet, inpack);
            }
        } catch (SocketException e) {
            LOG.debug("ConnectionListener stopped!");
        } catch (IOException e) {
            LOG.fatal(e.getMessage());
        } catch (ClassNotFoundException e) {
            LOG.fatal("Missing Class File: " + e.getCause().getMessage());
        } catch (ConnectionFailure e) {
            LOG.fatal("Connection failure in ConnectionListener: " + e.getCause().getMessage());
        }
    }