class WebSocketService implements Web3jService {

    @Override
    public <T extends Notification<?>> Observable<T> subscribe(
            Request request,
            String unsubscribeMethod,
            Class<T> responseType) {
        // We can't use usual Observer since we can call "onError"
        // before first client is subscribed and we need to
        // preserve it
        BehaviorSubject<T> subject = BehaviorSubject.create();

        // We need to subscribe synchronously, since if we return
        // an Observable to a client before we got a reply
        // a client can unsubscribe before we know a subscription
        // id and this can cause a race condition
        subscribeToEventsStream(request, subject, responseType);

        return subject
                .doOnUnsubscribe(() -> closeSubscription(subject, unsubscribeMethod));

    }

    public  WebSocketService(String serverUrl, boolean includeRawResponses);
    public  WebSocketService(WebSocketClient webSocketClient,
                     boolean includeRawResponses);
      WebSocketService(WebSocketClient webSocketClient,
                     ScheduledExecutorService executor,
                     boolean includeRawResponses);

}