12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- //
- // RACDynamicSignal.m
- // ReactiveObjC
- //
- // Created by Justin Spahr-Summers on 2013-10-10.
- // Copyright (c) 2013 GitHub, Inc. All rights reserved.
- //
- #import "RACDynamicSignal.h"
- #import <ReactiveObjC/RACEXTScope.h>
- #import "RACCompoundDisposable.h"
- #import "RACPassthroughSubscriber.h"
- #import "RACScheduler+Private.h"
- #import "RACSubscriber.h"
- #import <libkern/OSAtomic.h>
- @interface RACDynamicSignal ()
- // The block to invoke for each subscriber.
- @property (nonatomic, copy, readonly) RACDisposable * (^didSubscribe)(id<RACSubscriber> subscriber);
- @end
- @implementation RACDynamicSignal
- #pragma mark Lifecycle
- + (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe {
- RACDynamicSignal *signal = [[self alloc] init];
- signal->_didSubscribe = [didSubscribe copy];
- return [signal setNameWithFormat:@"+createSignal:"];
- }
- #pragma mark Managing Subscribers
- - (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber {
- NSCParameterAssert(subscriber != nil);
- RACCompoundDisposable *disposable = [RACCompoundDisposable compoundDisposable];
- subscriber = [[RACPassthroughSubscriber alloc] initWithSubscriber:subscriber signal:self disposable:disposable];
- if (self.didSubscribe != NULL) {
- RACDisposable *schedulingDisposable = [RACScheduler.subscriptionScheduler schedule:^{
- RACDisposable *innerDisposable = self.didSubscribe(subscriber);
- [disposable addDisposable:innerDisposable];
- }];
- [disposable addDisposable:schedulingDisposable];
- }
-
- return disposable;
- }
- @end
|