|
@@ -32,28 +32,28 @@
|
|
|
[self clearAgora];
|
|
|
}
|
|
|
|
|
|
-- (void)requestVideo:(NSString*)sid ticket:(NSString*)ticket dial:(NSInteger)dial callback:(void(^)(BOOL isOK, NSString* token))callback {
|
|
|
+- (void)requestVideo:(NSString*)uid ticket:(NSString*)ticket dial:(NSInteger)dial callback:(void(^)(BOOL isOK, NSString* token))callback {
|
|
|
HDNormalLog(([NSString stringWithFormat:@"VideoManager: requestVideo ticket:%@ dial:%ld", ticket, dial]));
|
|
|
if (dial > 0) {
|
|
|
DeviceModel* model = [[DataManager shared] getDeviceWithTicket:ticket];
|
|
|
if (model.videoType == VIDEO_TYPE_AGORA) {
|
|
|
- [self requestAgoraToken:sid ticket:ticket callback:^(BOOL isOK, NSString *token) {
|
|
|
- [self requestVideoEx:sid ticket:ticket token:token dial:dial callback:^(BOOL isOK) {
|
|
|
+ [self requestAgoraToken:uid ticket:ticket callback:^(BOOL isOK, NSString *token) {
|
|
|
+ [self requestVideoEx:uid ticket:ticket token:token dial:dial callback:^(BOOL isOK) {
|
|
|
callback(isOK, token);
|
|
|
}];
|
|
|
}];
|
|
|
}
|
|
|
} else {
|
|
|
- [self requestVideoEx:sid ticket:ticket token:@"" dial:dial callback:^(BOOL isOK) {
|
|
|
+ [self requestVideoEx:uid ticket:ticket token:@"" dial:dial callback:^(BOOL isOK) {
|
|
|
callback(isOK, @"");
|
|
|
}];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-- (void)requestAgoraToken:(NSString*)sid ticket:(NSString*)ticket callback:(void(^)(BOOL isOK, NSString* token))callback {
|
|
|
+- (void)requestAgoraToken:(NSString*)uid ticket:(NSString*)ticket callback:(void(^)(BOOL isOK, NSString* token))callback {
|
|
|
HDNormalLog(([NSString stringWithFormat:@"VideoManager: requestAgoraToken ticket:%@", ticket]));
|
|
|
NSDictionary *param = @{
|
|
|
- @"channelName":[self getChannelName:sid ticket:ticket],
|
|
|
+ @"channelName":[self getChannelName:uid ticket:ticket],
|
|
|
};
|
|
|
[ERequest httpRequest:param httpURL:URL_VIDEO_TOKEN httpMethod:@"GET" onSuccess:^(NSDictionary *result) {
|
|
|
if ([ERequest isSuccessWithResult:result]) {
|
|
@@ -68,10 +68,10 @@
|
|
|
}];
|
|
|
}
|
|
|
|
|
|
-- (void)requestVideoEx:(NSString*)sid ticket:(NSString*)ticket token:(NSString*)token dial:(NSInteger)dial callback:(void(^)(BOOL isOK))callback {
|
|
|
+- (void)requestVideoEx:(NSString*)uid ticket:(NSString*)ticket token:(NSString*)token dial:(NSInteger)dial callback:(void(^)(BOOL isOK))callback {
|
|
|
HDNormalLog(([NSString stringWithFormat:@"VideoManager: requestVideoEx ticket:%@ dial:%ld token:%@", ticket, dial, token]));
|
|
|
NSDictionary *param = @{
|
|
|
- @"sid":sid,
|
|
|
+ @"sid":uid,
|
|
|
@"roomId":ticket,
|
|
|
@"token":token,
|
|
|
@"dial":@(dial), //是否是拨号 -1 挂断 1 拨号
|
|
@@ -93,67 +93,87 @@
|
|
|
#pragma mark -
|
|
|
- (void)actionFromSocket:(SocketModel*)model dial:(NSInteger)dial {
|
|
|
if (dial <= 0) {
|
|
|
- NSString* talkId = [self getJuphoonName];
|
|
|
- ChildModel* childModel = [[DataManager shared] getChildWithTicket:talkId];
|
|
|
+ ChildModel* childModel = [[DataManager shared] getChildWithTicket:self.mTicket];
|
|
|
BOOL isEquel = [model.sendId isEqualToString:childModel.cid];
|
|
|
if (isEquel) {
|
|
|
[EasyTextView showInfoText:NSLocalizedString(@"Video.Error.Hangup", nil)];
|
|
|
- [self autoTerm];
|
|
|
+ [self term];
|
|
|
}
|
|
|
} else {
|
|
|
- [self loginJuphoon];
|
|
|
+ self.uid = [DataManager shared].loginModel.uid;
|
|
|
+ self.mTicket = [[DataManager shared] getDevice:model.sendId].ticket;
|
|
|
+ self.mToken = ((SocketContentModel*)model.content).token;
|
|
|
+ self.mChannelName = ((SocketContentModel*)model.content).channelName;
|
|
|
+ [self videoReceiveStart];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-- (void)videoStart:(NSString*)sid ticket:(NSString*)ticket {
|
|
|
+- (void)videoCallStart:(NSString*)uid ticket:(NSString*)ticket {
|
|
|
+ @weakify(self);
|
|
|
BOOL isReachable = [[AFNetworkReachabilityManager sharedManager] isReachable];
|
|
|
if (!isReachable) {
|
|
|
[EasyTextView showErrorText:NSLocalizedString(@"Network.Error", nil)];
|
|
|
return;
|
|
|
}
|
|
|
- HDNormalLog(([NSString stringWithFormat:@"VideoManager: videoStart: sid:%@ ticket:%@", sid, ticket]));
|
|
|
+ HDNormalLog(([NSString stringWithFormat:@"VideoManager: videoCallStart: uid:%@ ticket:%@", uid, ticket]));
|
|
|
DeviceModel* model = [[DataManager shared]getDeviceWithTicket:ticket];
|
|
|
+ if (!model)
|
|
|
+ return;
|
|
|
+ self.uid = uid;
|
|
|
+ self.mTicket = ticket;
|
|
|
+
|
|
|
if (model.videoType == VIDEO_TYPE_JUPHOON) {
|
|
|
- BOOL isok = [self call:sid ticket:ticket];
|
|
|
+ BOOL isok = [self call:uid ticket:ticket];
|
|
|
if (!isok) {
|
|
|
//如果失败,很有可能登录失败,重新登录//
|
|
|
[self loginJuphoon];
|
|
|
[EasyTextView showErrorText:[NSString stringWithFormat:NSLocalizedString(@"Video.Error.User.Login", nil)]];
|
|
|
} else {
|
|
|
- [self requestVideo:sid ticket:ticket dial:1 callback:^(BOOL isOK, NSString *token) {
|
|
|
+ [self requestVideo:uid ticket:ticket dial:1 callback:^(BOOL isOK, NSString *token) {
|
|
|
}];
|
|
|
[self startTimeoutTimer];
|
|
|
}
|
|
|
} else if (model.videoType == VIDEO_TYPE_AGORA) {
|
|
|
- [self requestVideo:sid ticket:ticket dial:1 callback:^(BOOL isOK, NSString *token) {
|
|
|
+ [self requestVideo:uid ticket:ticket dial:1 callback:^(BOOL isOK, NSString *token) {
|
|
|
if (isOK && token.length > 0) {
|
|
|
- [self joinChannel:token channelId:[self getChannelName:sid ticket:ticket] uid:0];
|
|
|
+ [weak_self joinChannel:token channelId:[self getChannelName:uid ticket:ticket] uid:0];
|
|
|
+ [weak_self startTimeoutTimer];
|
|
|
}
|
|
|
}];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+- (void)videoReceiveStart {
|
|
|
+ DeviceModel* model = [[DataManager shared]getDeviceWithTicket:self.mTicket];
|
|
|
+ if (model.videoType == VIDEO_TYPE_JUPHOON) {
|
|
|
+ [self loginJuphoon];
|
|
|
+ } else if (model.videoType == VIDEO_TYPE_AGORA) {
|
|
|
+ [self joinChannel:self.mToken channelId:self.mChannelName uid:0];
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
- (void)videoEnd:(BOOL)isIncomming isSendMessage:(BOOL)isSendMessage {
|
|
|
HDNormalLog(([NSString stringWithFormat:@"VideoManager: videoEnd:%d", isIncomming]));
|
|
|
//发消息
|
|
|
if (isSendMessage) {
|
|
|
- JCCallItem *activeCall = [self getActiveCall];
|
|
|
- if(activeCall.state == JCCallStateInit || activeCall.state == JCCallStatePending) {
|
|
|
- NSString* ticket = [self getJuphoonName];
|
|
|
- NSString* sid = [self getJuphoonSID];
|
|
|
- [self requestVideo:sid ticket:ticket dial:-1 callback:^(BOOL isOK, NSString *token) {
|
|
|
- }];
|
|
|
- }
|
|
|
+ [self requestVideo:self.uid ticket:self.mTicket dial:-1 callback:^(BOOL isOK, NSString *token) {
|
|
|
+ }];
|
|
|
}
|
|
|
- [self autoTerm];
|
|
|
+ [self term];
|
|
|
}
|
|
|
|
|
|
-- (void)joinRoom {
|
|
|
-
|
|
|
+- (void)termWithTimeout {
|
|
|
+ [EasyTextView showErrorText:NSLocalizedString(@"Video.Error.Timeout", nil)];
|
|
|
+ [self videoEnd:YES isSendMessage:YES];
|
|
|
}
|
|
|
|
|
|
-- (void)leaveRoom {
|
|
|
-
|
|
|
+- (void)term {
|
|
|
+ DeviceModel* model = [[DataManager shared] getDeviceWithTicket:self.mTicket];
|
|
|
+ if (model.videoType == VIDEO_TYPE_JUPHOON) {
|
|
|
+ [self termJuphoon];
|
|
|
+ } else if (model.videoType == VIDEO_TYPE_AGORA) {
|
|
|
+ [self termAgora];
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- (void)showInCallVC {
|
|
@@ -173,20 +193,15 @@
|
|
|
self.mInCallVC = nil;
|
|
|
}
|
|
|
|
|
|
-- (void)autoTermWithTimeout {
|
|
|
- NSString* sid = [self getJuphoonSID];
|
|
|
- NSString* ticket = [self getJuphoonName];
|
|
|
- if (!ticket || ticket.length <= 0)
|
|
|
- return;
|
|
|
- [EasyTextView showErrorText:NSLocalizedString(@"Video.Error.Timeout", nil)];
|
|
|
- [self requestVideo:sid ticket:ticket dial:-1 callback:^(BOOL isOK, NSString *token) {
|
|
|
- }];
|
|
|
- [self autoTerm];
|
|
|
-}
|
|
|
-
|
|
|
- (BOOL)isVideoTalking {
|
|
|
- JCCallItem *activeCall = [[VideoManager shared] getActiveCall];
|
|
|
- return activeCall.video || activeCall.state == JCCallStateTalking;
|
|
|
+ DeviceModel* model = [[DataManager shared] getDeviceWithTicket:self.mTicket];
|
|
|
+ if (model.videoType == VIDEO_TYPE_JUPHOON) {
|
|
|
+ JCCallItem *activeCall = [[VideoManager shared] getActiveCall];
|
|
|
+ return activeCall.video || activeCall.state == JCCallStateTalking;
|
|
|
+ } else if (model.videoType == VIDEO_TYPE_AGORA) {
|
|
|
+ return self.uid.length > 0 && self.mChannelName.length > 0;
|
|
|
+ }
|
|
|
+ return NO;
|
|
|
}
|
|
|
|
|
|
- (JCCallItem*)getActiveCall {
|
|
@@ -198,32 +213,14 @@
|
|
|
return nil;
|
|
|
}
|
|
|
|
|
|
-- (NSString*)getJuphoonSID {
|
|
|
- JCCallItem *activeCall = [self getActiveCall];
|
|
|
- if (activeCall.direction == JCCallDirectionOut) {
|
|
|
- return self.mSID;
|
|
|
- } else {
|
|
|
- return activeCall.userId;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-- (NSString*)getJuphoonName {
|
|
|
- JCCallItem *activeCall = [self getActiveCall];
|
|
|
- if (activeCall.direction == JCCallDirectionOut) {
|
|
|
- return self.mTicket;
|
|
|
- } else {
|
|
|
- return activeCall.userId;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
- (NSString*)getTalkName {
|
|
|
- NSString* talkId = [self getJuphoonName];
|
|
|
+ NSString* talkId = self.mTicket;
|
|
|
ChildModel* model = [[DataManager shared] getChildWithTicket:talkId];
|
|
|
return model ? model.name : @"";
|
|
|
}
|
|
|
|
|
|
- (NSString*)getTalkHeadImageURL {
|
|
|
- NSString* talkId = [self getJuphoonName];
|
|
|
+ NSString* talkId = self.mTicket;
|
|
|
ChildModel* model = [[DataManager shared] getChildWithTicket:talkId];
|
|
|
return model ? model.avatar : @"";
|
|
|
}
|