cdts/xdts-ios 3/TUICalling/Source/Model/Impl/TRTCSignalFactory.m

109 lines
5.4 KiB
Mathematica
Raw Normal View History

2023-07-27 09:20:00 +08:00
//
// TRTCSignalFactory.m
// TUICalling
//
// Created by adams on 2021/6/17.
//
#import "TRTCSignalFactory.h"
#import "TRTCCallingHeader.h"
#import "TUICallingConstants.h"
static const NSUInteger SIGNALING_VERSION = 4; //
@implementation TRTCSignalFactory
+ (NSMutableDictionary *)packagingSignalingWithExtInfo:(NSString *)extInfo
roomID:(NSUInteger)roomID
cmd:(NSString *)cmd
cmdInfo:(NSString *)cmdInfo
message:(NSString *)message
callType:(CallType)callType {
return [[self class] packagingSignalingWithExtInfo:extInfo roomID:roomID cmd:cmd cmdInfo:cmdInfo userIds:@[] message:message callType:callType];
}
+ (NSMutableDictionary *)packagingSignalingWithExtInfo:(NSString *)extInfo
roomID:(NSUInteger)roomID
cmd:(NSString *)cmd
cmdInfo:(NSString *)cmdInfo
userIds:(NSArray *)userIds
message:(NSString *)message
callType:(CallType)callType {
NSMutableDictionary *signalingDictionary = [@{SIGNALING_EXTRA_KEY_VERSION:@(SIGNALING_VERSION),
SIGNALING_EXTRA_KEY_BUSINESSID:SIGNALING_BUSINESSID,
SIGNALING_EXTRA_KEY_PLATFORM:SIGNALING_PLATFORM,
SIGNALING_EXTRA_KEY_EXTINFO:extInfo,
SIGNALING_EXTRA_KEY_CALL_TYPE:@(callType),
SIGNALING_EXTRA_KEY_DATA:@{SIGNALING_EXTRA_KEY_ROOMID:@(roomID),
SIGNALING_EXTRA_KEY_CMD:cmd,
SIGNALING_EXTRA_KEY_USERIDS:userIds,
SIGNALING_EXTRA_KEY_CMDINFO:cmdInfo,
SIGNALING_EXTRA_KEY_MESSAGE:message}} mutableCopy];
return signalingDictionary;
}
+ (NSDictionary *)getDataDictionary: (NSDictionary *)signaling {
NSDictionary *dataDictionary = signaling[SIGNALING_EXTRA_KEY_DATA];
return dataDictionary;
}
+ (CallType)convertCmdToCallType:(NSString *)cmd {
if ([cmd isEqualToString:SIGNALING_CMD_AUDIOCALL]) {
return CallType_Audio;
} else if ([cmd isEqualToString:SIGNALING_CMD_VIDEOCALL]) {
return CallType_Video;
}
return CallType_Unknown;
}
+ (NSDictionary *)convertOldSignalingToNewSignaling:(NSDictionary *)oldSignalingDictionary {
NSMutableDictionary *signalingDictionary = [NSMutableDictionary dictionaryWithDictionary:oldSignalingDictionary];
NSMutableDictionary *dataDictionary = [NSMutableDictionary dictionary];
if ([oldSignalingDictionary.allKeys containsObject:SIGNALING_EXTRA_KEY_SWITCH_AUDIO_CALL]) {
[dataDictionary setValue:SIGNALING_CMD_SWITCHTOVOICECALL forKey:SIGNALING_EXTRA_KEY_CMD];
}
else if ([oldSignalingDictionary.allKeys containsObject:SIGNALING_EXTRA_KEY_CALL_END]) {
[dataDictionary setValue:SIGNALING_CMD_HANGUP forKey:SIGNALING_EXTRA_KEY_CMD];
}
else if ([oldSignalingDictionary.allKeys containsObject:SIGNALING_EXTRA_KEY_CALL_TYPE]) {
CallType callType = [signalingDictionary[SIGNALING_EXTRA_KEY_CALL_TYPE] integerValue];
switch (callType) {
case CallType_Video:
[dataDictionary setValue:SIGNALING_CMD_VIDEOCALL forKey:SIGNALING_EXTRA_KEY_CMD];
break;
case CallType_Audio:
[dataDictionary setValue:SIGNALING_CMD_AUDIOCALL forKey:SIGNALING_EXTRA_KEY_CMD];
break;
default:
break;
}
}
if ([oldSignalingDictionary.allKeys containsObject:SIGNALING_EXTRA_KEY_BUSINESSID]) {
[signalingDictionary setValue:oldSignalingDictionary[SIGNALING_EXTRA_KEY_BUSINESSID] forKey:SIGNALING_EXTRA_KEY_BUSINESSID];
} else {
NSString *cmd = dataDictionary[SIGNALING_EXTRA_KEY_CMD];
if ([cmd isEqualToString:SIGNALING_CMD_SWITCHTOVOICECALL] ||
[cmd isEqualToString:SIGNALING_CMD_HANGUP] ||
[cmd isEqualToString:SIGNALING_CMD_VIDEOCALL] ||
[cmd isEqualToString:SIGNALING_CMD_AUDIOCALL]) {
[signalingDictionary setValue:SIGNALING_BUSINESSID forKey:SIGNALING_EXTRA_KEY_BUSINESSID];
}
}
if ([oldSignalingDictionary.allKeys containsObject:SIGNALING_EXTRA_KEY_LINE_BUSY]) {
[dataDictionary setValue:SIGNALING_MESSAGE_LINEBUSY forKey:SIGNALING_EXTRA_KEY_MESSAGE];
}
if ([oldSignalingDictionary.allKeys containsObject:SIGNALING_EXTRA_KEY_ROOM_ID]) {
[dataDictionary setValue:@([signalingDictionary[SIGNALING_EXTRA_KEY_ROOM_ID] integerValue]) forKey:SIGNALING_EXTRA_KEY_ROOMID];
}
[signalingDictionary setValue:dataDictionary forKey:SIGNALING_EXTRA_KEY_DATA];
NSLog(@"%@",signalingDictionary);
return signalingDictionary;
}
@end