67 lines
2.1 KiB
GDScript
67 lines
2.1 KiB
GDScript
static func multicast_(
|
|
subject : SubjectBase = null,
|
|
subject_factory = null,
|
|
mapper = null
|
|
) -> Callable:
|
|
|
|
# """Multicasts the source sequence notifications through an
|
|
# instantiated subject into all uses of the sequence within a mapper
|
|
# function. Each subscription to the resulting sequence causes a
|
|
# separate multicast invocation, exposing the sequence resulting from
|
|
# the mapper function's invocation. For specializations with fixed
|
|
# subject types, see Publish, PublishLast, and Replay.
|
|
#
|
|
# Examples:
|
|
# >>> var res = GDRx.op.multicast(observable)
|
|
# >>> var res = GDRx.op.multicast(
|
|
# null,
|
|
# func(scheduler): Subject.new(),
|
|
# func(x): return x
|
|
# )
|
|
#
|
|
# Args:
|
|
# subject_factory: Factory function to create an intermediate
|
|
# subject through which the source sequence's elements will be
|
|
# multicast to the mapper function.
|
|
# subject: Subject to push source elements into.
|
|
# mapper: [Optional] Mapper function which can use the
|
|
# multicasted source sequence subject to the policies enforced
|
|
# by the created subject. Specified only if subject_factory
|
|
# is a factory function.
|
|
#
|
|
# Returns:
|
|
# An observable sequence that contains the elements of a sequence
|
|
# produced by multicasting the source sequence within a mapper
|
|
# function.
|
|
# """
|
|
|
|
var multicast = func(source : Observable) -> Observable:
|
|
if subject_factory != null:
|
|
|
|
var subscribe = func(
|
|
observer : ObserverBase,
|
|
scheduler : SchedulerBase = null
|
|
) -> DisposableBase:
|
|
if GDRx.assert_(subject_factory is Callable): return Disposable.new()
|
|
var connectable = source.pipe1(
|
|
GDRx.op.multicast(subject_factory.call(scheduler))
|
|
)
|
|
if GDRx.assert_(mapper is Callable): return Disposable.new()
|
|
var subscription = mapper.call(connectable).subscribe(
|
|
observer, GDRx.basic.noop, GDRx.basic.noop,
|
|
scheduler
|
|
)
|
|
|
|
return CompositeDisposable.new([
|
|
subscription, connectable.connect_observable(scheduler)
|
|
])
|
|
|
|
return Observable.new(subscribe)
|
|
|
|
if subject == null:
|
|
NullReferenceError.raise()
|
|
var ret = ConnectableObservable.new(source, subject)
|
|
return ret
|
|
|
|
return multicast
|