如果复制正在运行,如何添加通道?

时间:2017-09-25 07:15:26

标签: couchbase-lite

我正在使用couchbase lite上的复制拉动的动态通道。 如果我使用单个复制对象,我需要先停止,然后启动。如果拉动正在运行那就是问题。如何解决这个问题。我怎么知道是拉跑。有没有办法创建多个复制对象?

1 个答案:

答案 0 :(得分:0)

使用Replication ChangeListener。这是一个监视复制停止的示例。

public class DBHelper implements Replication.ChangeListener {
  private boolean replicationActive = false;
  private List stateListeners = new ArrayList<>();
  ...

  public interface ReplicationStateListener {
    void onChange(boolean isActive);
  }

  public void startReplication(URL gateway, boolean continuous) {
    ...

    pushReplication.addChangeListener(this);
    pushReplication.start();
  }

  public void stopReplication() {
    ...
  }

  public void addReplicationStateListener(ReplicationStateListener listener) {
    stateListeners.add(listener);
  }

  public void removeReplicationStateListener(ReplicationStateListener listener) {
    stateListeners.remove(listener);
  }

  // Replication.ChangeListener
  @Override
  public void changed(Replication.ChangeEvent changeEvent) {
    if (changeEvent.getError() != null) {
      Throwable lastError = changeEvent.getError();

      // React to the error

      return;
    }

    if (changeEvent.getTransition() == null) return;

    ReplicationState dest = changeEvent.getTransition().getDestination();

    replicationActive = ((dest == ReplicationState.STOPPING || dest == ReplicationState.STOPPED) ? false : true);

    stateListeners.forEach(listener -> listener.onChange(replicationActive));
  }
}

您可以在此处阅读更多详细信息:https://blog.couchbase.com/determining-status-replication-couchbase-lite/