public synchronized CompletableFuture<Void> closeChannels() {
    List<CompletableFuture<Channel>> futures = new ArrayList<>();
    for (Channel c : getAllChannels()) {
      futures.add(c.close());
    }

    @SuppressWarnings("rawtypes")
    CompletableFuture[] array = futures.toArray(new CompletableFuture[0]);
    closed = true;
    return CompletableFuture.allOf(array);
  }
  public synchronized boolean addChannel(Channel channel) {
    if (closed) {
      channel.close();
      return false;
    }

    this.connectedChannels.add(channel);
    return true;
  }