docs: @Override
    public void process() {
      if (client.isDone() || executorService.isTerminated()) {
        throw new IllegalStateException("Client is already stopped");
      }
      Runnable runner = new Runnable() {
        @Override
        public void run() {
          try {
            while (!client.isDone()) {
              String msg = messageQueue.take();
              try {
                parseMessage(msg);
              } catch (Exception e) {
                logger.warn("Exception thrown during parsing msg " + msg, e);
                onException(e);
              }
            }
          } catch (Exception e) {
            onException(e);
          }
        }
      };
  
      executorService.execute(runner);
    }