session-ios/SessionUtilitiesKit/General/DarwinNotificationCenter.h

54 lines
2.3 KiB
Objective-C

//
// Copyright (c) 2020 Open Whisper Systems. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class DarwinNotificationName;
extern const int DarwinNotificationInvalidObserver;
@interface DarwinNotificationCenter : NSObject
/// Determines if an observer token is valid for a current registration.
/// Negative integers are never valid. A positive or zero value is valid
/// if the current process has a registration associated with the given value.
/// @param observerToken The token returned by `addObserverForName:`
+ (BOOL)isValidObserver:(int)observerToken;
/// Post a darwin notification that can be listened for from other processes.
/// @param name The name of the notification to post.
+ (void)postNotificationName:(DarwinNotificationName *)name;
/// Add an observer for a darwin notification of the given name.
/// @param name The name of the notification to listen for.
/// @param queue The queue to callback on.
/// @param block The block to callback. Includes the observer token as an input parameter to allow
/// removing the observer after receipt.
/// @return An `int` observer token that can be used to remove this observer.
+ (int)addObserverForName:(DarwinNotificationName *)name queue:(dispatch_queue_t)queue usingBlock:(void (^)(int))block;
/// Stops listening for notifications registered by the given observer token.
/// @param observerToken The token returned by `addObserverForName:` for the notification you want to stop listening
/// for.
+ (void)removeObserver:(int)observerToken;
/// Sets the state value for a given observer. This value can be set and read from
/// any process listening for this notification. Note: `setState:` and `getState`
/// are vulnerable to races.
/// @param state The `uint64_t` state you wish to share with another process.
/// @param observerToken The token returned by `addObserverForName:` for the notification you want to set state for.
+ (void)setState:(uint64_t)state forObserver:(int)observerToken;
/// Retrieves the state for a given observer. This value can be set and read from
/// any process listening for this notification. Note: `setState:` and `getState`
/// are vulnerable to races.
/// @param observerToken The token returned by `addObserverForName:` for the notification you want to get state for.
+ (uint64_t)getStateForObserver:(int)observerToken;
@end
NS_ASSUME_NONNULL_END