|
@@ -1,684 +0,0 @@
|
|
|
-//
|
|
|
-// ClassroomService.m
|
|
|
-// SealClass
|
|
|
-//
|
|
|
-// Created by LiFei on 2019/2/27.
|
|
|
-// Copyright © 2019 RongCloud. All rights reserved.
|
|
|
-//
|
|
|
-
|
|
|
-#import "ClassroomService.h"
|
|
|
-#import "MemberChangeMessage.h"
|
|
|
-#import "WhiteboardMessage.h"
|
|
|
-#import "DeviceMessage.h"
|
|
|
-#import "DisplayCommandMessage.h"
|
|
|
-#import "MemberChangeMessage.h"
|
|
|
-#import "TurnPageMessage.h"
|
|
|
-#import "RoleChangedMessage.h"
|
|
|
-#import "AssistantTransferMessage.h"
|
|
|
-#import "ApplySpeechMessage.h"
|
|
|
-#import "TicketExpiredMessage.h"
|
|
|
-#import "InviteUpgradeMessage.h"
|
|
|
-#import "ControlDeviceNotifyMessage.h"
|
|
|
-#import "SongDownloadMessage.h"
|
|
|
-#import "SongDownloadCallbackMessage.h"
|
|
|
-#import "AccompanyDownloadMessage.h"
|
|
|
-#import "AccompanyDownloadCallbackMessage.h"
|
|
|
-#import "KeyChainTools.h"
|
|
|
-
|
|
|
-#import <RongIMKit/RongIMKit.h>
|
|
|
-
|
|
|
-@interface ClassroomService ()
|
|
|
-@property (nonatomic, copy) NSString *auth;
|
|
|
-@end
|
|
|
-
|
|
|
-@implementation ClassroomService
|
|
|
-
|
|
|
-+ (instancetype)sharedService {
|
|
|
- static ClassroomService *service;
|
|
|
- static dispatch_once_t onceToken;
|
|
|
- dispatch_once(&onceToken, ^{
|
|
|
- service = [[ClassroomService alloc] init];
|
|
|
- });
|
|
|
- return service;
|
|
|
-}
|
|
|
-
|
|
|
-#pragma mark - IM
|
|
|
-- (void)registerCommandMessages {
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[MemberChangeMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[WhiteboardMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[DeviceMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[DisplayCommandMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[TurnPageMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[RoleChangedMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[AssistantTransferMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[ApplySpeechMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[ApplySpeechResultMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[TicketExpiredMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[InviteUpgradeMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[ControlDeviceNotifyMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[NodePlayMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[SongDownloadMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[SongDownloadCallbackMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[AccompanyDownloadMessage class]];
|
|
|
- [[RCIM sharedRCIM] registerMessageType:[AccompanyDownloadCallbackMessage class]];
|
|
|
-}
|
|
|
-
|
|
|
-- (BOOL)isHoldMessage:(RCMessage *)message {
|
|
|
- BOOL needHold = NO;
|
|
|
- if ([message.content isKindOfClass:[MemberChangeMessage class]]) {
|
|
|
- needHold = NO;
|
|
|
- [self onReceiveCommandMessage:(MemberChangeMessage*)message.content];
|
|
|
- } else if ([message.content isKindOfClass:[WhiteboardMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveWhiteboardMessage:(WhiteboardMessage*)message.content];
|
|
|
- } else if ([message.content isKindOfClass:[DeviceMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveDeviceMessage:(DeviceMessage*)message.content withSenderId:message.senderUserId];
|
|
|
- } else if([message.content isKindOfClass:[DisplayCommandMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveDisplayCommandMessage:(DisplayCommandMessage*)message.content];
|
|
|
- } else if([message.content isKindOfClass:[ApplySpeechMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveApplySpeechMessage:(ApplySpeechMessage*)message.content];
|
|
|
- } else if([message.content isKindOfClass:[TurnPageMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveTurnPageMessage:(TurnPageMessage*)message.content];
|
|
|
- } else if([message.content isKindOfClass:[RoleChangedMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveRoleChangedMessage:(RoleChangedMessage*)message.content];
|
|
|
- } else if([message.content isKindOfClass:[AssistantTransferMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveAssistantTransferMessage:(AssistantTransferMessage*)message.content];
|
|
|
- } else if([message.content isKindOfClass:[ApplySpeechResultMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveSpeechResultMessage:(ApplySpeechResultMessage*)message.content];
|
|
|
- } else if ([message.content isKindOfClass:[TicketExpiredMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveTicketExpiredMessage:(TicketExpiredMessage *)message.content];
|
|
|
- } else if ([message.content isKindOfClass:[InviteUpgradeMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveInviteUpgradeMessage:(InviteUpgradeMessage *)message.content];
|
|
|
- } else if ([message.content isKindOfClass:[ControlDeviceNotifyMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveControlDeviceNotifyMessage:(ControlDeviceNotifyMessage *)message.content];
|
|
|
- }
|
|
|
- else if ([message.content isKindOfClass:[NodePlayMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveNodePlayMessage:(NodePlayMessage *)message.content];
|
|
|
- }
|
|
|
- else if ([message.content isKindOfClass:[SongDownloadMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- }
|
|
|
- else if ([message.content isKindOfClass:[SongDownloadCallbackMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- }
|
|
|
- else if ([message.content isKindOfClass:[AccompanyDownloadMessage class]]) { // 下载伴奏消息
|
|
|
- needHold = YES;
|
|
|
- [self onReceiveDownloadAccompanyMessage:(AccompanyDownloadMessage *)message.content];
|
|
|
- }
|
|
|
- else if ([message.content isKindOfClass:[AccompanyDownloadCallbackMessage class]]) {
|
|
|
- needHold = YES;
|
|
|
- }
|
|
|
- return needHold;
|
|
|
-}
|
|
|
-
|
|
|
-#pragma mark - HTTP
|
|
|
-- (void)joinClassroom:(NSString *)roomId
|
|
|
- userName:(NSString *)userName
|
|
|
-isAudience:(BOOL)audience
|
|
|
- success:(void (^)(Classroom *classroom))successBlock
|
|
|
- error:(void (^)(ErrorCode errorCode, NSString *message))errorBlock {
|
|
|
- if (roomId.length == 0 || userName.length == 0) {
|
|
|
- [self callbackFailureDescription:ErrorCodeParameterError];
|
|
|
- return;
|
|
|
- }
|
|
|
- [KSNetworkingManager roomJoinRequest:KS_POST roomId:roomId success:^(NSDictionary * _Nonnull dic) {
|
|
|
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
|
|
|
- Classroom *room = [Classroom classroomFromJson:[dic ks_dictionaryValueForKey:@"data"]];
|
|
|
- self.currentRoom = room;
|
|
|
- if (successBlock) {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- successBlock(room);
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- errorBlock([dic ks_integerValueForKey:@"code"], MESSAGEKEY);
|
|
|
- }
|
|
|
- } faliure:^(NSError * _Nonnull error) {
|
|
|
- if (errorBlock) {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- errorBlock(error.code, @"加入房间失败");
|
|
|
- })
|
|
|
- }
|
|
|
- }];
|
|
|
-}
|
|
|
-
|
|
|
-- (void)joinRoomFailerNotify {
|
|
|
- if (![self checkWhetherInRoom]) {
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(roomDidLeave)]) {
|
|
|
- [self.classroomDelegate roomDidLeave];
|
|
|
- }
|
|
|
- return;
|
|
|
- }
|
|
|
- [KSNetworkingManager joinRoomFailureRequest:KS_POST roomId:self.currentRoom.roomId success:^(NSDictionary * _Nonnull dic) {
|
|
|
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
|
|
|
- NSLog(@"------ 通知成功");
|
|
|
- }
|
|
|
- else {
|
|
|
- NSLog(@"------ 通知失败");
|
|
|
- }
|
|
|
- } faliure:^(NSError * _Nonnull error) {
|
|
|
- NSLog(@"------ 通知失败");
|
|
|
- }];
|
|
|
-}
|
|
|
-
|
|
|
-- (void)leaveClassroom {
|
|
|
- if (![self checkWhetherInRoom]) {
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(roomDidLeave)]) {
|
|
|
- [self.classroomDelegate roomDidLeave];
|
|
|
- }
|
|
|
- return;
|
|
|
- }
|
|
|
- NSLog(@"leave classroom start");
|
|
|
-
|
|
|
- [KSNetworkingManager roomLeaveRequest:KS_POST roomId:self.currentRoom.roomId success:^(NSDictionary * _Nonnull dic) {
|
|
|
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(roomDidLeave)]) {
|
|
|
- [self.classroomDelegate roomDidLeave];
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- else {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(roomDidLeave)]) {
|
|
|
- [self.classroomDelegate roomDidLeave];
|
|
|
- }
|
|
|
- });
|
|
|
- NSLog(@"退出失败:%@",MESSAGEKEY);
|
|
|
- }
|
|
|
- } faliure:^(NSError * _Nonnull error) {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(roomDidLeave)]) {
|
|
|
- [self.classroomDelegate roomDidLeave];
|
|
|
- }
|
|
|
- });
|
|
|
- NSLog(@"退出失败");
|
|
|
- }];
|
|
|
-}
|
|
|
-
|
|
|
-- (void)queryNoJoinRoomList:(void (^)(NSArray<RoomMember *> * _Nullable))completeBlock {
|
|
|
- if (![self checkWhetherInRoom]) {
|
|
|
- [self callbackFailureDescription:ErrorCodeUserNotExistInRoom];
|
|
|
- if (completeBlock) {
|
|
|
- completeBlock(nil);
|
|
|
- }
|
|
|
- return;
|
|
|
- }
|
|
|
- [KSNetworkingManager queryNoJoinStuRequest:KS_POST roomId:self.currentRoom.roomId success:^(NSDictionary * _Nonnull dic) {
|
|
|
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
|
|
|
- NSMutableArray *memberList = [[NSMutableArray alloc] init];
|
|
|
- NSArray *arr = [dic ks_arrayValueForKey:@"data"];
|
|
|
- for (NSDictionary *boardDic in arr) {
|
|
|
- RoomMember *member = [RoomMember memberFromJson:boardDic];
|
|
|
- [memberList addObject:member];
|
|
|
- }
|
|
|
- if (completeBlock) {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- completeBlock(memberList);
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (completeBlock) {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- completeBlock(nil);
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- } faliure:^(NSError * _Nonnull error) {
|
|
|
- if (completeBlock) {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- completeBlock(nil);
|
|
|
- });
|
|
|
- }
|
|
|
- }];
|
|
|
-}
|
|
|
-
|
|
|
-- (void)enableDevice:(BOOL)enable
|
|
|
- type:(DeviceType)type
|
|
|
- songId:(NSInteger)songId
|
|
|
- soundVolume:(NSInteger)soundVolume
|
|
|
- forUser:(NSString *)userId {
|
|
|
- if (![self checkWhetherInRoom]) {
|
|
|
- [self callbackFailureDescription:ErrorCodeUserNotExistInRoom];
|
|
|
- return;
|
|
|
- }
|
|
|
- if (userId.length == 0) {
|
|
|
- [self callbackFailureDescription:ErrorCodeParameterError];
|
|
|
- return;
|
|
|
- }
|
|
|
- NSString *deviceType = [self getDeviceTypeDesc:type];
|
|
|
- [KSNetworkingManager deviceControl:KS_POST deviceType:deviceType enable:enable roomId:self.currentRoom.roomId musicScoreAccompanimentId:[NSString stringWithFormat:@"%zd",songId] soundVolume:soundVolume userId:userId success:^(NSDictionary * _Nonnull dic) {
|
|
|
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
|
|
|
-
|
|
|
- } else {
|
|
|
- [self callbackFailureDescription:ErrorCodeOther];
|
|
|
- }
|
|
|
- } faliure:^(NSError * _Nonnull error) {
|
|
|
- [self callbackFailureDescription:ErrorCodeOther];
|
|
|
- }];
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-// 操作全员设备
|
|
|
-- (void)enableMutilMemberDevice:(BOOL)enable
|
|
|
- type:(DeviceType)type
|
|
|
- songId:(NSInteger)songId
|
|
|
- soundVolume:(NSInteger)soundVolume
|
|
|
- forUser:(NSString *)userId {
|
|
|
-
|
|
|
- if (![self checkWhetherInRoom]) {
|
|
|
- [self callbackFailureDescription:ErrorCodeUserNotExistInRoom];
|
|
|
- return;
|
|
|
- }
|
|
|
- NSString *deviceType = [self getDeviceTypeDesc:type];
|
|
|
- [KSNetworkingManager deviceBatchControl:KS_POST deviceType:deviceType enable:enable roomId:self.currentRoom.roomId musicScoreAccompanimentId:[NSString stringWithFormat:@"%zd",songId] soundVolume:soundVolume userId:userId success:^(NSDictionary * _Nonnull dic) {
|
|
|
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
|
|
|
-
|
|
|
- }
|
|
|
- else {
|
|
|
- [self callbackFailureDescription:ErrorCodeOther];
|
|
|
- }
|
|
|
- } faliure:^(NSError * _Nonnull error) {
|
|
|
- [self callbackFailureDescription:ErrorCodeOther];
|
|
|
- }];
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-// 开关节拍器
|
|
|
-- (void)enablePlayMessage:(BOOL)enable content:(NSDictionary *)content userId:(NSString *)userId {
|
|
|
- if (![self checkWhetherInRoom]) {
|
|
|
- [self callbackFailureDescription:ErrorCodeUserNotExistInRoom];
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- [KSNetworkingManager sendImPlayMidiMessage:KS_POST customType:[content ks_integerValueForKey:@"customType"] enable:enable playVolume:[content ks_integerValueForKey:@"playVolume"] rate:[content ks_integerValueForKey:@"rate"] userId:[content ks_stringValueForKey:@"userId"] roomId:self.currentRoom.roomId success:^(NSDictionary * _Nonnull dic) {
|
|
|
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
|
|
|
-
|
|
|
- }
|
|
|
- else {
|
|
|
- [self callbackFailureDescription:ErrorCodeOther];
|
|
|
- }
|
|
|
- } faliure:^(NSError * _Nonnull error) {
|
|
|
- [self callbackFailureDescription:ErrorCodeOther];
|
|
|
- }];
|
|
|
-}
|
|
|
-
|
|
|
-// 通知学员下载伴奏接口
|
|
|
-- (void)pushDownloadMusicScoreMsgWithSongId:(NSString *)songId {
|
|
|
- if (![self checkWhetherInRoom]) {
|
|
|
- [self callbackFailureDescription:ErrorCodeUserNotExistInRoom];
|
|
|
- return;
|
|
|
- }
|
|
|
- [KSNetworkingManager pushDownloadMusicSheetMsg:KS_POST accompanimentId:songId roomId:self.currentRoom.roomId success:^(NSDictionary * _Nonnull dic) {
|
|
|
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
|
|
|
-
|
|
|
- }
|
|
|
- else {
|
|
|
- [self callbackFailureDescription:ErrorCodeOther];
|
|
|
- }
|
|
|
- } faliure:^(NSError * _Nonnull error) {
|
|
|
- [self callbackFailureDescription:ErrorCodeOther];
|
|
|
- }];
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-- (void)display:(DisplayType)type
|
|
|
- withInfo:(NSString *)info {
|
|
|
- SealClassLog(@"display:%ld,info:%@,currentRoom.roomId=%@",type,info,self.currentRoom.roomId);
|
|
|
- if (![self checkWhetherInRoom]) {
|
|
|
- [self callbackFailureDescription:ErrorCodeUserNotExistInRoom];
|
|
|
- return;
|
|
|
- }
|
|
|
- if (info.length == 0 || self.currentRoom.roomId.length == 0) {
|
|
|
- [self callbackFailureDescription:ErrorCodeParameterError];
|
|
|
- return;
|
|
|
- }
|
|
|
- NSString *uri = @"";
|
|
|
- NSString *userId = @"";
|
|
|
- if (type == DisplayWhiteboard) {
|
|
|
- uri = info;
|
|
|
- } else {
|
|
|
- userId = info;
|
|
|
- }
|
|
|
- NSString *displayType = [self getDisplayType:type];
|
|
|
- [KSNetworkingManager roomDisplay:KS_POST roomId:self.currentRoom.roomId type:displayType uri:uri userId:userId success:^(NSDictionary * _Nonnull dic) {
|
|
|
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
|
|
|
- self.currentRoom.currentDisplayType = type;
|
|
|
- self.currentRoom.currentDisplayURI = info;
|
|
|
- }
|
|
|
- else {
|
|
|
- [self callbackFailureDescription:ErrorCodeOther];
|
|
|
- }
|
|
|
- } faliure:^(NSError * _Nonnull error) {
|
|
|
- [self callbackFailureDescription:ErrorCodeOther];
|
|
|
- }];
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-- (void)displayWhiteboard:(NSString *)boardId {
|
|
|
- if (boardId.length == 0) {
|
|
|
- [self callbackFailureDescription:ErrorCodeParameterError];
|
|
|
- return;
|
|
|
- }
|
|
|
- [self display:DisplayWhiteboard withInfo:boardId];
|
|
|
-}
|
|
|
-
|
|
|
-- (void)displayTeacher {
|
|
|
- [self display:DisplayTeacher withInfo:self.currentRoom.teacher.userId];
|
|
|
-}
|
|
|
-
|
|
|
-- (void)displayStudent:(NSString *)userId {
|
|
|
- [self display:DisplayTypeStudent withInfo:userId];
|
|
|
-}
|
|
|
-
|
|
|
-#pragma mark 操作当前用户设备状态,仅老师/学员有权限
|
|
|
-- (void)enableDevice:(BOOL)enable
|
|
|
- songId:(NSInteger)songId
|
|
|
- withType:(DeviceType)type {
|
|
|
- if (![self checkWhetherInRoom]) {
|
|
|
- [self callbackFailureDescription:ErrorCodeUserNotExistInRoom];
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- NSString *deviceType = [self getDeviceTypeDesc:type];
|
|
|
-
|
|
|
- [KSNetworkingManager roomDeviceSync:KS_POST deviceType:deviceType roomId:self.currentRoom.roomId enable:enable songId:songId success:^(NSDictionary * _Nonnull dic) {
|
|
|
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
|
|
|
- if (type == DeviceTypeMicrophone) {
|
|
|
- [self.currentRoom updateMember:self.currentRoom.currentMember.userId forMicrophone:enable];
|
|
|
- } else if (type == DeviceTypeCamera) {
|
|
|
- [self.currentRoom updateMember:self.currentRoom.currentMember.userId forCamera:enable];
|
|
|
- }
|
|
|
- else if (type == DeviceTypeMusicMode) {
|
|
|
- [self.currentRoom updateMember:self.currentRoom.currentMember.userId forMusicMode:enable];
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- [self callbackFailureDescription:ErrorCodeOther];
|
|
|
- }
|
|
|
- } faliure:^(NSError * _Nonnull error) {
|
|
|
- [self callbackFailureDescription:ErrorCodeOther];
|
|
|
- }];
|
|
|
-}
|
|
|
-
|
|
|
-#pragma mark - Util
|
|
|
-
|
|
|
-- (NSString *)getDeviceTypeDesc:(DeviceType)type {
|
|
|
- switch (type) {
|
|
|
- case DeviceTypeCamera:
|
|
|
- return @"CAMERA";
|
|
|
- case DeviceTypeMicrophone:
|
|
|
- return @"MICROPHONE";
|
|
|
- case DeviceTypeMusicMode:
|
|
|
- return @"MUSIC_MODE";
|
|
|
- case DeviceTypeHandup:
|
|
|
- return @"HAND_UP";
|
|
|
- case DeviceTypeExamSong:
|
|
|
- return @"EXAM_SONG";
|
|
|
- case DeviceTypeMusicScore:
|
|
|
- return @"MUSIC_SHEET";
|
|
|
- case DeviceTypeAccompany:
|
|
|
- return @"ACCOMPANIMENT";
|
|
|
- default:
|
|
|
- return @"";
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-- (NSString *)getDisplayType:(DisplayType)type {
|
|
|
- switch (type) {
|
|
|
- case DisplayTeacher:
|
|
|
- return @"TEACHER";
|
|
|
- case DisplayWhiteboard:
|
|
|
- return @"WHITE_BOARD";
|
|
|
- case DisplaySharedScreen:
|
|
|
- return @"SCREEN";
|
|
|
- case DisplayNone:
|
|
|
- return @"NONE";
|
|
|
- case DisplayTypeStudent:
|
|
|
- return @"STUDENT";
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-#pragma mark - Helper
|
|
|
-- (BOOL)checkWhetherInRoom {
|
|
|
- return self.currentRoom.roomId.length > 0;
|
|
|
-}
|
|
|
-
|
|
|
-- (void)callbackFailureDescription:(ErrorCode)code {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(errorDidOccur:)]) {
|
|
|
- [self.classroomDelegate errorDidOccur:code];
|
|
|
- }
|
|
|
- });
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveCommandMessage:(MemberChangeMessage *)msg {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- if(msg.action == MemberChangeActionJoin) {
|
|
|
- if([self.classroomDelegate respondsToSelector:@selector(memberDidJoin:)]) {
|
|
|
- RoomMember *mem = [[RoomMember alloc] init];
|
|
|
- mem.userId = msg.userId;
|
|
|
- mem.name = msg.userName;
|
|
|
- mem.role = (Role)msg.role;
|
|
|
- mem.joinTime = msg.timestamp;
|
|
|
- mem.cameraEnable = msg.camera;
|
|
|
- mem.microphoneEnable = msg.microphone;
|
|
|
- mem.handUpOn = msg.handUpOn;
|
|
|
- mem.enable = msg.metronomeSwitch;
|
|
|
- mem.headUrl = msg.avatar;
|
|
|
- if ([self.currentRoom addMemeber:mem]) {
|
|
|
- [self.classroomDelegate memberDidJoin:mem];
|
|
|
- }
|
|
|
- }
|
|
|
- }else if(msg.action == MemberChangeActionLeave){
|
|
|
- if([self.classroomDelegate respondsToSelector:@selector(memberDidLeave:)]) {
|
|
|
- RoomMember *mem = [[RoomMember alloc] init];
|
|
|
- mem.userId = msg.userId;
|
|
|
- mem.name = msg.userName;
|
|
|
- mem.role = (Role)msg.role;
|
|
|
- mem.joinTime = msg.timestamp;
|
|
|
- if([self.currentRoom removeMemeber:mem]) {
|
|
|
- [self.classroomDelegate memberDidLeave:mem];
|
|
|
- }
|
|
|
- }
|
|
|
- }else if(msg.action == MemberChangeActionKick) {
|
|
|
- if ([msg.userId isEqualToString:self.currentRoom.currentMember.userId]) {
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(roomDidLeave)]) {
|
|
|
- [self.classroomDelegate roomDidLeave];
|
|
|
- }
|
|
|
- } else {
|
|
|
- RoomMember *mem = [self.currentRoom getMember:msg.userId];
|
|
|
- [self.currentRoom removeMemeber:mem];
|
|
|
- if([self.classroomDelegate respondsToSelector:@selector(memberDidKick:)]) {
|
|
|
- [self.classroomDelegate memberDidKick:mem];
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveWhiteboardMessage:(WhiteboardMessage *)msg{
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveDeviceMessage:(DeviceMessage *)msg withSenderId:(NSString *)senderId{
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- if (msg.type == DeviceTypeCamera) {
|
|
|
- [self.currentRoom updateMember:msg.userId forCamera:msg.enable];
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(deviceDidEnable:type:forUser:operator:)]) {
|
|
|
- [self.classroomDelegate deviceDidEnable:msg.enable type:DeviceTypeCamera forUser:[self.currentRoom getMember:msg.userId] operator:senderId];
|
|
|
- }
|
|
|
- } else if (msg.type == DeviceTypeMicrophone) {
|
|
|
- [self.currentRoom updateMember:msg.userId forMicrophone:msg.enable];
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(deviceDidEnable:type:forUser:operator:)]) {
|
|
|
- [self.classroomDelegate deviceDidEnable:msg.enable type:DeviceTypeMicrophone forUser:[self.currentRoom getMember:msg.userId] operator:senderId];
|
|
|
- }
|
|
|
- }
|
|
|
- else if (msg.type == DeviceTypeMusicMode) {
|
|
|
- [self.currentRoom updateMember:msg.userId forMusicMode:msg.enable];
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(deviceDidEnable:type:forUser:operator:)]) {
|
|
|
- [self.classroomDelegate deviceDidEnable:msg.enable type:DeviceTypeMusicMode forUser:[self.currentRoom getMember:msg.userId] operator:senderId];
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- else if (msg.type == DeviceTypeHandup) {
|
|
|
- [self.currentRoom updateMember:msg.userId forHandsUp:msg.enable];
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(deviceDidEnable:type:forUser:operator:)]) {
|
|
|
- [self.classroomDelegate deviceDidEnable:msg.enable type:DeviceTypeHandup forUser:[self.currentRoom getMember:msg.userId] operator:senderId];
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- else if (msg.type == DeviceTypeExamSong) {
|
|
|
- [self.currentRoom updateMember:msg.userId forExamSong:msg.enable];
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(deviceDidEnable:type:forUser:operator:)]) {
|
|
|
- [self.classroomDelegate deviceDidEnable:msg.enable type:DeviceTypeExamSong forUser:[self.currentRoom getMember:msg.userId] operator:senderId];
|
|
|
- }
|
|
|
- }
|
|
|
- else if (msg.type == DeviceTypeAccompany) { // 伴奏
|
|
|
- [self.currentRoom updateMember:msg.userId forAccompany:msg.enable];
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(deviceDidEnable:type:forUser:operator:)]) {
|
|
|
- [self.classroomDelegate deviceDidEnable:msg.enable type:DeviceTypeAccompany forUser:[self.currentRoom getMember:msg.userId] operator:senderId];
|
|
|
- }
|
|
|
- }
|
|
|
- else if (msg.type == DeviceTypeMusicScore) { // 原声
|
|
|
- [self.currentRoom updateMember:msg.userId forMusicScore:msg.enable];
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(deviceDidEnable:type:forUser:operator:)]) {
|
|
|
- [self.classroomDelegate deviceDidEnable:msg.enable type:DeviceTypeMusicScore forUser:[self.currentRoom getMember:msg.userId] operator:senderId];
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveDisplayCommandMessage:(DisplayCommandMessage *)msg{
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- [self.currentRoom updateDisplayUri:msg.display];
|
|
|
- DisplayType type = self.currentRoom.currentDisplayType;
|
|
|
- if (type == DisplayTeacher) {
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(teacherDidDisplay)]) {
|
|
|
- [self.classroomDelegate teacherDidDisplay];
|
|
|
- }
|
|
|
- } else if (type == DisplayWhiteboard) {
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(whiteboardDidDisplay:)]) {
|
|
|
- [self.classroomDelegate whiteboardDidDisplay:self.currentRoom.currentDisplayURI];
|
|
|
- }
|
|
|
- } else if (type == DisplaySharedScreen) {
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(sharedScreenDidDisplay:)]) {
|
|
|
- [self.classroomDelegate sharedScreenDidDisplay:self.currentRoom.currentDisplayURI];
|
|
|
- }
|
|
|
- } else if (type == DisplayNone) {
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(noneDidDisplay)]) {
|
|
|
- [self.classroomDelegate noneDidDisplay];
|
|
|
- }
|
|
|
- }
|
|
|
- else if (type == DisplayTypeStudent) {
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(studentDidDisplay:)]) {
|
|
|
- [self.classroomDelegate studentDidDisplay:self.currentRoom.currentDisplayURI];
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveApplySpeechMessage:(ApplySpeechMessage *)msg {
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveSpeechResultMessage:(ApplySpeechResultMessage *)msg {
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveTurnPageMessage:(TurnPageMessage *)msg {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
-
|
|
|
- });
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveRoleChangedMessage:(RoleChangedMessage *)msg {
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveAssistantTransferMessage:(AssistantTransferMessage *)msg {
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveTicketExpiredMessage:(TicketExpiredMessage *)msg {
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveInviteUpgradeMessage:(InviteUpgradeMessage *)msg {
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveControlDeviceNotifyMessage:(ControlDeviceNotifyMessage *)msg {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- if (msg.action == ControlDeviceActionInvite) {
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(deviceDidInviteEnable:ticket:)]) {
|
|
|
- [self.classroomDelegate deviceDidInviteEnable:msg.type ticket:msg.ticket];
|
|
|
- }
|
|
|
- } else if (msg.action == ControlDeviceActionApprove) {
|
|
|
- if (self.currentRoom.currentMember.role == RoleTeacher) {
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(deviceInviteEnableDidApprove:type:)]) {
|
|
|
- RoomMember *mem = [self.currentRoom getMember:msg.opUserId];
|
|
|
- [self.classroomDelegate deviceInviteEnableDidApprove:mem type:msg.type];
|
|
|
- }
|
|
|
- }
|
|
|
- } else if (msg.action == ControlDeviceActionReject) {
|
|
|
- if (self.currentRoom.currentMember.role == RoleTeacher) {
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(deviceInviteEnableDidReject:type:)]) {
|
|
|
- RoomMember *mem = [self.currentRoom getMember:msg.opUserId];
|
|
|
- [self.classroomDelegate deviceInviteEnableDidReject:mem type:msg.type];
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveNodePlayMessage:(NodePlayMessage *)msg {
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(playNodeAction:userId:rate:beatType:)]) {
|
|
|
- [self.classroomDelegate playNodeAction:msg.enable userId:msg.userId rate:msg.rate beatType:msg.customType];
|
|
|
- }
|
|
|
- });
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveDownloadAccompanyMessage:(AccompanyDownloadMessage *)msg {
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-- (void)onReceiveDownloadAccompanyCallbackMessage:(AccompanyDownloadCallbackMessage *)msg {
|
|
|
- NSString *studentId = [NSString stringWithFormat:@"%d", msg.studentId];
|
|
|
- // 下载成功回调
|
|
|
- dispatch_main_async_safe(^{
|
|
|
- if (self.currentRoom.currentMember.role == RoleTeacher) {
|
|
|
- if ([self.classroomDelegate respondsToSelector:@selector(songDownloadCallback:member:userId:)]) {
|
|
|
- RoomMember *mem = [self.currentRoom getMember:studentId];
|
|
|
- for (ClassSongMessage *memSongModel in mem.songMessage) {
|
|
|
-
|
|
|
- for (ClassSongMessage *songModel in msg.songMessage) {
|
|
|
- if (memSongModel.musicScoreAccompanimentId == songModel.musicScoreAccompanimentId) {
|
|
|
- memSongModel.downStatus = songModel.downStatus;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- [self.currentRoom updateMemeber:mem];
|
|
|
- [self.classroomDelegate songDownloadCallback:msg.songMessage member:mem userId:studentId];
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
-}
|
|
|
-
|
|
|
-@end
|