class Servient {

    public CompletableFuture<Void> start() {
        log.info("Start Servient");
        CompletableFuture<Void>[] serverFutures = servers.stream().map(protocolServer -> protocolServer.start(this)).toArray(CompletableFuture[]::new);
        CompletableFuture<Void>[] clientFutures = clientFactories.values().stream().map(ProtocolClientFactory::init).toArray(CompletableFuture[]::new);

        CompletableFuture<Void>[] futures = Stream.concat(Arrays.stream(clientFutures), Arrays.stream(serverFutures)).toArray(CompletableFuture[]::new);

        return CompletableFuture.allOf(futures);
    }

    public  Servient();
    public  Servient(Config config);
    public  Servient(ServientConfig config);
      Servient(List<ProtocolServer> servers,
             Map<String, ProtocolClientFactory> clientFactories,
             Map<String, Object> credentialStore,
             Map<String, ExposedThing> things);

}