Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

observable_connectable

crates.io ci codecov license

Maintains an internal connector subject and only subscribes the source when connect is called, letting multiple subscribers share that connection.

See Also

  • ShareOperator - Multicast a source through a connector so downstream subscribers share one upstream subscription. The connector can be any subject.

Example

cargo run -p rx_core --example observable_connectable_example
let mut source = PublishSubject::<usize>::default();
let mut connectable = ConnectableObservable::new(
  source.clone().finalize(|| println!("disconnected...")),
  ConnectableOptions {
    connector_provider: ProvideWithDefault::<ReplaySubject<1, _>>::default(),
    disconnect_when_ref_count_zero: true,
    reset_connector_on_disconnect: false,
    reset_connector_on_complete: false,
    reset_connector_on_error: false,
  },
);
let mut _subscription_0 = connectable.subscribe(PrintObserver::new("connectable_observable 0"));
source.next(0);

println!("connect!");
let _connection = connectable.connect();
source.next(1);
connectable.disconnect();

let mut _subscription_1 = connectable.subscribe(PrintObserver::new("connectable_observable 1"));
println!("connect again!");
connectable.connect();
source.next(2);

println!("end");

Output:

connect!
connectable_observable 0 - next: 1
disconnected...
connectable_observable 1 - next: 1
connect again!
connectable_observable 1 - next: 2
connectable_observable 0 - next: 2
end
connectable_observable 1 - unsubscribed
disconnected...
connectable_observable 0 - unsubscribed