1 /* 2 * Copyright 2014 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #import <Foundation/Foundation.h> 12 13 #import "RTCVideoTrack.h" 14 15 typedef NS_ENUM(NSInteger, ARDAppClientState) { 16 // Disconnected from servers. 17 kARDAppClientStateDisconnected, 18 // Connecting to servers. 19 kARDAppClientStateConnecting, 20 // Connected to servers. 21 kARDAppClientStateConnected, 22 }; 23 24 @class ARDAppClient; 25 // The delegate is informed of pertinent events and will be called on the 26 // main queue. 27 @protocol ARDAppClientDelegate <NSObject> 28 29 - (void)appClient:(ARDAppClient *)client 30 didChangeState:(ARDAppClientState)state; 31 32 - (void)appClient:(ARDAppClient *)client 33 didChangeConnectionState:(RTCICEConnectionState)state; 34 35 - (void)appClient:(ARDAppClient *)client 36 didReceiveLocalVideoTrack:(RTCVideoTrack *)localVideoTrack; 37 38 - (void)appClient:(ARDAppClient *)client 39 didReceiveRemoteVideoTrack:(RTCVideoTrack *)remoteVideoTrack; 40 41 - (void)appClient:(ARDAppClient *)client 42 didError:(NSError *)error; 43 44 - (void)appClient:(ARDAppClient *)client 45 didGetStats:(NSArray *)stats; 46 47 @end 48 49 // Handles connections to the AppRTC server for a given room. Methods on this 50 // class should only be called from the main queue. 51 @interface ARDAppClient : NSObject 52 53 // If |shouldGetStats| is true, stats will be reported in 1s intervals through 54 // the delegate. 55 @property(nonatomic, assign) BOOL shouldGetStats; 56 @property(nonatomic, readonly) ARDAppClientState state; 57 @property(nonatomic, weak) id<ARDAppClientDelegate> delegate; 58 59 // Convenience constructor since all expected use cases will need a delegate 60 // in order to receive remote tracks. 61 - (instancetype)initWithDelegate:(id<ARDAppClientDelegate>)delegate; 62 63 // Establishes a connection with the AppRTC servers for the given room id. 64 // If |isLoopback| is true, the call will connect to itself. 65 // If |isAudioOnly| is true, video will be disabled for the call. 66 - (void)connectToRoomWithId:(NSString *)roomId 67 isLoopback:(BOOL)isLoopback 68 isAudioOnly:(BOOL)isAudioOnly; 69 70 // Disconnects from the AppRTC servers and any connected clients. 71 - (void)disconnect; 72 73 @end 74