32 lines
826 B
GDScript3
Raw Normal View History

2025-01-11 00:25:52 +01:00
static func ref_count_() -> Callable:
var connectable_subscription = RefValue.Null()
var count = RefValue.Set(0)
var ref_count = func(source : ConnectableObservable) -> Observable:
var subscribe = func(
observer : ObserverBase,
scheduler : SchedulerBase = null
) -> DisposableBase:
count.v += 1
var should_connect = count.v == 1
var subscription = source.subscribe(
observer, GDRx.basic.noop, GDRx.basic.noop,
scheduler
)
if should_connect:
connectable_subscription.v = source.connect_observable(scheduler)
var dispose = func():
subscription.dispose()
count.v -= 1
if count.v <= 0 and connectable_subscription.v != null:
connectable_subscription.v.dispose()
return Disposable.new(dispose)
return Observable.new(subscribe)
return ref_count