Files
crossdesk/apps/ios/CrossDeskMobile/Bridge/CrossDeskRTCBridge.h
T

183 lines
7.0 KiB
C++

#import <CoreVideo/CoreVideo.h>
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, CrossDeskSignalState) {
CrossDeskSignalStateConnecting = 0,
CrossDeskSignalStateConnected,
CrossDeskSignalStateFailed,
CrossDeskSignalStateClosed,
CrossDeskSignalStateReconnecting,
CrossDeskSignalStateServerClosed,
CrossDeskSignalStateTLSCertificateError,
CrossDeskSignalStateCredentialUnavailable,
};
typedef NS_ENUM(NSInteger, CrossDeskConnectionState) {
CrossDeskConnectionStateConnecting = 0,
CrossDeskConnectionStateConnected,
CrossDeskConnectionStateGathering,
CrossDeskConnectionStateDisconnected,
CrossDeskConnectionStateFailed,
CrossDeskConnectionStateClosed,
CrossDeskConnectionStateIncorrectPassword,
CrossDeskConnectionStateNoSuchID,
CrossDeskConnectionStateRemoteUnavailable,
};
typedef NS_ENUM(NSInteger, CrossDeskPointerAction) {
CrossDeskPointerActionMove = 0,
CrossDeskPointerActionLeftDown,
CrossDeskPointerActionLeftUp,
CrossDeskPointerActionRightDown,
CrossDeskPointerActionRightUp,
CrossDeskPointerActionMiddleDown,
CrossDeskPointerActionMiddleUp,
};
typedef NS_ENUM(NSInteger, CrossDeskVideoAdaptationPolicy) {
CrossDeskVideoAdaptationPolicyFrameRatePriority = 0,
CrossDeskVideoAdaptationPolicyQualityPriority,
CrossDeskVideoAdaptationPolicyBalanced,
};
@class CrossDeskRTCBridge;
typedef NS_ENUM(NSInteger, CrossDeskTraversalMode) {
CrossDeskTraversalModeUnknown = 0,
CrossDeskTraversalModeDirect,
CrossDeskTraversalModeRelay,
};
typedef struct {
uint32_t inboundBitrate;
uint32_t outboundBitrate;
float lossRate;
} CrossDeskTrafficStats;
/// Value snapshot: no MiniRTC callback-owned memory crosses the main queue.
typedef struct {
CrossDeskTrafficStats video;
CrossDeskTrafficStats audio;
CrossDeskTrafficStats data;
CrossDeskTrafficStats total;
double rttMilliseconds;
BOOL srtpActive;
CrossDeskTraversalMode traversalMode;
} CrossDeskNetworkStats;
@protocol CrossDeskRTCBridgeDelegate <NSObject>
@optional
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didChangeSignalState:(CrossDeskSignalState)state;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didChangeIdentityStorageError:(BOOL)hasError;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didChangeConnectionState:(CrossDeskConnectionState)state
remoteID:(NSString *)remoteID;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didProvisionIdentity:(NSString *)identity;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didReceivePixelBuffer:(CVPixelBufferRef)pixelBuffer
width:(NSInteger)width
height:(NSInteger)height
captureUptime:(NSTimeInterval)captureUptime;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didReceiveHostName:(NSString *)hostName
appVersion:(NSString *)appVersion
platform:(NSString *)platform
displayNames:(NSArray<NSString *> *)displayNames
displaySizes:(NSArray<NSValue *> *)displaySizes
supportsVideoSettings:(BOOL)supportsVideoSettings;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didReceiveVideoSettingsQuality:(NSInteger)quality
frameRate:(NSInteger)frameRate
preference:(NSInteger)preference
requestID:(uint32_t)requestID
accepted:(BOOL)accepted;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didReceivePresence:(NSDictionary<NSString *, NSNumber *> *)presence
snapshot:(BOOL)snapshot;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didReceiveAnnouncementMessage:(NSData *)message;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didFailAnnouncementRequest:(NSString *)requestID;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didReceiveCursorVisible:(BOOL)visible
shape:(NSInteger)shape
positionUpdate:(BOOL)positionUpdate
positionValid:(BOOL)positionValid
x:(float)x
y:(float)y
visualOffsetX:(float)visualOffsetX
visualOffsetY:(float)visualOffsetY
displayIndex:(NSInteger)displayIndex
sequence:(uint32_t)sequence;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didReceiveAudioPCM:(NSData *)pcmData;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didReceiveClipboardText:(NSString *)text;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didUpdateFileTransfer:(NSString *)fileName
progress:(double)progress
sending:(BOOL)sending;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didReceiveFileAtURL:(NSURL *)fileURL;
- (void)rtcBridge:(CrossDeskRTCBridge *)bridge
didUpdateNetworkStats:(CrossDeskNetworkStats)stats
NS_SWIFT_NAME(rtcBridge(_:didUpdateNetworkStats:));
@end
/// Objective-C++ boundary around the native MiniRTC C API.
///
/// All MiniRTC ownership and calls are serialized internally. Delegate methods
/// are delivered on the main queue so SwiftUI never touches callback threads.
@interface CrossDeskRTCBridge : NSObject
@property(nonatomic, weak, nullable) id<CrossDeskRTCBridgeDelegate> delegate;
// Uses the same release/patch ordering as the desktop controller.
+ (nullable NSString *)availableUpdateForAppVersion:(NSString *)appVersion
releaseJSON:(NSData *)releaseJSON
NS_SWIFT_NAME(availableUpdate(appVersion:releaseJSON:));
- (void)configureWithSignalHost:(NSString *)host
signalPort:(NSInteger)signalPort;
- (void)setVideoAdaptationPolicy:(CrossDeskVideoAdaptationPolicy)policy;
- (void)sendVideoSettingsWithQuality:(NSInteger)quality
frameRate:(NSInteger)frameRate
preference:(NSInteger)preference
requestID:(uint32_t)requestID
NS_SWIFT_NAME(sendVideoSettings(quality:frameRate:preference:requestID:));
- (void)requestPresenceForRemoteIDs:(NSArray<NSString *> *)remoteIDs
subscribe:(BOOL)subscribe
NS_SWIFT_NAME(requestPresence(remoteIDs:subscribe:));
- (void)invalidatePresence;
- (void)sendAnnouncementRequest:(NSData *)request requestID:(NSString *)requestID
NS_SWIFT_NAME(sendAnnouncementRequest(_:requestID:));
- (void)connectToRemoteID:(NSString *)remoteID password:(NSString *)password;
- (void)disconnect;
// Close both session and signaling peers, including automatic reconnection.
- (void)stopNetworking;
- (void)requestKeyFrame;
- (void)sendPointerAtX:(float)x
y:(float)y
action:(CrossDeskPointerAction)action
NS_SWIFT_NAME(sendPointer(x:y:action:));
- (void)sendScrollX:(float)x y:(float)y deltaX:(NSInteger)deltaX
deltaY:(NSInteger)deltaY;
- (void)sendWindowsKeyCode:(NSUInteger)keyCode isDown:(BOOL)isDown;
- (void)sendText:(NSString *)text;
- (void)switchToDisplay:(NSInteger)displayIndex;
- (void)setAudioEnabled:(BOOL)enabled;
- (void)sendClipboardText:(NSString *)text;
- (void)sendFileAtURL:(NSURL *)fileURL;
- (void)sendSecureAttentionSequence;
@end
NS_ASSUME_NONNULL_END