mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-10-17 01:13:19 +08:00
183 lines
7.0 KiB
C++
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
|