All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.vertx.rx.java.ObservableHandler Maven / Gradle / Ivy

package io.vertx.rx.java;

import io.vertx.core.Handler;
import rx.Observable;

/**
 * @author Julien Viet
 */
public class ObservableHandler extends Observable {

  private abstract static class HandlerAdapter extends ObservableOnSubscribeAdapter implements Handler {

    private static final int STATUS_MULTI = 0;
    private static final int STATUS_SINGLE = 1;
    private static final int STATUS_DISPATCHED = 2;

    private boolean subscribed;
    private int status;

    private HandlerAdapter(boolean multi) {
      status = multi ? STATUS_MULTI : STATUS_SINGLE;
    }

    @Override
    public void onSubscribed() {
      subscribed = true;
      if (status == STATUS_DISPATCHED) {
        fireComplete();
      }
    }

    @Override
    public void handle(T event) {
      if (status == STATUS_MULTI) {
        if (subscribed) {
          dispatch(event);
        }
      } else if (status == STATUS_SINGLE) {
        if (subscribed) {
          dispatch(event);
          fireComplete();
        }
        status = STATUS_DISPATCHED;
      }
    }

    @Override
    protected void onUnsubscribed() {
      subscribed = false;
    }

    protected abstract void dispatch(T event);
  }

  public ObservableHandler() {
    this(true);
  }

  public ObservableHandler(boolean multi) {
    this(new HandlerAdapter(multi) {
      @Override
      protected void dispatch(T event) {
        this.fireNext(event);
      }
    });
  }

  private HandlerAdapter adapter;

  private ObservableHandler(HandlerAdapter adapter) {
    super(adapter);
    this.adapter = adapter;
  }

  public Handler toHandler() {
    return adapter;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy