112 lines
3.3 KiB
GDScript
112 lines
3.3 KiB
GDScript
extends Comparable
|
|
class_name Notification
|
|
|
|
## Represents a notification to an observer.
|
|
|
|
var has_value : bool
|
|
var value
|
|
var kind : String
|
|
|
|
## Default constructor used by derived types.
|
|
func _init():
|
|
self.has_value = false
|
|
self.value = null
|
|
self.kind = ""
|
|
|
|
## Invokes the delegate corresponding to the notification or an
|
|
## observer and returns the produced result.
|
|
## [br]
|
|
## [b]Examples:[/b]
|
|
## [codeblock]
|
|
## notification.accept(observer)
|
|
## notification.accept(on_next, on_error, on_completed)
|
|
## [/codeblock]
|
|
## [br]
|
|
## [b]Args:[/b]
|
|
## [br]
|
|
## [code]on_next[/code] Delegate to invoke for an OnNext notification.
|
|
## [br]
|
|
## [code]on_error[/code] [Optional] Delegate to invoke for an OnError
|
|
## notification.
|
|
## [br]
|
|
## [code]on_completed[/code] [Optional] Delegate to invoke for an
|
|
## OnCompleted notification.
|
|
## [br][br]
|
|
## [b]Returns:[/b]
|
|
## [br]
|
|
## Result produced by the observation.
|
|
func accept(
|
|
on_next, # Callable or ObserverBase
|
|
on_error : Callable = GDRx.basic.noop,
|
|
on_completed : Callable = GDRx.basic.noop):
|
|
if on_next is ObserverBase:
|
|
return self._accept_observer(on_next)
|
|
|
|
return self._accept(on_next, on_error, on_completed)
|
|
|
|
func _accept(
|
|
_on_next : Callable,
|
|
_on_error : Callable = GDRx.basic.noop,
|
|
_on_completed : Callable = GDRx.basic.noop):
|
|
NotImplementedError.raise()
|
|
|
|
func _accept_observer(_observer : ObserverBase):
|
|
NotImplementedError.raise()
|
|
|
|
## Returns an observable sequence with a single notification,
|
|
## using the specified scheduler, else the immediate scheduler.
|
|
## [br]
|
|
## [b]Args:[/b]
|
|
## [br]
|
|
## [code]scheduler[/code] [Optional] Scheduler to send out the
|
|
## notification calls on.
|
|
## [br][br]
|
|
## [b]Returns:[/b]
|
|
## [br]
|
|
## An observable sequence that surfaces the behavior of the
|
|
## notification upon subscription.
|
|
func to_observable(scheduler : SchedulerBase = null) -> ObservableBase:
|
|
var _scheduler = scheduler if scheduler != null else ImmediateScheduler.singleton()
|
|
|
|
var subscribe = func(observer : ObserverBase, scheduler : SchedulerBase = null) -> DisposableBase:
|
|
var action = func(_scheduler : SchedulerBase, _state):
|
|
self._accept_observer(observer)
|
|
if self.kind == "N":
|
|
observer.on_completed()
|
|
|
|
var __scheduler = scheduler if scheduler != null else _scheduler
|
|
return __scheduler.schedule(action)
|
|
|
|
return Observable.new(subscribe)
|
|
|
|
## Indicates whether this instance and a specified object are equal.
|
|
func equals(other : Notification) -> bool:
|
|
var other_string = "" if other == null else str(other)
|
|
return str(self) == other_string
|
|
|
|
## Inherited from [Comparable]
|
|
func eq(other) -> bool:
|
|
if not (other is Notification):
|
|
return false
|
|
return self.equals(other)
|
|
|
|
## Creates an observer from a notification callback.
|
|
## [br]
|
|
## [b]Args:[/b]
|
|
## [br]
|
|
## [code]handler[/code] Action that handles a notification.
|
|
## [br][br]
|
|
## [b]Returns:[/b]
|
|
## [br]
|
|
## The observer object that invokes the specified handler using
|
|
## a notification corresponding to each message it receives.
|
|
static func from_notifier(handler : Callable) -> Observer:
|
|
var _on_next = func(value_):
|
|
return handler.call(GDRx.OnNext.new(value_))
|
|
var _on_error = func(err_):
|
|
return handler.call(GDRx.OnError.new(err_))
|
|
var _on_completed = func():
|
|
return handler.call(GDRx.OnCompleted.new())
|
|
|
|
return Observer.new(_on_next, _on_error, _on_completed)
|