react-native/React/Modules/RCTEventEmitter.m
Nick Lockwood 2525feb37f Updated Websocket to use new event system
Reviewed By: javache

Differential Revision: D3292473

fbshipit-source-id: f9a9e0a1b5a12f7fa8b36ebdba88405370f91c54
2016-05-12 08:30:24 -07:00

83 lines
1.8 KiB
Objective-C

/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import "RCTEventEmitter.h"
#import "RCTAssert.h"
#import "RCTLog.h"
@implementation RCTEventEmitter
{
NSInteger _listenerCount;
}
+ (NSString *)moduleName
{
return @"";
}
- (NSArray<NSString *> *)supportedEvents
{
RCTAssert(NO, @"You must override the `supportedEvents` method of %@", [self class]);
return nil;
}
- (void)sendEventWithName:(NSString *)eventName body:(id)body
{
RCTAssert(_bridge != nil, @"bridge is not set.");
if (RCT_DEBUG && ![[self supportedEvents] containsObject:eventName]) {
RCTLogError(@"`%@` is not a supported event type for %@", eventName, [self class]);
}
if (_listenerCount > 0) {
[_bridge enqueueJSCall:@"RCTDeviceEventEmitter.emit"
args:body ? @[eventName, body] : @[eventName]];
} else {
RCTLogWarn(@"Sending `%@` with no listeners registered.", eventName);
}
}
- (void)startObserving
{
// Does nothing
}
- (void)stopObserving
{
// Does nothing
}
- (void)dealloc
{
if (_listenerCount > 0) {
[self stopObserving];
}
}
RCT_EXPORT_METHOD(addListener:(NSString *)eventName)
{
if (RCT_DEBUG && ![[self supportedEvents] containsObject:eventName]) {
RCTLogError(@"`%@` is not a supported event type for %@", eventName, [self class]);
}
if (_listenerCount == 0) {
[self startObserving];
}
_listenerCount++;
}
RCT_EXPORT_METHOD(removeListeners:(NSInteger)count)
{
RCTAssert(count <= _listenerCount, @"Attempted to remove more listeners than added");
if (count == _listenerCount) {
[self stopObserving];
}
_listenerCount -= count;
}
@end