Sha256: 85590a9cb24438a28b423300029e200dbec4c60dbaf8f60da435c4307cfd3836
Contents?: true
Size: 1.62 KB
Versions: 49
Compression:
Stored size: 1.62 KB
Contents
import { Observable } from '../Observable'; import { Subscription } from '../Subscription'; import { Scheduler } from '../Scheduler'; import { TestMessage } from './TestMessage'; import { SubscriptionLog } from './SubscriptionLog'; import { SubscriptionLoggable } from './SubscriptionLoggable'; import { applyMixins } from '../util/applyMixins'; import { Subscriber } from '../Subscriber'; /** * We need this JSDoc comment for affecting ESDoc. * @ignore * @extends {Ignored} */ export class ColdObservable<T> extends Observable<T> implements SubscriptionLoggable { public subscriptions: SubscriptionLog[] = []; scheduler: Scheduler; logSubscribedFrame: () => number; logUnsubscribedFrame: (index: number) => void; constructor(public messages: TestMessage[], scheduler: Scheduler) { super(function (this: ColdObservable<T>, subscriber: Subscriber<any>) { const observable: ColdObservable<T> = this; const index = observable.logSubscribedFrame(); subscriber.add(new Subscription(() => { observable.logUnsubscribedFrame(index); })); observable.scheduleMessages(subscriber); return subscriber; }); this.scheduler = scheduler; } scheduleMessages(subscriber: Subscriber<any>) { const messagesLength = this.messages.length; for (let i = 0; i < messagesLength; i++) { const message = this.messages[i]; subscriber.add( this.scheduler.schedule(({message, subscriber}) => { message.notification.observe(subscriber); }, message.frame, {message, subscriber}) ); } } } applyMixins(ColdObservable, [SubscriptionLoggable]);
Version data entries
49 entries across 49 versions & 4 rubygems