class CoinmateStreamingExchange extends CoinmateExchange implements StreamingExchange {
  private static final String API_BASE = "wss://coinmate.io/api/websocket";

  private CoinmateStreamingService streamingService;
  private CoinmateStreamingMarketDataService streamingMarketDataService;
  private CoinmateStreamingAccountService streamingAccountService;
  private CoinmateStreamingTradeService streamingTradeService;

  public CoinmateStreamingExchange() {}

  private void createExchange() {<FILL_FUNCTION_BODY>}

  @Override
  protected void initServices() {
    super.initServices();
    createExchange();
    streamingMarketDataService = new CoinmateStreamingMarketDataService(streamingService);
    streamingAccountService = new CoinmateStreamingAccountService(streamingService);
    streamingTradeService = new CoinmateStreamingTradeService(streamingService);
  }

  @Override
  public Completable connect(ProductSubscription... args) {
    return streamingService.connect();
  }

  @Override
  public Completable disconnect() {
    return streamingService.disconnect();
  }

  @Override
  public StreamingMarketDataService getStreamingMarketDataService() {
    return streamingMarketDataService;
  }

  @Override
  public StreamingTradeService getStreamingTradeService() {
    return streamingTradeService;
  }

  @Override
  public StreamingAccountService getStreamingAccountService() {
    return streamingAccountService;
  }

  @Override
  public boolean isAlive() {
    return streamingService.isSocketOpen();
  }

  @Override
  public void useCompressedMessages(boolean compressedMessages) {}
}

    AuthParams authParams;
    if (exchangeSpecification.getApiKey() != null) {
      authParams =
          new AuthParams(
              exchangeSpecification.getSecretKey(),
              exchangeSpecification.getApiKey(),
              exchangeSpecification.getUserName(),
              getNonceFactory());
    } else {
      authParams = null;
    }

    streamingService = new CoinmateStreamingService(API_BASE, authParams);
    applyStreamingSpecification(getExchangeSpecification(), streamingService);
  
<methods>public non-sealed void <init>() ,public org.knowm.xchange.ExchangeSpecification getDefaultExchangeSpecification() ,public void remoteInit() throws java.io.IOException, org.knowm.xchange.exceptions.ExchangeException<variables>