123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- //
- // Classroom.m
- // SealClass
- //
- // Created by LiFei on 2019/2/28.
- // Copyright © 2019 RongCloud. All rights reserved.
- //
- #import "Classroom.h"
- #import "RTCService.h"
- @interface Classroom ()
- @property (nonatomic, copy) NSString *currentMemberId;
- @property (nonatomic, assign) long long joinTime;
- @property (nonatomic, assign) NSInteger surplusTime;
- @end
- @implementation Classroom
- + (instancetype)classroomFromJson:(NSDictionary *)dic {
- Classroom *room = [[Classroom alloc] init];
- room.roomId = dic[@"roomId"];
- room.imToken = dic[@"imToken"];
- room.surplusTime = [dic[@"surplusTime"] integerValue];
- NSString *display = dic[@"display"];
-
- [room updateDisplayUri:display];
- NSArray *memberArray = dic[@"roomMemberList"];
- NSMutableArray *memberList = [[NSMutableArray alloc] init];
- for (NSDictionary *memberDic in memberArray) {
- NSMutableDictionary *memDic = [NSMutableDictionary dictionaryWithDictionary:memberDic];
- [memberDic setValue:[dic dictionaryValueForKey:@"midiJson"] forKey:@"playMidiJson"];
- RoomMember *member = [RoomMember memberFromJson:memDic];
- [memberList addObject:member];
- }
- room.memberList = memberList;
- NSDictionary *userDic = [dic dictionaryValueForKey:@"roomMember"];
- RoomMember *currentMember = [RoomMember memberFromJson:userDic];
- room.currentMemberId = currentMember.userId;
- room.joinTime = currentMember.joinTime;
- // room.autoCloseFlag = [dic[@"autoCloseFlag"] boolValue];
- room.autoCloseFlag = YES;
- room.autoCloseNetworkRoomTime = [dic[@"autoCloseNetworkRoomTime"] integerValue];
- room.soundVolume = [dic[@"soundVolume"] integerValue];
- return room;
- }
- - (BOOL)addMemeber:(RoomMember *)member {
- BOOL canAdd = [self indexInDataSource:member] < 0 ? YES:NO;
-
- if(canAdd) {
- NSMutableArray *tmp = [self.memberList mutableCopy];
- [tmp addObject:member];
- self.memberList = [tmp copy];
- }
- return YES;
- }
- - (BOOL)removeMemeber:(RoomMember *)member {
- int index = [self indexInDataSource:member];
- BOOL canRemove = index >= 0 ? YES:NO ;
- if(canRemove) {
- NSMutableArray *tmp = [self.memberList mutableCopy];
- [tmp removeObjectAtIndex:index];
- self.memberList = [tmp copy];
- }
- return canRemove;
- }
- - (void)updateMemeber:(NSString *)userId forRole:(Role )role {
- RoomMember *memeber = [self getMember:userId];
- memeber.role = role;
- [self updateMemeber:memeber];
- }
- - (void)updateMember:(NSString *)userId forCamera:(BOOL)enable {
- RoomMember *member = [self getMember:userId];
- member.cameraEnable = enable;
- [self updateMemeber:member];
- }
- - (void)updateMember:(NSString *)userId forMicrophone:(BOOL)enable {
- RoomMember *member = [self getMember:userId];
- member.microphoneEnable = enable;
- [self updateMemeber:member];
- }
- - (void)updateMember:(NSString *)userId forMusicMode:(BOOL)enable {
- RoomMember *member = [self getMember:userId];
- member.musicModeOn = enable;
- [self updateMemeber:member];
- }
- - (void)updateMember:(NSString *)userId forHandsUp:(BOOL)enable {
- if ([userId isEqualToString:self.currentDisplayURI]) {
- return;
- }
- RoomMember *member = [self getMember:userId];
- member.handUpOn = enable;
- [self updateMemeber:member];
- }
- - (void)updateMember:(NSString *)userId forExamSong:(BOOL)enable {
- RoomMember *member = [self getMember:userId];
- // member.examSongEnable = enable;
- [self updateMemeber:member];
- }
- - (void)updateMember:(NSString *)userId forMusicScore:(BOOL)enable songId:(int)songId {
- RoomMember *member = [self getMember:userId];
- member.musicScoreAccompanimentId = songId;
- member.playStatus = enable;
- member.accompanimentPlayStatus = NO;
- // 获取成员当前曲目
- for (ClassSongMessage *songMessage in member.songMessage) {
- if (songMessage.musicScoreAccompanimentId == songId) {
- member.url = songMessage.url;
- member.mp3Url = songMessage.mp3Url;
- break;
- }
- }
- [self updateMemeber:member];
- }
- - (void)updateMember:(NSString *)userId forAccompany:(BOOL)enable songId:(int)songId {
- RoomMember *member = [self getMember:userId];
- member.accompanimentPlayStatus = enable;
- member.playStatus = NO;
- member.musicScoreAccompanimentId = songId;
- // 获取成员当前曲目
- for (ClassSongMessage *songMessage in member.songMessage) {
- if (songMessage.musicScoreAccompanimentId == songId) {
- member.url = songMessage.url;
- member.mp3Url = songMessage.mp3Url;
- break;
- }
- }
-
- [self updateMemeber:member];
- }
- - (void)updateMemberAccompamy:(NSString *)userId songMessage:(ClassSongMessage *)songMessage {
- RoomMember *member = [self getMember:userId];
- BOOL hasRecordSong = NO;
- for (ClassSongMessage *recordSongMessage in member.songMessage) {
- if (songMessage.musicScoreAccompanimentId == recordSongMessage.musicScoreAccompanimentId) {
- hasRecordSong = YES;
- break;
- }
- }
- if (hasRecordSong == NO) {
- [member.songMessage addObject:songMessage];
- }
- [self updateMemeber:member];
- }
- - (void)updateMemeber:(RoomMember *)member {
- int index = [self indexInDataSource:member];
- if(index >= 0) {
- NSMutableArray *tmp = [self.memberList mutableCopy];
- [tmp replaceObjectAtIndex:index withObject:member];
- self.memberList = [tmp copy];
- }
- }
- - (RoomMember *)getMember:(NSString *)userId {
- for(RoomMember *mem in self.memberList) {
- if([mem.userId isEqualToString:userId]) {
- return mem;
- }
- }
- return nil;
- }
- - (void)updateDisplayUri:(NSString *)display {
- if(display.length == 0){
- self.currentDisplayType = DisplayNone;
- self.currentDisplayURI = @"";
- return;
- }
- NSRange typeRange = [display rangeOfString:@"display://type="];
- NSRange userIdRange = [display rangeOfString:@"?userId="];
- NSRange uriRange = [display rangeOfString:@"?uri="];
- DisplayType type = (DisplayType)[[display substringWithRange:NSMakeRange(NSMaxRange(typeRange), 1)] intValue];
- NSString *userId = nil;
- NSInteger location = uriRange.location;
- if(display.length < location) {
- location = display.length;
- }
- if(userIdRange.location != NSNotFound) {
- userId = [display substringWithRange:NSMakeRange(NSMaxRange(userIdRange), location-NSMaxRange(userIdRange))];
- }
- NSString *uri = nil;
- if(uriRange.location != NSNotFound) {
- uri =[display substringWithRange:NSMakeRange(NSMaxRange(uriRange), display.length-NSMaxRange(uriRange))];
- }
- self.currentDisplayType = type;
- if(type == DisplayTeacher || type == DisplaySharedScreen || type == DisplayTypeStudent) {
- self.currentDisplayURI = userId;
- }
- else if (type == DisplayWhiteboard) {
- self.currentDisplayURI = uri;
- }
- }
- - (int)indexInDataSource:(RoomMember *)member {
- int index = -1;
- for(int i=0;i<self.memberList.count;i++) {
- RoomMember *mem = self.memberList[i];
- if([mem.userId isEqualToString:member.userId]) {
- index = i;
- break;
- }
- }
- return index;
- }
- - (RoomMember *)teacher {
- for(RoomMember *mem in self.memberList) {
- if(mem.role == RoleTeacher) {
- return mem;
- }
- }
- return nil;
- }
- - (RoomMember *)assistant {
- for(RoomMember *mem in self.memberList) {
- if(mem.role == RoleTeacher) {
- return mem;
- }
- }
- return nil;
- }
- - (RoomMember *)currentMember {
- return [self getMember:self.currentMemberId];
- }
- - (int)getMemberCountWithoutAudience {
- int count = 0;
- for (RoomMember *mem in self.memberList) {
- if (mem.role != RoleAudience) {
- count ++;
- }
- }
- return count;
- }
- - (NSString *)description
- {
- return [NSString stringWithFormat:@"Classroom:%@ displayType:%@ displayUri:%@ memeberList:%@", self.roomId,@(self.currentDisplayType),self.currentDisplayURI,self.memberList];
- }
- @end
|