code: synchronized void asyncReconnect(final URI reconnectUri, String authKey, final ReconnectCallback callback) {
          if (getState() != State.OPEN) {
              return;
          }
          // Update the configuration with the new credentials
          final ProtocolConnectionConfiguration config = ProtocolConnectionConfiguration.copy(configuration);
          config.setCallbackHandler(createClientCallbackHandler(userName, authKey));
          config.setUri(reconnectUri);
          this.configuration = config;
  
          final ReconnectRunner reconnectTask = this.reconnectRunner;
          if (reconnectTask == null) {
              final ReconnectRunner task = new ReconnectRunner();
              task.callback = callback;
              task.future = executorService.submit(task);
          } else {
              reconnectTask.callback = callback;
          }
      }
docs: This continuously tries to reconnect in a separate thread and will only stop if the connection was established
  successfully or the server gets shutdown. If there is currently a reconnect task active the connection paramaters
  and callback will get updated.
  
  @param reconnectUri    the updated connection uri
  @param authKey         the updated authentication key
  @param callback        the current callback