docs: public <T> T invokeWithClientSession(int targetPlayer, ClientTask<T> task, String description)
              throws Exception {
          if (!isRunning()) {
              throw new IllegalStateException("ConnectionManager is not running, aborting " + description);
          }
  
          final Client client = allocateClient(targetPlayer, description);
          try {
              return task.useClient(client);
          } finally {
              freeClient(client);
          }
      }