2021-10-19 18:06:19 +08:00
|
|
|
//
|
|
|
|
// RTCManager.m
|
|
|
|
// xplan-ios
|
|
|
|
//
|
|
|
|
// Created by zu on 2021/10/19.
|
|
|
|
//
|
|
|
|
|
|
|
|
#import "RtcManager.h"
|
|
|
|
#import "AgoraRtcImpl.h"
|
|
|
|
|
|
|
|
@interface RtcManager()
|
|
|
|
|
2021-10-20 14:21:57 +08:00
|
|
|
@property (nonatomic, strong) id<RtcInterface> engine;
|
2021-10-20 17:06:31 +08:00
|
|
|
@property (nonatomic,assign) id<RtcDelegate> engineDelegate;
|
2021-10-19 18:06:19 +08:00
|
|
|
@property (nonatomic, assign) RtcEngineType engineType;
|
2021-10-20 17:06:31 +08:00
|
|
|
|
2021-10-19 18:06:19 +08:00
|
|
|
@end
|
|
|
|
|
|
|
|
@implementation RtcManager
|
|
|
|
|
2021-10-20 17:06:31 +08:00
|
|
|
+ (instancetype)instance {
|
|
|
|
static dispatch_once_t onceToken;
|
|
|
|
static RtcManager *instance = nil;
|
2021-10-19 18:06:19 +08:00
|
|
|
dispatch_once(&onceToken,^{
|
|
|
|
instance = [[self alloc] init];
|
|
|
|
});
|
|
|
|
return instance;
|
|
|
|
}
|
|
|
|
|
2021-10-20 17:06:31 +08:00
|
|
|
+ (instancetype)initEngineWithType:(RtcEngineType)type delegate:(id<RtcDelegate> _Nullable)delegate{
|
|
|
|
RtcManager* rtcManager = [self instance];
|
|
|
|
[rtcManager setEngineType:type];
|
|
|
|
[rtcManager setEngineDelegate:delegate];
|
|
|
|
return rtcManager;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL)joinChannel:(NSString *)channelId {
|
|
|
|
return [self.engine joinChannel:channelId];
|
2021-10-19 19:29:25 +08:00
|
|
|
}
|
|
|
|
|
2021-10-20 17:06:31 +08:00
|
|
|
- (void)broadcast:(BOOL)on {
|
|
|
|
[self.engine broadcast:on];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL)joinChannel:(NSString *)channelId broadcast:(BOOL)on {
|
|
|
|
return [self.engine joinChannel:channelId broadcast:on];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)exitChannel {
|
|
|
|
[self.engine exitChannel];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)destory {
|
|
|
|
[self.engine destory];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)setEngineType:(RtcEngineType)type {
|
2021-10-19 18:06:19 +08:00
|
|
|
if (_engine && type != _engineType) {
|
|
|
|
[_engine exitChannel];
|
|
|
|
[_engine destory];
|
|
|
|
_engine = nil;
|
|
|
|
}
|
|
|
|
_engineType = type;
|
|
|
|
}
|
|
|
|
|
2021-10-20 17:06:31 +08:00
|
|
|
- (void)setEngineDelegate:(id<RtcDelegate>)delegate {
|
|
|
|
_engineDelegate = delegate;
|
|
|
|
}
|
|
|
|
|
2021-10-20 14:21:57 +08:00
|
|
|
- (id<RtcInterface>)engine {
|
2021-10-19 18:06:19 +08:00
|
|
|
if (!_engine) {
|
|
|
|
switch (_engineType) {
|
2021-10-20 14:21:57 +08:00
|
|
|
case RtcEngineType_Agora:
|
2021-10-20 17:06:31 +08:00
|
|
|
{
|
|
|
|
_engine = [[AgoraRtcImpl alloc] init];
|
2021-10-19 18:06:19 +08:00
|
|
|
}
|
|
|
|
break;
|
2021-10-20 14:21:57 +08:00
|
|
|
default:
|
2021-10-20 17:06:31 +08:00
|
|
|
{
|
|
|
|
_engine = [[AgoraRtcImpl alloc] init];
|
2021-10-19 18:06:19 +08:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2021-10-20 17:06:31 +08:00
|
|
|
if ([_engine isKindOfClass:[BaseRtcImpl class]]) {
|
|
|
|
((BaseRtcImpl*)_engine).delegate = self.engineDelegate;
|
|
|
|
}
|
2021-10-19 18:06:19 +08:00
|
|
|
return _engine;
|
|
|
|
}
|
|
|
|
|
|
|
|
@end
|