Parcourir la source

网络教室新UI和封装

Steven il y a 1 an
Parent
commit
c4106a699f
100 fichiers modifiés avec 703 ajouts et 7546 suppressions
  1. 503 328
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 85 152
      KulexiuForTeacher/KulexiuForTeacher/AppDelegate.m
  3. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/Contents.json
  4. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/common_image_choose.imageset/Contents.json
  5. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/common_image_choose.imageset/common_image_choose@2x.png
  6. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/common_image_choose.imageset/common_image_choose@3x.png
  7. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/common_image_delete.imageset/Contents.json
  8. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/common_image_delete.imageset/common_image_delete@2x.png
  9. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/common_image_delete.imageset/common_image_delete@3x.png
  10. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/AuthImage/whiteboard_refresh.imageset/Contents.json
  11. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/AuthImage/whiteboard_refresh.imageset/whiteboard_refresh@2x.png
  12. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/AuthImage/whiteboard_refresh.imageset/whiteboard_refresh@3x.png
  13. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/LoginManger/TXIMLinsenter.m
  14. 0 2
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/RCConnectionManager.m
  15. 25 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/ChatViewController.m
  16. 7 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatListViewController.m
  17. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSConversationListController.h
  18. 0 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSConversationListController.m
  19. 7 19
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/Controller/NewClassRoomViewController.m
  20. 0 192
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/FullVideo/FullVideoCell.m
  21. 0 39
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/FullVideo/FullVideoCell.xib
  22. 0 38
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/FullVideo/FullVideoView.h
  23. 0 54
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/MainContainer/ClassroomMainContainer.h
  24. 0 204
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/MainContainer/ClassroomMainContainer.m
  25. 0 297
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/MainToolbar/MainToolView.m
  26. 0 58
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/TeachTool/TeachToolView.h
  27. 0 292
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/TeachTool/TeachToolView.m
  28. 0 79
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/TitleView/ClassTitleView.h
  29. 0 287
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/VideoList/ClassVideoListCell.m
  30. 0 36
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/VideoList/ClassVideoListView.h
  31. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Login/Model/UserInfoManager.m
  32. 0 23
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/ChatAreaView.h
  33. 0 277
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/ChatAreaView.m
  34. 0 19
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/Message/TimeStampMessage.h
  35. 0 32
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/Message/TimeStampMessage.m
  36. 0 32
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/MessageBaseCell.h
  37. 0 44
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/MessageBaseCell.m
  38. 0 18
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/MessageCell.h
  39. 0 216
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/MessageCell.m
  40. 0 21
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/TextMessageCell.h
  41. 0 43
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/TextMessageCell.m
  42. 0 17
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/TimeStampCell.h
  43. 0 53
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/TimeStampCell.m
  44. 0 18
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/TipMessageCell.h
  45. 0 50
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/TipMessageCell.m
  46. 0 77
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageDataSource.h
  47. 0 377
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageDataSource.m
  48. 0 45
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageHelper.h
  49. 0 265
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageHelper.m
  50. 0 19
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageModel.h
  51. 0 23
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageModel.m
  52. 0 26
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/MainContainer/EmptyView.h
  53. 0 79
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/MainContainer/EmptyView.m
  54. 0 46
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/MainContainer/MainContainerView.h
  55. 0 182
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/MainContainer/MainContainerView.m
  56. 0 20
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/RecentShared/RecentSharedVideoCell.h
  57. 0 64
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/RecentShared/RecentSharedVideoCell.m
  58. 0 32
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/RecentShared/RecentSharedView.h
  59. 0 175
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/RecentShared/RecentSharedView.m
  60. 0 22
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/RecentShared/RecentSharedWhiteboardCell.h
  61. 0 81
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/RecentShared/RecentSharedWhiteboardCell.m
  62. 0 54
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Title/ClassroomTitleView.h
  63. 0 456
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Title/ClassroomTitleView.m
  64. 0 43
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/ToolPanel/ToolPanelView.h
  65. 0 194
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/ToolPanel/ToolPanelView.m
  66. 0 38
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/UpgradeApply/UpgradeDidApplyView.h
  67. 0 105
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/UpgradeApply/UpgradeDidApplyView.m
  68. 0 28
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/VideoList/VideoListCell.h
  69. 0 245
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/VideoList/VideoListCell.m
  70. 0 36
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/VideoList/VideoListView.h
  71. 0 181
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/VideoList/VideoListView.m
  72. 0 117
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/NewWhiteboard/KSWhiteboardControl.m
  73. 0 684
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/ClassroomService.m
  74. 0 24
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/AccompanyDownloadCallbackMessage.h
  75. 0 46
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/AccompanyDownloadCallbackMessage.m
  76. 0 28
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/AccompanyDownloadMessage.h
  77. 0 39
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/AccompanyDownloadMessage.m
  78. 0 17
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/ApplySpeechMessage.h
  79. 0 36
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/ApplySpeechMessage.m
  80. 0 25
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/ApplySpeechResultMessage.h
  81. 0 36
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/ApplySpeechResultMessage.m
  82. 0 18
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/AssistantTransferMessage.h
  83. 0 35
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/AssistantTransferMessage.m
  84. 0 33
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/ControlDeviceNotifyMessage.h
  85. 0 42
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/ControlDeviceNotifyMessage.m
  86. 0 26
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/DeviceMessage.h
  87. 0 38
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/DeviceMessage.m
  88. 0 16
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/DisplayCommandMessage.h
  89. 0 34
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/DisplayCommandMessage.m
  90. 0 33
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/InviteUpgradeMessage.h
  91. 0 42
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/InviteUpgradeMessage.m
  92. 0 40
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/MemberChangeMessage.h
  93. 0 55
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/MemberChangeMessage.m
  94. 0 40
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/NodePlayMessage.m
  95. 0 17
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/RoleChangedMessage.h
  96. 0 35
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/RoleChangedMessage.m
  97. 0 25
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/SongDownloadCallbackMessage.h
  98. 0 41
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/SongDownloadCallbackMessage.m
  99. 0 27
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/SongDownloadMessage.h
  100. 0 38
      KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/SongDownloadMessage.m

Fichier diff supprimé car celui-ci est trop grand
+ 503 - 328
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj


+ 85 - 152
KulexiuForTeacher/KulexiuForTeacher/AppDelegate.m

@@ -11,8 +11,6 @@
 #import "KSUpdateAlert.h"
 #import "KSNetworkAccessibleManager.h"
 #import <Bugly/Bugly.h>
-#import <RongIMLib/RongIMLib.h>
-#import <RongIMKit/RongIMKit.h>
 #import <UMCommon/UMCommon.h>
 #import <UMShare/UMShare.h>
 #import <UShareUI/UShareUI.h>
@@ -27,9 +25,6 @@
 #import "KSTouchCapturingWindow.h"
 #import "KSBaseWKWebViewController.h"
 #import "UserInfoManager.h"
-#import "KSIMService.h"
-#import "RCConnectionManager.h"
-#import "KSRCIMDataSource.h"
 
 #import "KSBaseWKWebViewController.h"
 #import "CustomNavViewController.h"
@@ -46,21 +41,8 @@
 #import <TUICore/TUIConfig.h>
 #import <TUIChat/TUIChat.h>
 
-@interface RCNaviDataInfo : NSObject
 
-@property (nonatomic, assign) NSTimeInterval uploadVideoDurationLimit;
-
-@end
-
-@interface RCNaviDataManager : NSObject
-
-@property (nonatomic, strong) RCNaviDataInfo *naviData;
-
-+ (instancetype)sharedInstance;
-
-@end
-
-@interface AppDelegate ()<RCIMReceiveMessageDelegate,JPUSHRegisterDelegate>
+@interface AppDelegate ()<JPUSHRegisterDelegate>
 
 @property (nonatomic, assign) BOOL isNeedUpdate;
 
@@ -297,66 +279,66 @@
 }
 
 - (void)configIM {
-    [RCNaviDataManager sharedInstance].naviData.uploadVideoDurationLimit = 480.0f;
-    // 6tnym1br6pv07 正式环境key   c9kqb3rdc451j test
-    [[RCIM sharedRCIM] initWithAppKey:RCIM_KEY];
-    
-    //IMKit连接状态的监听器
-    [[RCIM sharedRCIM] setConnectionStatusDelegate:KSRMLINK];
-    //IMKit消息接收的监听器
-    [[RCIM sharedRCIM] setReceiveMessageDelegate:self];
-    // 信息提供者
-    [RCIM sharedRCIM].userInfoDataSource = KSRMDataSource;
-    [[RCIM sharedRCIM] setGroupInfoDataSource:KSRMDataSource];
-    // 群名片信息提供者
-    [[RCIM sharedRCIM] setGroupUserInfoDataSource:KSRMDataSource];
-    // 群成员数据源
-    [RCIM sharedRCIM].groupMemberDataSource = KSRMDataSource;
-    
-    //开启消息@功能(只支持群聊和讨论组, App需要实现群成员数据源groupMemberDataSource)
-    RCKitConfigCenter.message.enableMessageMentioned = YES;
-    //是否关闭本地通知,默认是打开的
-    RCKitConfigCenter.message.disableMessageNotificaiton = NO;
-    // 会话界面设置
-    RCKitConfigCenter.ui.globalMessageAvatarStyle = RC_USER_AVATAR_RECTANGLE;
-    RCKitConfigCenter.ui.globalMessagePortraitSize = CGSizeMake(40, 40);
-    // 会话列表头像设置
-    RCKitConfigCenter.ui.globalConversationAvatarStyle = RC_USER_AVATAR_RECTANGLE;
-    RCKitConfigCenter.ui.globalConversationPortraitSize = CGSizeMake(44, 44);
-    
-    //开启消息撤回功能
-    RCKitConfigCenter.message.enableMessageRecall = YES;
-    // 开启消息合并转发
-    RCKitConfigCenter.message.enableSendCombineMessage = YES;
-    //选择媒体资源时,包含视频文件
-    RCKitConfigCenter.message.isMediaSelectorContainVideo = YES;
-    //设置显示未注册的消息
-    RCKitConfigCenter.message.showUnkownMessage = YES;
-    
-    //开启发送已读回执
-    RCKitConfigCenter.message.enabledReadReceiptConversationTypeList = @[ @(ConversationType_PRIVATE), @(ConversationType_GROUP)];
-    
-    //开启输入状态监听
-    RCKitConfigCenter.message.enableTypingStatus = YES;
-    
-    //开启用户信息和群组信息的持久化
-    [RCIM sharedRCIM].enablePersistentUserInfoCache = YES;
-    // 在发送的所有消息中携带当前登录的用户信息
-    [RCIM sharedRCIM].enableMessageAttachUserInfo = YES;
-    // 关闭所有提示音
-    RCKitConfigCenter.message.disableMessageAlertSound = YES;
-    
-    // 设置断线重连时是否踢出重连设备
-        [[RCIMClient sharedRCIMClient] setReconnectKickEnable:YES];
-    
-    // 左右上角按钮颜色
-    RCKitConfigCenter.ui.globalNavigationBarTintColor = HexRGB(0x000000);
-    // 注册消息
-    [[RCIM sharedRCIM] registerMessageType:NSClassFromString(@"KSChatLiveMessage")];
-    [[RCIM sharedRCIM] registerMessageType:NSClassFromString(@"KSChatMusicMessage")];
-    
-    //    [[RCIMClient sharedRCIMClient] setLogLevel:RC_Log_Level_Verbose];
-    //    [self redirectNSlogToDocumentFolder];
+//    [RCNaviDataManager sharedInstance].naviData.uploadVideoDurationLimit = 480.0f;
+//    // 6tnym1br6pv07 正式环境key   c9kqb3rdc451j test
+//    [[RCIM sharedRCIM] initWithAppKey:RCIM_KEY];
+//
+//    //IMKit连接状态的监听器
+//    [[RCIM sharedRCIM] setConnectionStatusDelegate:KSRMLINK];
+//    //IMKit消息接收的监听器
+//    [[RCIM sharedRCIM] setReceiveMessageDelegate:self];
+//    // 信息提供者
+//    [RCIM sharedRCIM].userInfoDataSource = KSRMDataSource;
+//    [[RCIM sharedRCIM] setGroupInfoDataSource:KSRMDataSource];
+//    // 群名片信息提供者
+//    [[RCIM sharedRCIM] setGroupUserInfoDataSource:KSRMDataSource];
+//    // 群成员数据源
+//    [RCIM sharedRCIM].groupMemberDataSource = KSRMDataSource;
+//
+//    //开启消息@功能(只支持群聊和讨论组, App需要实现群成员数据源groupMemberDataSource)
+//    RCKitConfigCenter.message.enableMessageMentioned = YES;
+//    //是否关闭本地通知,默认是打开的
+//    RCKitConfigCenter.message.disableMessageNotificaiton = NO;
+//    // 会话界面设置
+//    RCKitConfigCenter.ui.globalMessageAvatarStyle = RC_USER_AVATAR_RECTANGLE;
+//    RCKitConfigCenter.ui.globalMessagePortraitSize = CGSizeMake(40, 40);
+//    // 会话列表头像设置
+//    RCKitConfigCenter.ui.globalConversationAvatarStyle = RC_USER_AVATAR_RECTANGLE;
+//    RCKitConfigCenter.ui.globalConversationPortraitSize = CGSizeMake(44, 44);
+//
+//    //开启消息撤回功能
+//    RCKitConfigCenter.message.enableMessageRecall = YES;
+//    // 开启消息合并转发
+//    RCKitConfigCenter.message.enableSendCombineMessage = YES;
+//    //选择媒体资源时,包含视频文件
+//    RCKitConfigCenter.message.isMediaSelectorContainVideo = YES;
+//    //设置显示未注册的消息
+//    RCKitConfigCenter.message.showUnkownMessage = YES;
+//
+//    //开启发送已读回执
+//    RCKitConfigCenter.message.enabledReadReceiptConversationTypeList = @[ @(ConversationType_PRIVATE), @(ConversationType_GROUP)];
+//
+//    //开启输入状态监听
+//    RCKitConfigCenter.message.enableTypingStatus = YES;
+//
+//    //开启用户信息和群组信息的持久化
+//    [RCIM sharedRCIM].enablePersistentUserInfoCache = YES;
+//    // 在发送的所有消息中携带当前登录的用户信息
+//    [RCIM sharedRCIM].enableMessageAttachUserInfo = YES;
+//    // 关闭所有提示音
+//    RCKitConfigCenter.message.disableMessageAlertSound = YES;
+//
+//    // 设置断线重连时是否踢出重连设备
+//        [[RCIMClient sharedRCIMClient] setReconnectKickEnable:YES];
+//
+//    // 左右上角按钮颜色
+//    RCKitConfigCenter.ui.globalNavigationBarTintColor = HexRGB(0x000000);
+//    // 注册消息
+//    [[RCIM sharedRCIM] registerMessageType:NSClassFromString(@"KSChatLiveMessage")];
+//    [[RCIM sharedRCIM] registerMessageType:NSClassFromString(@"KSChatMusicMessage")];
+//
+//    //    [[RCIMClient sharedRCIMClient] setLogLevel:RC_Log_Level_Verbose];
+//    //    [self redirectNSlogToDocumentFolder];
     
 }
 
@@ -555,42 +537,6 @@ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
     // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
 }
 
-- (void)onRCIMReceiveMessage:(RCMessage *)message left:(int)left {
-    
-    NSLog(@"conversationType----%lu",(unsigned long)message.conversationType);
-    // 此处根据消息类型处理对应信息
-    if (message.conversationType == ConversationType_CHATROOM) { // 聊天室类型为直播
-        [[KSIMService sharedService] ksOnReceivedChatroom:message left:left object:@""];
-    }
-    if (message.conversationType == ConversationType_GROUP && ![message.targetId containsString:@"COURSE"] && ![message.targetId containsString:@"FAN"]) { // 网络教室视频聊天
-        [[RCIMClient sharedRCIMClient] clearMessagesUnreadStatus:ConversationType_GROUP targetId:message.targetId];
-        [[KSIMService sharedService] ksOnReceived:message left:left object:@""];
-    }
-    else {
-        // 此处对单聊、群聊消息处理
-        dispatch_async(dispatch_get_main_queue(), ^{
-        
-            if ([message.content isMemberOfClass:[RCGroupNotificationMessage class]]) {
-                RCGroupNotificationMessage *msg = (RCGroupNotificationMessage *)message.content;
-                if ([msg.operation isEqualToString:GroupNotificationMessage_GroupOperationKicked]) {
-                    //                    [[RCIMClient sharedRCIMClient] removeConversation:ConversationType_GROUP targetId:message.targetId];
-                }
-            }
-            else {
-                int unreadMsgCount = [[RCIMClient sharedRCIMClient] getUnreadCount:@[
-                @(ConversationType_PRIVATE), @(ConversationType_APPSERVICE), @(ConversationType_GROUP),@(ConversationType_SYSTEM)
-                ]];
-                [UIApplication sharedApplication].applicationIconBadgeNumber = unreadMsgCount;
-                if (unreadMsgCount >= 1) {
-                    [self.tabBarController noteNewsWithIndex:2 count:unreadMsgCount];
-                } else {
-                    [self.tabBarController clearNewsWithIndex:2];
-                }
-            }
-        });
-    }
-    
-}
 
 
 #pragma mark- JPUSHRegisterDelegate
@@ -841,16 +787,10 @@ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
 
     self.tabBarController = [[KSTabBarViewController alloc] init];
     self.window.rootViewController = self.tabBarController;
-    int unreadMsgCount = [[RCIMClient sharedRCIMClient] getUnreadCount:@[ @(ConversationType_PRIVATE),@(ConversationType_APPSERVICE), @(ConversationType_GROUP),@(ConversationType_SYSTEM)
-    ]];
-    if (unreadMsgCount >= 1) {
-        [self.tabBarController noteNewsWithIndex:2 count:unreadMsgCount];
-    } else {
-        [self.tabBarController clearNewsWithIndex:2];
-    }
     
     [[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]];
     [[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];
+    [self countUnreadMessage];
 }
 
 - (void)initLoginView {
@@ -859,36 +799,8 @@ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
     self.window.rootViewController = navCtrl;
 }
 
-- (void)applicationWillResignActive:(UIApplication *)application {
-    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
-    // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
-    
-    RCConnectionStatus status = [[RCIMClient sharedRCIMClient] getConnectionStatus];
-    if (status != ConnectionStatus_SignOut) {
-        int unreadMsgCount = [[RCIMClient sharedRCIMClient] getUnreadCount:@[@(ConversationType_PRIVATE), @(ConversationType_APPSERVICE), @(ConversationType_GROUP),@(ConversationType_SYSTEM)]];
-        application.applicationIconBadgeNumber = unreadMsgCount;
-        if (unreadMsgCount >= 1) {
-            [self.tabBarController noteNewsWithIndex:2 count:unreadMsgCount];
-        } else {
-            [self.tabBarController clearNewsWithIndex:2];
-        }
-    }
-}
 
-- (void)didReceiveMessageNotification:(NSNotification *)notification {
-    NSNumber *left = [notification.userInfo objectForKey:@"left"];
-    if ([RCIMClient sharedRCIMClient].sdkRunningMode == RCSDKRunningMode_Background && 0 == left.integerValue) {
-        int unreadMsgCount = [[RCIMClient sharedRCIMClient] getUnreadCount:@[@(ConversationType_PRIVATE), @(ConversationType_APPSERVICE), @(ConversationType_GROUP),@(ConversationType_SYSTEM)]];
-        dispatch_async(dispatch_get_main_queue(),^{
-            [UIApplication sharedApplication].applicationIconBadgeNumber = unreadMsgCount;
-            if (unreadMsgCount >= 1) {
-                [self.tabBarController noteNewsWithIndex:2 count:unreadMsgCount];
-            } else {
-                [self.tabBarController clearNewsWithIndex:2];
-            }
-        });
-    }
-}
+
 - (BOOL)handleOutLink:(NSURL *)url {
     NSString *detailUrl = [url absoluteString];
     if ([detailUrl containsString:@"linkUrl="]) {
@@ -1093,6 +1005,27 @@ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
         }
         self.outLinkParm = nil;
     }
-    
 }
+
+// 统计消息数量
+- (void)countUnreadMessage {
+    if ([TXIM_LINSENTER isCurrentUserLoginIM]) {
+        [TXIM_LINSENTER getUnReadCountCallback:^(NSInteger count) {
+            dispatch_async(dispatch_get_main_queue(),^{
+                NSLog(@"----- %zd",count);
+                [UIApplication sharedApplication].applicationIconBadgeNumber = count;
+                if (count >= 1) {
+                    [self.tabBarController noteNewsWithIndex:2 count:count];
+                } else {
+                    [self.tabBarController clearNewsWithIndex:2];
+                }
+                
+                NSDictionary *receiveMsg = @{@"unreadCount":@(count)};
+
+                [[NSNotificationCenter defaultCenter] postNotificationName:CHATVIEW_REFRESHSTATUS object:receiveMsg];
+            });
+        }];
+    }
+}
+
 @end

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/common_image_choose.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "common_image_choose@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "common_image_choose@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/common_image_choose.imageset/common_image_choose@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/common_image_choose.imageset/common_image_choose@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/common_image_delete.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "common_image_delete@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "common_image_delete@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/common_image_delete.imageset/common_image_delete@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Common/common_image_delete.imageset/common_image_delete@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/AuthImage/whiteboard_refresh.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "whiteboard_refresh@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "whiteboard_refresh@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/AuthImage/whiteboard_refresh.imageset/whiteboard_refresh@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/AuthImage/whiteboard_refresh.imageset/whiteboard_refresh@3x.png


+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Common/Base/LoginManger/TXIMLinsenter.m

@@ -116,9 +116,9 @@
     
     [UIApplication sharedApplication].applicationIconBadgeNumber = totalUnreadCount;
     if (totalUnreadCount >= 1) {
-        [[AppDelegate shareAppDelegate].tabBarController noteNewsWithIndex:3 count:totalUnreadCount];
+        [[AppDelegate shareAppDelegate].tabBarController noteNewsWithIndex:2 count:totalUnreadCount];
     } else {
-        [[AppDelegate shareAppDelegate].tabBarController clearNewsWithIndex:3];
+        [[AppDelegate shareAppDelegate].tabBarController clearNewsWithIndex:2];
     }
     [[NSNotificationCenter defaultCenter] postNotificationName:CHATVIEW_REFRESHSTATUS object:receiveMsg];
 }

+ 0 - 2
KulexiuForTeacher/KulexiuForTeacher/Common/Base/RCConnectionManager.m

@@ -31,7 +31,6 @@
     _isNeedJoin = isNeedJoin;
     if (self.isConnected && isNeedJoin) {
         dispatch_main_async_safe(^{
-            [[LoginHelper sharedInstance] joinRongRTCRoom];
         });
     }
     else if (isNeedJoin && !self.isConnected) {
@@ -50,7 +49,6 @@
     _isConnected = isConnected;
     if (self.isNeedJoin && isConnected) {
         dispatch_main_async_safe(^{
-            [[LoginHelper sharedInstance] joinRongRTCRoom];
         });
     }
 }

+ 25 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/ChatViewController.m

@@ -11,6 +11,7 @@
 #import "ChatAddressViewController.h"
 #import "KSChatListViewController.h"
 #import "KSTabBarViewController.h"
+#import "TXIMLinsenter.h"
 
 @interface ChatViewController ()<JXCategoryViewDelegate>
 
@@ -33,10 +34,32 @@
     self.ks_prefersNavigationBarHidden = YES;
     self.titles = @[@"聊天", @"联系人"];
     [self configUI];
+    [self getUnreadCount];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshChatList) name:CHATVIEW_REFRESH object:nil];
-
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshMessageStatus:) name:CHATVIEW_REFRESHSTATUS object:nil];
+}
+
+- (void)getUnreadCount {
+    [TXIM_LINSENTER getUnReadCountCallback:^(NSInteger count) {
+        dispatch_async(dispatch_get_main_queue(),^{
+//            if (count >= 1) {
+//                self.navView.dotView.hidden = NO;
+//            } else {
+//                self.navView.dotView.hidden = YES;
+//            }
+        });
+    }];
+
+}
+- (void)refreshMessageStatus:(NSNotification *)notification {
+    NSDictionary *msgDic = notification.object; ///
+    NSInteger unreadMsgCount = [msgDic ks_integerValueForKey:@"unreadCount"];
+//    if (unreadMsgCount >= 1) {
+//        self.navView.dotView.hidden = NO;
+//    } else {
+//        self.navView.dotView.hidden = YES;
+//    }
 }
-
 - (void)refreshChatList {
     if (self.chatListCtrl) {
         [self.chatListCtrl refreshChatListMessage];

+ 7 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatListViewController.m

@@ -41,6 +41,13 @@
     [self.view addSubview:self.listVC.view];
     self.listVC.tableViewForAll.tipsMsgWhenNoConversation = @"暂无内容~";
     [self.listVC.tableViewForAll.tipsView setImage:[UIImage imageNamed:@"wd_img_zwsj"]];
+    [self.listVC.tableViewContainer mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.left.right.mas_equalTo(self.listVC.view);
+        make.height.mas_equalTo(KPortraitHeight - kNaviBarHeight - 60 - kTabBarHeight);
+    }];
+    [self.listVC.tableViewForAll mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(self.listVC.tableViewContainer);
+    }];
     [self updateTipsFrame];
     _searchBar = [KSChatListSearchView shareInstance];
     _searchBar.isClickSearch = YES;

+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSConversationListController.h

@@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface KSConversationListController : TUIConversationListController
 
+@property(nonatomic, strong) UIView *tableViewContainer;
 
 @end
 

+ 0 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSConversationListController.m

@@ -23,7 +23,6 @@ TUIPopViewDelegate,
 TUINotificationProtocol>
 @property(nonatomic, strong) TUINaviBarIndicatorView *titleView;
 @property(nonatomic, strong) TUIConversationListBaseDataProvider *settingDataProvider;
-@property(nonatomic, strong) UIView *tableViewContainer;
 @property(nonatomic, strong) UIView *bannerView;
 @property(nonatomic, assign) CGFloat viewHeight;
 

+ 7 - 19
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/Controller/NewClassRoomViewController.m

@@ -251,9 +251,7 @@
 - (void)backgroundQuitRoomAction {
     self.isQuitRoom = YES;
     self.isSwitchLine = NO;
-    [[LoginHelper sharedInstance] logout:^{
-    } error:^(RCRTCCode code) {
-    }];
+    [[LoginHelper sharedInstance] logout];
     self.cancleAlert = YES;
 }
 
@@ -266,9 +264,7 @@
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
         self.isQuitRoom = YES;
         self.isSwitchLine = NO;
-        [[LoginHelper sharedInstance] logout:^{
-        } error:^(RCRTCCode code) {
-        }];
+        [[LoginHelper sharedInstance] logout];
         self.cancleAlert = YES;
         [self hideAlertView];
         [[NSNotificationCenter defaultCenter] postNotificationName:@"backLoginView" object:nil];
@@ -282,9 +278,7 @@
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
         self.isQuitRoom = YES;
         self.isSwitchLine = NO;
-        [[LoginHelper sharedInstance] logout:^{
-        } error:^(RCRTCCode code) {
-        }];
+        [[LoginHelper sharedInstance] logout];
         self.cancleAlert = YES;
         [self hideAlertView];
         [[NSNotificationCenter defaultCenter] postNotificationName:@"showOtherLoginAlert" object:nil];
@@ -433,9 +427,7 @@
                 weakSelf.isQuitRoom = YES;
                 SealClassLog(@"ActionTagHangup");
                 weakSelf.hud = [weakSelf createProgressHUD];
-                [[LoginHelper sharedInstance] logout:^{
-                } error:^(RCRTCCode code) {
-                }];
+                [[LoginHelper sharedInstance] logout];
             }];
         }
         default:
@@ -518,9 +510,7 @@
     if (self.playerView.isDisplay) {
         [self.playerView hideView];
     }
-    [[LoginHelper sharedInstance] logout:^{
-    } error:^(RCRTCCode code) {
-    }];
+    [[LoginHelper sharedInstance] logout];
 }
 
 - (void)reJoinRTCRoom {
@@ -1093,10 +1083,8 @@
             // 课程结束退出房间
             SealClassLog(@"ClassEnd!");
             self.hud = [self createProgressHUD];
-            [[LoginHelper sharedInstance] logout:^{
-                [self.titleView clearUnreadMessage];
-            } error:^(RCRTCCode code) {
-            }];
+            [[LoginHelper sharedInstance] logout];
+            [self.titleView clearUnreadMessage];
         });
     }
 }

+ 0 - 192
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/FullVideo/FullVideoCell.m

@@ -1,192 +0,0 @@
-//
-//  FullVideoCell.m
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/9/8.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import "FullVideoCell.h"
-#import "RTCService.h"
-#import "ClassroomService.h"
-#import "LocalRenderManager.h"
-
-@interface FullVideoCell ()
-
-@property (nonatomic, strong) NSString *displayUserId;
-
-@property (weak, nonatomic) IBOutlet UIView *backGroundView;
-
-@property (strong, nonatomic) UILabel *roleLable;
-
-@property (strong, nonatomic) UILabel *nameLable;
-
-@property (nonatomic, strong) UILabel *promptLable;
-
-@end
-
-@implementation FullVideoCell
-
-- (void)awakeFromNib {
-    [super awakeFromNib];
-    // Initialization code
-}
-
-- (instancetype)initWithCoder:(NSCoder *)coder {
-    self = [super initWithCoder:coder];
-    if (self) {
-        [self.contentView addSubview:self.videoView];
-        [self.contentView addSubview:self.roleLable];
-        [self.contentView addSubview:self.nameLable];
-        [self.contentView addSubview:self.promptLable];
-    }
-    return self;
-}
-
-- (void)setCellSize:(CGSize)cellSize {
-    _cellSize = cellSize;
-    CGFloat height = cellSize.height - 2;
-    CGFloat width = height / 3.0f * 4;
-    if (width > cellSize.width - 2) {
-        width = cellSize.width - 2;
-        height = width / 4.0f * 3;
-    }
-    self.videoView.frame = CGRectMake((cellSize.width - width) / 2.0f, (cellSize.height - height) / 2.0f, width, height);
-    [self.nameLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        
-    }];
-    [self.roleLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.mas_equalTo(self.mas_top).offset((cellSize.height - height) / 2.0f + 4);
-        make.left.mas_equalTo(self.mas_left).offset((cellSize.width - width) / 2.0f + 4);
-        make.height.equalTo(@18);
-        make.width.equalTo(@24);
-    }];
-    [self.nameLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.equalTo(self.mas_left).offset(10 + (cellSize.width - width) / 2.0f);
-        make.bottom.equalTo(self.mas_bottom).offset(-(cellSize.height - height) / 2.0f - 10);
-        make.height.equalTo(@22);
-        make.right.mas_equalTo(self.mas_right).offset(-10);
-    }];
-    
-    [self.promptLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.centerY.equalTo(self.videoView.mas_centerY);
-        make.centerX.equalTo(self.videoView.mas_centerX);
-        make.height.equalTo(@25);
-        make.width.equalTo(@84);
-    }];
-}
-
-- (void)setModel:(RoomMember *)member displayUserId:(NSString *)displayUserId {
-    [self resetDefaultStyle];
-    self.displayUserId = displayUserId;
-    if (member == nil) {
-        return;
-    }
-    if (member.userId == nil) {
-        self.nameLable.hidden = YES;
-        self.videoView.hidden = YES;
-        self.roleLable.hidden = YES;
-    }
-    else {
-        if ([member.userId isEqualToString:[ClassroomService sharedService].currentRoom.currentMember.userId]) {
-            self.nameLable.text = @"我";
-            self.roleLable.hidden = NO;
-        }
-        else {
-            self.roleLable.hidden = YES;
-            [self remakeNameLable:member];
-        }
-        
-        if ([[ClassroomService sharedService].currentRoom.shareUserId isEqualToString:member.userId]) {
-            member.handUpOn = NO;
-            self.promptLable.text = @"演示中";
-            self.promptLable.hidden = NO;
-        }
-        
-    }
-    if (![member.userId isEqualToString:displayUserId]) {
-        [self renderVideo:member];
-    }
-}
-
-- (void)resetDefaultStyle {
-    self.nameLable.text = nil;
-    self.roleLable.hidden = NO;
-    self.nameLable.hidden = NO;
-    self.videoView.hidden = NO;
-    self.promptLable.hidden = YES;
-    [self cancelVideo];
-}
-
-- (void)renderVideo:(RoomMember *)member {
-    
-    if([[ClassroomService sharedService].currentRoom.currentMemberId isEqualToString:member.userId]) {
-        RoomMember *curMemeber =[ClassroomService sharedService].currentRoom.currentMember;
-        [[RTCService sharedInstance] renderLocalVideoOnView:self.videoView cameraEnable:curMemeber.cameraEnable];
-    }else {
-        if (![member.userId isEqualToString:self.displayUserId]) {
-            [[RTCService sharedInstance] renderRemoteVideoOnView:self.videoView forUser:member.userId];
-        }
-    }
-}
-
-
-- (void)cancelVideo {
-    [[RTCService sharedInstance] cancelRenderVideoInView:self.videoView];
-}
-
-- (void)remakeNameLable:(RoomMember *)member {
-    NSString * nameTxt =  member.name.length > 8 ? [NSString stringWithFormat:@"%@...",[member.name substringToIndex:8]] : member.name;
-    self.nameLable.text = nameTxt;
-}
-
-
-- (UIView *)videoView {
-    if(!_videoView) {
-        _videoView = [[UIView alloc] init];
-        _videoView.backgroundColor = [UIColor colorWithHexString:@"3D4041" alpha:1];
-    }
-    return _videoView;
-}
-
-- (UILabel *)roleLable {
-    if(!_roleLable) {
-        _roleLable = [[UILabel alloc] init];
-        _roleLable.font = [UIFont systemFontOfSize:10];
-        _roleLable.textAlignment = NSTextAlignmentCenter;
-        _roleLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-        _roleLable.backgroundColor = HexRGB(0xFF5500);
-        _roleLable.text = @"讲师";
-        _roleLable.layer.cornerRadius = 4;
-        _roleLable.layer.masksToBounds = YES;
-    }
-    return _roleLable;
-}
-
-- (UILabel *)nameLable {
-    if(!_nameLable) {
-        _nameLable = [[UILabel alloc] init];
-        _nameLable.font = [UIFont systemFontOfSize:16.0];
-        _nameLable.numberOfLines = 1;
-        _nameLable.textAlignment = NSTextAlignmentLeft;
-        _nameLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-    }
-    return _nameLable;
-}
-
-
-- (UILabel *)promptLable {
-    if(!_promptLable) {
-        _promptLable = [[UILabel alloc] init];
-        _promptLable.font = [UIFont systemFontOfSize:12];
-        _promptLable.numberOfLines = 1;
-        _promptLable.textAlignment = NSTextAlignmentCenter;
-        _promptLable.backgroundColor = [UIColor clearColor];
-        _promptLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-        _promptLable.text =  @"演示中";
-        _promptLable.hidden = YES;
-    }
-    return _promptLable;
-}
-
-@end

+ 0 - 39
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/FullVideo/FullVideoCell.xib

@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="16097.3" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
-    <device id="retina6_1" orientation="portrait" appearance="light"/>
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
-        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="FullVideoCell">
-            <rect key="frame" x="0.0" y="0.0" width="248" height="97"/>
-            <autoresizingMask key="autoresizingMask"/>
-            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
-                <rect key="frame" x="0.0" y="0.0" width="248" height="97"/>
-                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                <subviews>
-                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zmD-Lm-OPV">
-                        <rect key="frame" x="0.0" y="0.0" width="248" height="97"/>
-                        <color key="backgroundColor" red="0.078431372549019607" green="0.078431372549019607" blue="0.078431372549019607" alpha="1" colorSpace="calibratedRGB"/>
-                    </view>
-                </subviews>
-            </view>
-            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-            <constraints>
-                <constraint firstItem="zmD-Lm-OPV" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="43R-lc-6eV"/>
-                <constraint firstAttribute="trailing" secondItem="zmD-Lm-OPV" secondAttribute="trailing" id="Jeh-mI-9ft"/>
-                <constraint firstItem="zmD-Lm-OPV" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="aXC-fM-h0C"/>
-                <constraint firstAttribute="bottom" secondItem="zmD-Lm-OPV" secondAttribute="bottom" id="xRW-zZ-n5X"/>
-            </constraints>
-            <size key="customSize" width="248" height="97"/>
-            <connections>
-                <outlet property="backGroundView" destination="zmD-Lm-OPV" id="U4s-17-jKM"/>
-            </connections>
-            <point key="canvasLocation" x="166.66666666666669" y="138.28125"/>
-        </collectionViewCell>
-    </objects>
-</document>

+ 0 - 38
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/FullVideo/FullVideoView.h

@@ -1,38 +0,0 @@
-//
-//  FullVideoView.h
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/9/8.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-// 宫格视频
-NS_ASSUME_NONNULL_BEGIN
-@class FullVideoView,RoomMember;
-
-@protocol FullVideoViewDelegate <NSObject>
-
-- (void)fullVideoListView:(FullVideoView *_Nullable)view didTap:(RoomMember *_Nullable)member;
-
-- (void)cancleFullVideoList;
-
-@end
-
-@interface FullVideoView : UIView
-
-@property (nonatomic, weak) id<FullVideoViewDelegate> delegate;
-
-@property (nonatomic, strong) NSString *currentPlayUserId; // 当前主屏播放的用户id
-
-@property (nonatomic, strong) NSString *displayUserId;  // 大屏显示的用户
-
-
-- (void)updateUserVideo:(NSString *)userId;
-
-- (void)showInView:(UIView *)view;
-- (void)showVideoList;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 54
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/MainContainer/ClassroomMainContainer.h

@@ -1,54 +0,0 @@
-//
-//  ClassroomMainContainer.h
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/4/22.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#import "ClassroomService.h"
-#import "EmptyView.h"
-#import "RoomMember.h"
-#import "MainToolView.h"
-
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class ClassroomMainContainer;
-
-@protocol ClassroomMainContainerDelegate <NSObject>
-- (void)mainContainerView:(ClassroomMainContainer *_Nullable)view scale:(CGFloat)scale;
-- (void)mainContainerView:(ClassroomMainContainer *_Nullable)view fullScreen:(BOOL)isFull;
-- (void)mainContainerOpertionMember:(RoomMember *)member tapButton:(UIButton *)button didTapAtTag:(MainToolButtonTag)tag;
-@end
-
-@interface ClassroomMainContainer : UIView
- @property (nonatomic, strong) UIView *videoBackView;
-
-@property (nonatomic, strong) UIView *videoView;
-
-@property (nonatomic, strong) EmptyView *emptyView;
-
-@property (nonatomic, strong) RoomMember *member;
-
-@property (nonatomic, weak) id<ClassroomMainContainerDelegate> delegate;
-
-@property (nonatomic, assign, readonly) BOOL isFullScreen;
-
-@property (nonatomic, readonly) CGRect currentVideoFrame;
-
-@property (nonatomic, strong) MainToolView *toolView;
-
-
-- (void)didChangeRole:(Role)role;
-
-- (void)containerViewRenderView:(RoomMember *)member;
-
-- (void)cancelRenderView;
-
-- (void)refreshToolView;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 204
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/MainContainer/ClassroomMainContainer.m

@@ -1,204 +0,0 @@
-//
-//  ClassroomMainContainer.m
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/4/22.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import "ClassroomMainContainer.h"
-#import "RTCService.h"
-#import "LocalRenderManager.h"
-
-#define TitleViewHeight  64
-
-@interface ClassroomMainContainer ()<MainToolViewDelegate>
-
-@property (nonatomic, strong) UIView *tapGestureView;
-@property (nonatomic) CGRect currentVideoFrame;
-@property (nonatomic) CGRect originVideoFrame;
-@property (nonatomic, strong) UILabel *nameLabel;
-
-@end
-
-@implementation ClassroomMainContainer
-
-- (instancetype)initWithFrame:(CGRect)frame {
-    self = [super initWithFrame:frame];
-    if (self) {
-        self.backgroundColor = HexRGB(0x35343e);
-        [self addSubview:self.emptyView];
-        [self addSubview:self.videoBackView];
-        [self.videoBackView addSubview:self.videoView];
-        self.originVideoFrame = self.videoBackView.frame;
-        self.currentVideoFrame = self.originVideoFrame;
-        [self.videoView addSubview:self.toolView];
-        [self.videoView addSubview:self.nameLabel];
-    }
-    return self;
-}
-
-- (void)refreshToolView {
-    self.toolView.cameroButton.selected = !self.member.cameraEnable;
-    self.toolView.micButton.selected = !self.member.microphoneEnable;
-    self.toolView.musicModeButton.selected = self.member.musicModeOn;
-    NSString *shareUserId = [ClassroomService sharedService].currentRoom.shareUserId;
-    
-    self.toolView.shareButton.selected = [self.member.userId isEqualToString:shareUserId];
-    // 节拍器按钮
-    self.toolView.nodeButton.selected = self.member.enable;
-    // 伴奏按钮
-    self.toolView.accompanyButton.selected = self.member.playStatus || self.member.accompanimentPlayStatus;
-}
-
-- (void)didChangeRole:(Role)role {
-    [self.emptyView changeRole:role];
-}
-
-- (void)containerViewRenderView:(RoomMember *)member {
-    self.videoBackView.hidden = NO;
-    self.videoView.hidden = NO;
-    if([[ClassroomService sharedService].currentRoom.currentMemberId isEqualToString:member.userId]) {
-        RoomMember *curMemeber =[ClassroomService sharedService].currentRoom.currentMember;
-        [[RTCService sharedInstance] renderLocalVideoOnView:self.videoView cameraEnable:curMemeber.cameraEnable];
-        [LocalRenderManager shareInstance].hadRenderMainView = YES;
-    }else {
-        [LocalRenderManager shareInstance].hadRenderMainView = NO;
-        [[RTCService sharedInstance] exchangeRemoteUserAVStreamToNomalSteam:member.userId callback:^{
-            [[RTCService sharedInstance] renderRemoteVideoOnView:self.videoView forUser:member.userId];
-        }];
-        
-    }
-    self.member = member;
-    if ([member.userId isEqualToString:[ClassroomService sharedService].currentRoom.currentMember.userId]) {
-        self.nameLabel.text = @"我";
-    }
-    else {
-        self.nameLabel.text = [NSString returnNoNullStringWithString:member.name];
-    }
-    
-    // 判断显示是否是老师
-    if (member.role == RoleTeacher) {
-        self.toolView.status = MainToolStatusTeacher;
-    }
-    else {
-        self.toolView.status = MainToolStatusStudent;
-    }
-    [self refreshToolView];
-}
-
-- (void)cancelRenderView {
-    [LocalRenderManager shareInstance].hadRenderMainView = NO;
-    // 如何关闭了摄像头,可能导致videoView 遮挡控制事件
-    [self updateVideoViewFrame:NO];
-    self.videoBackView.hidden = YES;
-}
-
-
-#pragma mark ---- tool view delegate
-- (void)mainToolView:(UIButton *)button didTapAtTag:(MainToolButtonTag)tag {
-    if (self.delegate && [self.delegate respondsToSelector:@selector(mainContainerOpertionMember:tapButton:didTapAtTag:)]) {
-        [self.delegate mainContainerOpertionMember:self.member tapButton:button didTapAtTag:tag];
-    }
-}
-
-#pragma mark - private method
-
-- (void)updateVideoViewFrame:(BOOL)isFull {
-    self.currentVideoFrame = self.frame;
-    if(isFull) {
-        [self.superview addSubview:self.videoBackView];
-        [self.superview bringSubviewToFront:self.videoBackView];
-        CGFloat width = 0.0f;
-        CGFloat height = 0.0f;
-        
-        height = KLandscapeWidth / 4.0f * 3;
-        if (height > KLandscapeHeight) {
-            height = KLandscapeHeight;
-        }
-        width = height / 3.0f * 4;
-
-        self.videoView.frame = CGRectMake((KLandscapeWidth - width) / 2.0f, 0, width, height);
-    }else {
-        [self.videoBackView removeFromSuperview];
-        [self addSubview:self.videoBackView];
-        self.currentVideoFrame = self.originVideoFrame;
-        self.videoView.frame = CGRectMake(0, 0, CGRectGetWidth(self.currentVideoFrame), CGRectGetHeight(self.currentVideoFrame));
-    }
-    self.videoBackView.frame = self.currentVideoFrame;
-}
-
-#pragma mark - getter
-- (UIView *)videoBackView {
-    if (!_videoBackView) {
-        CGFloat width = 0.0f;
-        CGFloat height = 0.0f;
-        height = KLandscapeHeight - 20;
-        width = height / 3.0f * 4;
-        if (width > KLandscapeWidth - 180) {
-            width = KLandscapeWidth - 180;
-            height = width / 4.0f * 3;
-        }
-        _videoBackView = [[UIView alloc] initWithFrame:CGRectMake(10, 10, width, height)];
-        _videoBackView.backgroundColor = [UIColor colorWithHexString:@"141414" alpha:1];
-    }
-    return _videoBackView;
-}
-
-
-- (UIView *)videoView {
-    if(!_videoView) {
-        CGFloat width = 0.0f;
-        CGFloat height = 0.0f;
-        height = KLandscapeHeight - 20;
-        width = height / 3.0f * 4;
-        if (width > KLandscapeWidth - 180) {
-            width = KLandscapeWidth - 180;
-            height = width / 4.0f * 3;
-        }
-        _videoView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
-    }
-    return _videoView;
-}
-
-- (EmptyView *)emptyView {
-    if (!_emptyView) {
-        CGFloat width = 0.0f;
-        CGFloat height = 0.0f;
-        height = KLandscapeHeight - 20;
-        width = height / 3.0f * 4;
-        if (width > KLandscapeWidth - 180) {
-            width = KLandscapeWidth - 180;
-            height = width / 4.0f * 3;
-        }
-        _emptyView = [[EmptyView alloc] initWithFrame:CGRectMake(10, 10, width, height) role:[ClassroomService sharedService].currentRoom.currentMember.role];
-    }
-    return _emptyView;
-}
-
-- (MainToolView *)toolView {
-    if (!_toolView) {
-        _toolView = [[MainToolView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.videoView.frame) - 100, CGRectGetWidth(self.videoView.frame), 100)];
-        _toolView.delegate = self;
-    }
-    return _toolView;
-}
-
-- (UILabel *)nameLabel {
-    if (!_nameLabel) {
-        _nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 15, 100, 20)];
-        _nameLabel.textColor = [UIColor whiteColor];
-        _nameLabel.font = [UIFont systemFontOfSize:16.0f];
-    }
-    return _nameLabel;
-}
-
-/*
-// Only override drawRect: if you perform custom drawing.
-// An empty implementation adversely affects performance during animation.
-- (void)drawRect:(CGRect)rect {
-    // Drawing code
-}
-*/
-
-@end

+ 0 - 297
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/MainToolbar/MainToolView.m

@@ -1,297 +0,0 @@
-//
-//  MainToolView.m
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/4/28.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import "MainToolView.h"
-
-#define ToolButtonWidth (44)
-#define ToolButtonHeight (52)
-
-@interface MainToolView ()
-
-@property (nonatomic, strong) NSMutableArray *buttonArray;
-@property (nonatomic, strong) NSArray *buttonImageArray;
-@property (nonatomic, strong) NSArray *buttonHighlightedImageArray;
-@property (nonatomic, strong) NSArray *buttonCloseImageArray;
-
-@property (nonatomic, strong) UILabel *progressLabel;
-
-@property (nonatomic, strong) UIImageView *bgView;
-@end
-
-@implementation MainToolView
-
-- (instancetype)initWithFrame:(CGRect)frame {
-    self = [super initWithFrame:frame];
-    if (self) {
-        self.backgroundColor = [UIColor clearColor];
-        [self.buttonArray addObjectsFromArray:@[self.shareButton,self.micButton, self.cameroButton, self.musicModeButton, self.nodeButton,self.accompanyButton]];
-        [self addSubviews];
-    }
-    return self;
-}
-
-- (void)addSubviews {
-    [self addSubview:self.bgView];
-    [self addSubview:self.shareButton];
-    [self addSubview:self.micButton];
-    [self addSubview:self.cameroButton];
-    [self addSubview:self.musicModeButton];
-    [self addSubview:self.nodeButton];
-    [self addSubview:self.accompanyButton];
-    
-    [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.right.bottom.mas_equalTo(self);
-        make.height.mas_equalTo(69);
-    }];
-    
-    [self setDefaultButtons];
-    [self.shareButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.bottom.mas_equalTo(self.mas_bottom).offset(-8);
-        make.left.mas_equalTo(self.mas_left).offset(10);
-        make.width.mas_equalTo(ToolButtonWidth);
-        make.height.mas_equalTo(ToolButtonHeight);
-    }];
-    
-    [self.micButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.bottom.mas_equalTo(self.mas_bottom).offset(-8);
-        make.left.mas_equalTo(self.shareButton.mas_right).offset(10);
-        make.width.mas_equalTo(ToolButtonWidth);
-        make.height.mas_equalTo(ToolButtonHeight);
-    }];
-    
-    [self.cameroButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.bottom.mas_equalTo(self.mas_bottom).offset(-8);
-        make.left.mas_equalTo(self.micButton.mas_right).offset(10);
-        make.width.mas_equalTo(ToolButtonWidth);
-        make.height.mas_equalTo(ToolButtonHeight);
-    }];
-    
-    [self.musicModeButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.bottom.mas_equalTo(self.mas_bottom).offset(-8);
-        make.left.mas_equalTo(self.cameroButton.mas_right).offset(10);
-        make.width.mas_equalTo(ToolButtonWidth);
-        make.height.mas_equalTo(ToolButtonHeight);
-    }];
-    
-    [self.nodeButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.bottom.mas_equalTo(self.mas_bottom).offset(-8);
-        make.left.mas_equalTo(self.musicModeButton.mas_right).offset(10);
-        make.width.mas_equalTo(ToolButtonWidth);
-        make.height.mas_equalTo(ToolButtonHeight);
-    }];
-    
-    [self.accompanyButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.bottom.mas_equalTo(self.mas_bottom).offset(-8);
-        make.left.mas_equalTo(self.nodeButton.mas_right).offset(10);
-        make.width.mas_equalTo(ToolButtonWidth);
-        make.height.mas_equalTo(ToolButtonHeight);
-    }];
-
-    // 外部老师不显示伴奏按钮
-    self.accompanyButton.hidden = YES;
-    self.accompanyButton.userInteractionEnabled = NO;
-}
-
-- (void)showDownloadButtonWithSongName:(NSString *)songName isAccompany:(BOOL)isAccompany {
-    [self showPercentButtonWithSongName:songName isAccompany:isAccompany];
-}
-
-- (void)hiddenDownloadButton {
-    if (_percentView) {
-        self.percentView.hidden = YES;
-        self.percentView.userInteractionEnabled = NO;
-    }
-}
-
-- (void)showPercentButtonWithSongName:(NSString *)songName isAccompany:(BOOL)isAccompany {
-    NSString *titleDesc = isAccompany ? @"(伴奏)" : @"(原声)";
-    if (!_percentView) {
-        [self addSubview:self.percentView];
-        [self.percentView mas_makeConstraints:^(MASConstraintMaker *make) {
-            make.height.mas_equalTo(30);
-            make.left.mas_equalTo(self.mas_left).offset(10);
-            make.bottom.mas_equalTo(self.accompanyButton.mas_top).offset(-15);
-        }];
-        self.percentView.layer.cornerRadius = 15.0f;
-        
-        UIImageView *downImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tool_download"]];
-        [self.percentView addSubview:downImg];
-        [downImg mas_makeConstraints:^(MASConstraintMaker *make) {
-            make.left.mas_equalTo(self.percentView.mas_left).offset(12);
-            make.width.height.mas_equalTo(12);
-            make.centerY.mas_equalTo(self.percentView.mas_centerY);
-        }];
-        _progressLabel = [[UILabel alloc] init];
-        _progressLabel.text = [NSString stringWithFormat:@"《%@》%@",[NSString returnNoNullStringWithString:songName],titleDesc];
-        _progressLabel.textColor = HexRGB(0xffffff);
-        _progressLabel.font = [UIFont systemFontOfSize:14.0f];
-        [self.percentView addSubview:_progressLabel];
-        [_progressLabel mas_makeConstraints:^(MASConstraintMaker *make) {
-            make.left.mas_equalTo(downImg.mas_right).offset(3);
-            make.centerY.mas_equalTo(self.percentView.mas_centerY);
-            make.right.mas_equalTo(self.percentView.mas_right).offset(-3);
-        }];
-        UIButton *progressButton = [[UIButton alloc] initWithFrame:CGRectZero];
-        progressButton.backgroundColor = [UIColor clearColor];
-        progressButton.enabled = YES;
-        progressButton.tag = MainToolButtonTagPercent;
-        [progressButton addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-        [self.percentView addSubview:progressButton];
-        [progressButton mas_makeConstraints:^(MASConstraintMaker *make) {
-            make.top.right.left.bottom.mas_equalTo(self.percentView);
-        }];
-        progressButton.layer.cornerRadius = 15.0f;
-    }
-    else {
-        self.percentView.hidden = NO;
-        self.percentView.userInteractionEnabled = YES;
-        _progressLabel.text = [NSString stringWithFormat:@"《%@》%@",[NSString returnNoNullStringWithString:songName],titleDesc];
-    }
-}
-
-- (void)setStatus:(MainToolStatus)status {
-    _status = status;
-    if (status == MainToolStatusTeacher) {
-        self.nodeButton.hidden = YES;
-        self.nodeButton.userInteractionEnabled = NO;
-//        self.accompanyButton.hidden = YES;
-//        self.accompanyButton.userInteractionEnabled = NO;
-        self.shareButton.hidden = YES;
-        self.shareButton.userInteractionEnabled = NO;
-        [self.shareButton mas_updateConstraints:^(MASConstraintMaker *make) {
-            make.left.mas_equalTo(self.mas_left);
-            make.width.mas_equalTo(0);
-        }];
-    }
-    else {
-        
-        self.nodeButton.hidden = NO;
-        self.nodeButton.userInteractionEnabled = YES;
-//        self.accompanyButton.hidden = NO;
-//        self.accompanyButton.userInteractionEnabled = YES;
-        self.shareButton.hidden = NO;
-        self.shareButton.userInteractionEnabled = YES;
-        [self.shareButton mas_updateConstraints:^(MASConstraintMaker *make) {
-            make.left.mas_equalTo(self.mas_left).offset(10);
-            make.width.mas_equalTo(ToolButtonWidth);
-        }];
-    }
-}
-
-- (void)tapEvent:(UIButton *)sender {
-    if ([self.delegate respondsToSelector:@selector(mainToolView:didTapAtTag:)]) {
-        [self.delegate mainToolView:sender didTapAtTag:sender.tag];
-    }
-}
-
-
-- (void)setDefaultButtons {
-    self.buttonImageArray = @[@"up_stage",@"mic_on",@"camero_on",@"musicMode_off",@"playNode_on",@"playAccompany_off"];
-    self.buttonHighlightedImageArray = @[@"down_stage",@"mic_off",@"camero_off",@"musicMode_on",@"playNode_off",@"playAccompany_on"];
-    self.buttonCloseImageArray = @[@"down_stage",@"mic_off",@"camero_off",@"musicMode_on",@"playNode_off",@"playAccompany_on"];
-    for (int i = 0; i < self.buttonImageArray.count; i++) {
-        UIButton *button = [self.buttonArray objectAtIndex:i];
-        button.selected = NO;
-        button.enabled = YES;
-        [button setImage:[UIImage imageNamed:[self.buttonImageArray objectAtIndex:i]] forState:UIControlStateNormal];
-        [button setImage:[UIImage imageNamed:[self.buttonCloseImageArray objectAtIndex:i]]  forState:UIControlStateSelected];
-    }
-}
-
-#pragma mark ==== lazying
-- (UIImageView *)bgView {
-    if (!_bgView) {
-        _bgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"classroom_bottom"]];
-    }
-    return _bgView;
-}
-
-- (UIButton *)micButton {
-    if (!_micButton) {
-        _micButton = [UIButton buttonWithType:UIButtonTypeCustom];
-        _micButton.enabled = YES;
-        _micButton.tag = MainToolButtonTagMic;
-        [_micButton addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _micButton;
-}
-
-- (UIButton *)cameroButton {
-    if (!_cameroButton) {
-        _cameroButton = [UIButton buttonWithType:UIButtonTypeCustom];
-        _cameroButton.enabled = YES;
-        _cameroButton.tag = MainToolButtonTagCamero;
-        [_cameroButton addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _cameroButton;
-}
-
-- (UIButton *)musicModeButton {
-    if (!_musicModeButton) {
-        _musicModeButton = [UIButton buttonWithType:UIButtonTypeCustom];
-        _musicModeButton.enabled = YES;
-        _musicModeButton.tag = MainToolButtonTagMusicMode;
-        [_musicModeButton addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _musicModeButton;
-}
-
-- (UIButton *)nodeButton {
-    if (!_nodeButton) {
-        _nodeButton = [UIButton buttonWithType:UIButtonTypeCustom];
-        _nodeButton.enabled = YES;
-        _nodeButton.tag = MainToolButtonTagNode;
-        [_nodeButton addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _nodeButton;
-}
-
-- (UIButton *)shareButton {
-    if (!_shareButton) {
-        _shareButton = [UIButton buttonWithType:UIButtonTypeCustom];
-        _shareButton.enabled = YES;
-        _shareButton.tag = MainToolButtonTagShare;
-        [_shareButton addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _shareButton;
-}
-
-- (UIButton *)accompanyButton {
-    if (!_accompanyButton) {
-        _accompanyButton = [UIButton buttonWithType:UIButtonTypeCustom];
-        _accompanyButton.enabled = YES;
-        _accompanyButton.tag = MainToolButtonTagAccompany;
-        [_accompanyButton addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _accompanyButton;
-}
-
-- (NSMutableArray *)buttonArray {
-    if (!_buttonArray) {
-        _buttonArray = [[NSMutableArray alloc] init];
-    }
-    return _buttonArray;
-}
-
-- (UIView *)percentView {
-    if (!_percentView) {
-        _percentView = [[UIView alloc] init];
-        _percentView.backgroundColor = HexRGBAlpha(0x2c2c2c, 0.64);
-    }
-    return _percentView;
-}
-
-/*
-// Only override drawRect: if you perform custom drawing.
-// An empty implementation adversely affects performance during animation.
-- (void)drawRect:(CGRect)rect {
-    // Drawing code
-}
-*/
-
-@end

+ 0 - 58
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/TeachTool/TeachToolView.h

@@ -1,58 +0,0 @@
-//
-//  TeachToolView.h
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/11/24.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-typedef NS_ENUM(NSInteger, TeachToolTag) {
-    TeachToolTagWhiteboard,   // 白板
-    TeachToolTagVideo,        // 视频
-    TeachToolTagLibrary,      // 伴奏曲库
-    TeachToolTagAccompany,    // 伴奏操作
-    TeachToolTagNode,         // 节拍器设置
-    TeachToolTagPlay,         // 节拍器播放
-    TeachToolTagCourseware,   // 课件
-};
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class TeachToolView;
-
-@protocol TeachToolViewDelegate <NSObject>
-
-- (void)teachToolView:(UIButton *)button didTapAtTag:(TeachToolTag)tag;
-
-@end
-
-
-@interface TeachToolView : UIView
-
-@property (nonatomic, weak) id <TeachToolViewDelegate> delegate;
-
-@property (nonatomic, strong) UIButton *whiteboardButton;
-
-@property (nonatomic, strong) UIButton *videoButton;
-
-@property (nonatomic, strong) UIButton *nodeSettingButton;
-
-@property (nonatomic, strong) UIButton *coursewareButton;
-
-@property (nonatomic, strong) UIButton *nodePlayButton;
-
-@property (nonatomic, strong) UIButton *toolButton;
-
-// 是否缩小
-@property (nonatomic, assign) BOOL isLessen;
-
-
-- (void)resetDefaultButton;
-
-- (void)hiddenToolViewWithAnimation:(BOOL)needAnimation;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 292
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/TeachTool/TeachToolView.m

@@ -1,292 +0,0 @@
-//
-//  TeachToolView.m
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/11/24.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import "TeachToolView.h"
-#import "NormalAlertView.h"
-
-#define TButtonWidth (50)
-#define TButtonHeight (52)
-#define TButtonSpace (5)
-
-@interface TeachToolView ()
-@property (nonatomic, strong) UIImageView *bgImageView;
-@property (nonatomic, strong) NSMutableArray *buttonArray;
-@property (nonatomic, strong) NSArray *buttonImageArray;
-@property (nonatomic, strong) NSArray *buttonHighlightedImageArray;
-@property (nonatomic, strong) NSArray *buttonCloseImageArray;
-@property (nonatomic, strong) UIView *bgView;
-
-@property (nonatomic, strong) UIImageView *lessenImage;
-@end
-
-
-@implementation TeachToolView
-
-- (instancetype)init {
-    self = [super init];
-    if (self) {
-        self.backgroundColor = [UIColor clearColor];
-        self.layer.cornerRadius = 6;
-        [self.buttonArray addObjectsFromArray:@[self.whiteboardButton, self.videoButton, self.nodeSettingButton, self.nodePlayButton,self.coursewareButton,self.toolButton]];
-        [self addSubViews];
-    }
-    return self;
-}
-
-- (void)addSubViews {
-    [self addSubview:self.bgView];
-    [self.bgView addSubview:self.bgImageView];
-    [self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.bottom.bottom.mas_equalTo(self.bgView);
-        make.right.mas_equalTo(self.bgView.mas_right).offset(-90);
-    }];
-    
-    [self.bgView addSubview:self.whiteboardButton];
-    [self.bgView addSubview:self.videoButton];
-    [self.bgView addSubview:self.nodeSettingButton];
-    [self.bgView addSubview:self.nodePlayButton];
-    [self.bgView addSubview:self.coursewareButton];
-    [self addSubview:self.toolButton];
-    
-    [self setDefaultButtons];
-    // 白板视
-    [self.whiteboardButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.mas_equalTo(self.mas_left).offset(7);
-        make.width.mas_equalTo(TButtonWidth);
-        make.height.mas_equalTo(TButtonHeight);
-        make.centerY.mas_equalTo(self.mas_centerY);
-    }];
-    
-    // 视频
-    [self.videoButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.mas_equalTo(self.whiteboardButton.mas_right).offset(TButtonSpace);
-        make.width.mas_equalTo(TButtonWidth);
-        make.height.mas_equalTo(TButtonHeight);
-        make.centerY.mas_equalTo(self.mas_centerY);
-    }];
-    
-    self.videoButton.selected = YES;
-    
-    // 节拍器设置
-    [self.nodeSettingButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.mas_equalTo(self.videoButton.mas_right).offset(TButtonSpace);
-        make.width.mas_equalTo(TButtonWidth);
-        make.height.mas_equalTo(TButtonHeight);
-        make.centerY.mas_equalTo(self.mas_centerY);
-    }];
-    
-    
-    // 群体节拍器
-    [self.nodePlayButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.mas_equalTo(self.nodeSettingButton.mas_right).offset(TButtonSpace);
-        make.width.mas_equalTo(TButtonWidth);
-        make.height.mas_equalTo(TButtonHeight);
-        make.centerY.mas_equalTo(self.mas_centerY);
-    }];
-    // 课件
-    [self.coursewareButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.mas_equalTo(self.nodePlayButton.mas_right).offset(TButtonSpace);
-        make.width.mas_equalTo(TButtonWidth);
-        make.height.mas_equalTo(TButtonHeight);
-        make.centerY.mas_equalTo(self.mas_centerY);
-    }];
-    
-    
-    
-    // 教学工具
-    [self.toolButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.right.mas_equalTo(self.mas_right);
-        make.width.mas_equalTo(87);
-        make.height.mas_equalTo(34);
-        make.centerY.mas_equalTo(self.mas_centerY);
-    }];
-    
-}
-
-- (void)setDefaultButtons {
-    self.buttonImageArray = @[@"tool_whiteboard",@"tool_video", @"node_setting", @"node_play", @"tool_coursewares",@"tool_funcation"];
-    self.buttonHighlightedImageArray = @[@"tool_whiteboard_selected", @"tool_video_selected", @"node_setting", @"node_stop",@"tool_coursewares", @"tool_funcation"];
-    self.buttonCloseImageArray = @[@"tool_whiteboard_selected",@"tool_video_selected", @"node_setting", @"node_stop", @"tool_coursewares",@"tool_funcation"];
-    for (int i = 0; i < self.buttonImageArray.count; i++) {
-        UIButton *button = [self.buttonArray objectAtIndex:i];
-        button.selected = NO;
-        button.enabled = YES;
-        [button setImage:[UIImage imageNamed:[self.buttonImageArray objectAtIndex:i]] forState:UIControlStateNormal];
-        [button setImage:[UIImage imageNamed:[self.buttonCloseImageArray objectAtIndex:i]]  forState:UIControlStateSelected];
-    }
-}
-
-
-- (void)displayToolView {
-
-    CGFloat width = 400;
-    [UIView animateWithDuration:0.3f animations:^{
-        [self mas_updateConstraints:^(MASConstraintMaker *make) {
-            make.width.mas_equalTo(width);
-        }];
-        self.bgView.hidden = NO;
-        self.bgView.userInteractionEnabled = YES;
-    }];
-}
-
-
-- (void)hiddenToolViewWithAnimation:(BOOL)needAnimation {
-    self.toolButton.selected = NO;
-    if (needAnimation) {
-        [UIView animateWithDuration:1.0f animations:^{
-            [self mas_updateConstraints:^(MASConstraintMaker *make) {
-                make.width.mas_equalTo(87);
-            }];
-        } completion:^(BOOL finished) {
-            self.bgView.hidden = YES;
-            self.bgView.userInteractionEnabled = NO;
-        }];
-    }
-    else {
-        
-        [self mas_updateConstraints:^(MASConstraintMaker *make) {
-            make.width.mas_equalTo(87);
-        }];
-        self.backgroundColor = [UIColor clearColor];
-        self.bgView.hidden = YES;
-        self.bgView.userInteractionEnabled = NO;
-    }
-    
-}
-
-- (void)resetDefaultButton {
-    self.whiteboardButton.selected = NO;
-    self.videoButton.selected = YES;
-    self.nodePlayButton.selected = NO;
-    [self hiddenToolViewWithAnimation:YES];
-}
-
-
-#pragma mark ---- button Event
-- (void)tapEvent:(UIButton *)btn {
-    
-    if(self.delegate && [self.delegate respondsToSelector:@selector(teachToolView:didTapAtTag:)]) {
-        [self.delegate teachToolView:btn didTapAtTag:btn.tag];
-    }
-}
-
-- (void)toolButtonClickAction:(UIButton *)sender {
-    sender.selected = !sender.selected;
-    if (sender.isSelected) {
-        [self displayToolView];
-    }
-    else {
-        [self hiddenToolViewWithAnimation:YES];
-    }
-}
-
-#pragma mark --- lazying
-- (UIButton *)whiteboardButton {
-    if (!_whiteboardButton) {
-        _whiteboardButton = [[UIButton alloc] init];
-        _whiteboardButton.enabled = YES;
-        _whiteboardButton.tag = TeachToolTagWhiteboard;
-        [_whiteboardButton addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _whiteboardButton;
-}
-
-- (UIButton *)videoButton {
-    if (!_videoButton) {
-        _videoButton = [[UIButton alloc] init];
-        _videoButton.enabled = YES;
-        _videoButton.tag = TeachToolTagVideo;
-        [_videoButton addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _videoButton;
-}
-
-- (UIButton *)nodeSettingButton {
-    if (!_nodeSettingButton) {
-        _nodeSettingButton = [[UIButton alloc] init];
-        _nodeSettingButton.enabled = YES;
-        _nodeSettingButton.tag = TeachToolTagNode;
-        [_nodeSettingButton addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _nodeSettingButton;
-}
-
-- (UIButton *)nodePlayButton {
-    if (!_nodePlayButton) {
-        _nodePlayButton = [[UIButton alloc] init];
-        _nodePlayButton.enabled = YES;
-        _nodePlayButton.tag = TeachToolTagPlay;
-        [_nodePlayButton addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _nodePlayButton;
-}
-
-- (UIButton *)coursewareButton {
-    if (!_coursewareButton) {
-        _coursewareButton = [[UIButton alloc] init];
-        _coursewareButton.enabled = YES;
-        _coursewareButton.tag = TeachToolTagCourseware;
-        [_coursewareButton addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _coursewareButton;
-}
-
-- (UIButton *)toolButton {
-    if (!_toolButton) {
-        _toolButton = [[UIButton alloc] init];
-        _toolButton.enabled = YES;
-        [_toolButton addTarget:self action:@selector(toolButtonClickAction:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _toolButton;
-}
-
-- (UIImageView *)bgImageView {
-    if (!_bgImageView) {
-        _bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"teachTool_bg"]];
-    }
-    return _bgImageView;
-}
-
-- (UIView *)bgView {
-    if (!_bgView) {
-        CGFloat width = 400;
-        _bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, 65)];
-        _bgView.backgroundColor = [UIColor clearColor];
-        _bgView.layer.cornerRadius = 22.0f;
-    }
-    return _bgView;
-}
-
-- (NSMutableArray *)buttonArray {
-    if (!_buttonArray) {
-        _buttonArray = [[NSMutableArray alloc] init];
-    }
-    return _buttonArray;
-}
-
-- (void)setIsLessen:(BOOL)isLessen {
-    _isLessen = isLessen;
-    if (isLessen) {
-        [self.coursewareButton setImage:[UIImage imageNamed:@"tool_courseware_lessen"] forState:UIControlStateNormal];
-        [self.coursewareButton setImage:[UIImage imageNamed:@"tool_courseware_lessen"] forState:UIControlStateSelected];
-    }
-    else {
-        [self.coursewareButton setImage:[UIImage imageNamed:@"tool_coursewares"] forState:UIControlStateNormal];
-        [self.coursewareButton setImage:[UIImage imageNamed:@"tool_coursewares"] forState:UIControlStateSelected];
-    }
-}
-
-/*
-// Only override drawRect: if you perform custom drawing.
-// An empty implementation adversely affects performance during animation.
-- (void)drawRect:(CGRect)rect {
-    // Drawing code
-}
-*/
-
-@end

+ 0 - 79
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/TitleView/ClassTitleView.h

@@ -1,79 +0,0 @@
-//
-//  ClassTitleView.h
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/4/21.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-typedef NS_ENUM(NSInteger, ClassTitleViewActionTag) {
-    ClassTitleViewActionTagSwitchLine,
-    ClassTitleViewActionTagSwitchCamera,
-    ClassTitleViewActionTagMic,
-    ClassTitleViewActionTagCamera,
-    ClassTitleViewActionTagMute,
-    ClassTitleViewActionTagSquare,  // 宫格
-    ClassTitleViewActionTagChat,
-    ClassTitleViewActionTagMember,
-    ClassTitleViewActionTagClose,
-    ClassTitleViewActionTagHangup,
-};
-
-typedef NS_ENUM(NSInteger, NetWorkingStatus) {
-    NetWorkingStatus_Good = 1,
-    NetWorkingStatus_Well = 2,
-    NetWorkingStatus_Bad = 3,
-    NetWorkingStatus_Poor = 4,
-};
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class ClassTitleView;
-
-@protocol ClassTitleViewDelegate <NSObject>
-
-- (void)classTitleView:(UIButton *)button didTapAtTag:(ClassTitleViewActionTag)tag;
-
-@end
-
-@interface ClassTitleView : UIView
-
-@property (nonatomic, weak) id<ClassTitleViewDelegate> delegate;
-
-@property (nonatomic, strong) UIImageView *signalImageView;
-
-@property (nonatomic, strong) UIButton *switchLineBtn;
-
-@property (nonatomic, strong) UIButton *switchCameraBtn;
-
-@property (nonatomic, strong) UIButton *micBtn;
-
-@property (nonatomic, strong) UIButton *cameraBtn;
-
-@property (nonatomic, strong) UIButton *muteBtn;
-
-@property (nonatomic, strong) UIButton *chatBtn;
-
-@property (nonatomic, strong) UIButton *squareBtn;
-
-@property (nonatomic, strong) UIButton *memberBtn;
-
-@property (nonatomic, strong) UIButton *closeButton;
-
-@property (nonatomic, strong) UIButton *hangupBtn;
-
-@property (nonatomic, assign) BOOL isDisplay;
-
-@property (nonatomic, assign) NetWorkingStatus netStatus;
-
-- (void)refreshTitleView;
-
-- (void)clearUnreadMessage;
-
-- (void)hiddenView;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 287
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/VideoList/ClassVideoListCell.m

@@ -1,287 +0,0 @@
-//
-//  ClassVideoListCell.m
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/4/24.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import "ClassVideoListCell.h"
-#import "RTCService.h"
-#import "ClassroomService.h"
-#import "LocalRenderManager.h"
-
-@interface ClassVideoListCell ()
-
-@property (nonatomic, strong) UIView *backGroundView;
-@property (nonatomic, strong) UILabel *roleLable;
-@property (nonatomic, strong) UILabel *nameLable;
-@property (nonatomic, strong) UILabel *handUpLabel;
-
-@property (nonatomic, strong) UILabel *WaitLable;
-@property (nonatomic, strong) UILabel *promptLable;
-
-@end
-
-@implementation ClassVideoListCell
-
-- (void)awakeFromNib {
-    [super awakeFromNib];
-    // Initialization code
-}
-
-- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
-{
-    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
-    if (self) {
-        self.selectionStyle = UITableViewCellSelectionStyleNone;
-        self.backgroundColor = [UIColor clearColor];
-        [self addSubViews];
-    }
-    return self;
-}
-
-- (void)addSubViews {
-    [self.contentView addSubview:self.backGroundView];
-    [self.contentView addSubview:self.videoView];
-    [self.contentView addSubview:self.roleLable];
-    [self.contentView addSubview:self.nameLable];
-    [self.contentView addSubview:self.handUpLabel];
-    [self.contentView addSubview:self.WaitLable];
-    [self.contentView addSubview:self.promptLable];
-    
-    self.videoView.frame = CGRectMake(0, 0, self.contentView.width, self.contentView.height);
-    [self.backGroundView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.equalTo(self.contentView.mas_left).offset(0);
-        make.top.equalTo(self.contentView.mas_top).offset(0);
-        make.bottom.equalTo(self.contentView.mas_bottom).offset(-10);
-        make.right.equalTo(self.contentView.mas_right).offset(0);
-    }];
-    
-    [self.WaitLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.centerY.equalTo(self.videoView.mas_centerY);
-        make.centerX.equalTo(self.videoView.mas_centerX);
-        make.height.equalTo(@25);
-        make.width.equalTo(@84);
-    }];
-    [self.promptLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.centerY.equalTo(self.videoView.mas_centerY);
-        make.centerX.equalTo(self.videoView.mas_centerX);
-        make.height.equalTo(@25);
-        make.width.equalTo(@84);
-    }];
-    
-    
-    [self.handUpLabel mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.right.mas_equalTo(self.contentView.mas_right).offset(-5);
-        make.bottom.mas_equalTo(self.contentView.mas_bottom).offset(-20);
-        make.height.mas_equalTo(22);
-        make.width.mas_equalTo(60);
-    }];
-    
-    [self.roleLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.equalTo(self.contentView.mas_left).offset(4);
-        make.top.equalTo(self.contentView.mas_top).offset(4);
-        make.height.equalTo(@18);
-        make.width.equalTo(@24);
-    }];
-    
-    [self.nameLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.equalTo(self.contentView.mas_left).offset(10);
-        make.bottom.equalTo(self.contentView.mas_bottom).offset(-20);
-        make.height.equalTo(@22);
-        make.right.mas_equalTo(self.handUpLabel.mas_left).offset(-5);
-    }];
-}
-- (void)setCellSize:(CGSize)cellSize {
-    _cellSize = cellSize;
-    self.videoView.size = cellSize;
-}
-
-- (void)setModel:(RoomMember *)member showTeacherPrompt:(BOOL)teacherPrompt {
-    [self resetDefaultStyle];
-    if (member == nil) {
-        return;
-    }
-    if (member.userId == nil) {
-        self.nameLable.hidden = YES;
-        self.videoView.hidden = YES;
-        self.roleLable.hidden = YES;
-        self.handUpLabel.hidden = YES;
-        self.promptLable.hidden = YES;
-        self.WaitLable.hidden = NO;
-    }
-    else {
-        if ([member.userId isEqualToString:[ClassroomService sharedService].currentRoom.currentMember.userId]) {
-            self.nameLable.text = @"我";
-            self.roleLable.hidden = NO;
-            if (teacherPrompt) {
-                self.promptLable.text = @"讲师正在授课";
-                self.promptLable.hidden = NO;
-            }
-        }
-        else {
-            self.roleLable.hidden = YES;
-            [self remakeNameLable:member];
-            
-            // 判断是否显示举手按钮
-            self.handUpLabel.hidden = !member.handUpOn;
-        }
-        if ([[ClassroomService sharedService].currentRoom.currentDisplayURI isEqualToString:member.userId]) {
-            self.videoView.hidden = YES;
-        }
-        else {
-            self.videoView.hidden = NO;
-        }
-        if ([[ClassroomService sharedService].currentRoom.shareUserId isEqualToString:member.userId]) {
-            self.promptLable.text = @"演示中";
-            self.promptLable.hidden = NO;
-        }
-        [self renderVideo:member];
-
-    }
-    
-}
-
-- (void)resetDefaultStyle {
-    self.nameLable.text = nil;
-    self.roleLable.hidden = NO;
-    self.nameLable.hidden = NO;
-    self.videoView.hidden = NO;
-    self.handUpLabel.hidden = YES;
-    self.WaitLable.hidden = YES;
-    self.promptLable.hidden = YES;
-    [self cancelVideo];
-}
-
-- (void)renderVideo:(RoomMember *)member {
-    if(![self canRenderVideo:member]) {
-        return;
-    }
-    // 涉及到请求返回比较慢的情况 当前用户已在主屏渲染
-    if ([[ClassroomService sharedService].currentRoom.currentMemberId isEqualToString:member.userId] && [LocalRenderManager shareInstance].hadRenderMainView) {
-        return;
-    }
-    if([[ClassroomService sharedService].currentRoom.currentMemberId isEqualToString:member.userId]) {
-        RoomMember *curMemeber =[ClassroomService sharedService].currentRoom.currentMember;
-        [[RTCService sharedInstance] renderLocalVideoOnView:self.videoView cameraEnable:curMemeber.cameraEnable];
-    }else {
-        [[RTCService sharedInstance] renderRemoteVideoOnView:self.videoView forUser:member.userId];
-    }
-}
-
-
-- (void)cancelVideo {
-    [[RTCService sharedInstance] cancelRenderVideoInView:self.videoView];
-}
-
-- (void)remakeNameLable:(RoomMember *)member {
-    NSString * nameTxt =  member.name.length > 5 ? [NSString stringWithFormat:@"%@...",[member.name substringToIndex:5]] : member.name;
-    self.nameLable.text = nameTxt;
-}
-
-#pragma mark - private method
-//当前的 cell 是否可以渲染视频
-- (BOOL)canRenderVideo:(RoomMember *)member {
-    //主视频区渲染了该用户的视频,则 视频列表 cell 不显示视频
-    //旁观者不显示视频
-    //主视频区蒙版渲染了该用户的视频,则 视频列表 cell 不显示视频
-    Classroom *room = [ClassroomService sharedService].currentRoom;
-    if([room.currentDisplayURI isEqualToString:member.userId] || member.role == RoleAudience || [room.currentMaskUserId isEqualToString:member.userId]) {
-        return NO;
-    }
-    return YES;
-}
-
-- (UIView *)backGroundView {
-    if(!_backGroundView) {
-        _backGroundView = [[UIView alloc] init];
-        _backGroundView.backgroundColor = [UIColor colorWithHexString:@"3D4041" alpha:1];
-        _backGroundView.hidden = NO;
-    }
-    return _backGroundView;
-}
-
-- (UIView *)videoView {
-    if(!_videoView) {
-        _videoView = [[UIView alloc] init];
-        _videoView.backgroundColor = [UIColor colorWithHexString:@"3D4041" alpha:1];
-    }
-    return _videoView;
-}
-- (UILabel *)roleLable {
-    if(!_roleLable) {
-        _roleLable = [[UILabel alloc] init];
-        _roleLable.font = [UIFont systemFontOfSize:10];
-        _roleLable.textAlignment = NSTextAlignmentCenter;
-        _roleLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-        _roleLable.backgroundColor = HexRGB(0xFF5500);
-        _roleLable.text = @"讲师";
-        _roleLable.layer.cornerRadius = 4;
-        _roleLable.layer.masksToBounds = YES;
-    }
-    return _roleLable;
-}
-
-- (UILabel *)nameLable {
-    if(!_nameLable) {
-        _nameLable = [[UILabel alloc] init];
-        _nameLable.font = [UIFont systemFontOfSize:16.0];
-        _nameLable.numberOfLines = 1;
-        _nameLable.textAlignment = NSTextAlignmentLeft;
-        _nameLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-    }
-    return _nameLable;
-}
-
-- (UILabel *)handUpLabel {
-    if (!_handUpLabel) {
-        _handUpLabel = [[UILabel alloc] init];
-        _handUpLabel.font = [UIFont systemFontOfSize:14.0f];
-        _handUpLabel.numberOfLines = 1;
-        _handUpLabel.textAlignment = NSTextAlignmentCenter;
-        _handUpLabel.textColor = [UIColor whiteColor];
-        _handUpLabel.text = @"已举手";
-        _handUpLabel.backgroundColor = HexRGB(0x089E95);
-        _handUpLabel.layer.cornerRadius = 4;
-        _handUpLabel.layer.masksToBounds = YES;
-    }
-    return _handUpLabel;
-}
-
-- (UILabel *)WaitLable {
-    if(!_WaitLable) {
-        _WaitLable = [[UILabel alloc] init];
-        _WaitLable.font = [UIFont systemFontOfSize:9];
-        _WaitLable.numberOfLines = 2;
-        _WaitLable.textAlignment = NSTextAlignmentCenter;
-        _WaitLable.backgroundColor = [UIColor clearColor];
-        _WaitLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-        _WaitLable.text =  @"讲师正在赶来的路上\n请耐心等待";
-        _WaitLable.hidden = YES;
-    }
-    return _WaitLable;
-}
-
-- (UILabel *)promptLable {
-    if(!_promptLable) {
-        _promptLable = [[UILabel alloc] init];
-        _promptLable.font = [UIFont systemFontOfSize:12];
-        _promptLable.numberOfLines = 1;
-        _promptLable.textAlignment = NSTextAlignmentCenter;
-        _promptLable.backgroundColor = [UIColor clearColor];
-        _promptLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-        _promptLable.text =  @"讲师正在授课";
-        _promptLable.hidden = YES;
-    }
-    return _promptLable;
-}
-
-
-- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
-    [super setSelected:selected animated:animated];
-
-    // Configure the view for the selected state
-}
-
-@end

+ 0 - 36
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/View/VideoList/ClassVideoListView.h

@@ -1,36 +0,0 @@
-//
-//  ClassVideoListView.h
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/4/22.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@class ClassVideoListView,RoomMember;
-@protocol ClassVideoListViewDelegate <NSObject>
-
-- (void)videoListView:(ClassVideoListView *_Nullable)view didTap:(RoomMember *_Nullable)member;
-
-@end
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface ClassVideoListView : UIView
-
-@property (nonatomic, assign) BOOL showTeacherPrompt;
-
-@property (nonatomic, strong) NSMutableArray *videoDataSource;
-
-@property (nonatomic, weak) id<ClassVideoListViewDelegate> delegate;
-
-- (void)updateUserVideo:(NSString *)userId;
-
-- (void)reloadVideoList;
-
-- (void)showTeacherPrompt:(BOOL)showTeacherPrompt;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Login/Model/UserInfoManager.m

@@ -45,7 +45,7 @@
     dispatch_main_async_safe(^{
         UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
         
-        if ([vc.presentedViewController isKindOfClass:NSClassFromString(@"NewClassRoomViewController")]) {
+        if ([vc.presentedViewController isKindOfClass:NSClassFromString(@"TXClassroomViewController")]) {
             [self checkTokenEnableCallback:^(BOOL enable) {
                 if (enable) {
                     [[NSNotificationCenter defaultCenter] postNotificationName:@"classroomQuit" object:nil];

+ 0 - 23
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/ChatAreaView.h

@@ -1,23 +0,0 @@
-//
-//  ChatAreaView.h
-//  SealClass
-//
-//  Created by Sin on 2019/2/28.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#import <RongIMLib/RongIMLib.h>
-#import "InputBarControl.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface ChatAreaView : UIView
-
-@property (nonatomic, strong) InputBarControl *inputBarControl;
-
-- (instancetype)initWithFrame:(CGRect)frame conversationType:(RCConversationType)conversationType targetId:(NSString *)targetId;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 277
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/ChatAreaView.m

@@ -1,277 +0,0 @@
-//
-//  ChatAreaView.m
-//  SealClass
-//
-//  Created by Sin on 2019/2/28.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "ChatAreaView.h"
-#import <RongIMLib/RongIMLib.h>
-#import "MessageDataSource.h"
-#import "MessageBaseCell.h"
-#import "MessageCell.h"
-#import "MJRefresh.h"
-#import "MessageHelper.h"
-#import "TimeStampMessage.h"
-#import "TextMessageCell.h"
-#import "TimeStampCell.h"
-#import "TipMessageCell.h"
-#import "MemberChangeMessage.h"
-#define unknownMessageIdentifier @"unknownMessageIdentifier"
-@interface ChatAreaView()<UITableViewDataSource, UITableViewDelegate, UIScrollViewDelegate, InputBarControlDelegate, MessageDataSourceDelegate>
-
-@property (nonatomic, assign) RCConversationType conversationType;
-@property (nonatomic, copy)   NSString *targetId;
-@property (nonatomic, strong) UITableView *messageListView;
-@property (nonatomic, strong) MessageDataSource *dataSource;
-@property (nonatomic, assign) BOOL isLoadingHistoryMessage; ///是否正在加载历史消息
-@end
-@implementation ChatAreaView
-- (instancetype)initWithFrame:(CGRect)frame conversationType:(RCConversationType)conversationType targetId:(NSString *)targetId{
-    self = [super initWithFrame:frame];
-    if (self) {
-        self.backgroundColor = HexRGBAlpha(0x35343e, 0.96);
-        [self addSubview:self.messageListView];
-        [self addSubview:self.inputBarControl];
-        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
-        [tap addTarget:self action:@selector(didTap)];
-        [self addGestureRecognizer:tap];
-        [[MessageHelper sharedInstance] setMaximumContentWidth:frame.size.width];
-        self.dataSource = [[MessageDataSource alloc] initWithTargetId:targetId conversationType:conversationType];
-        self.dataSource.delegate = self;
-        self.conversationType = conversationType;
-        self.targetId = targetId;
-        [self registerCell];
-    }
-    return self;
-}
-
-#pragma mark - MessageDataSourceDelegate
-- (void)lastestMessageLoadCompleted{
-    [self scrollToBottomWithAnimated:NO];
-}
-
-- (void)didInsert:(MessageModel *)model startIndex:(NSInteger)index{
-    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:(long)index inSection:0];
-    [self.messageListView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationNone)];
-    [self scrollToBottomWithAnimated:YES];
-}
-
-- (void)didSendStatusUpdate:(MessageModel *)model index:(NSInteger)index{
-    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:index inSection:0];
-    MessageBaseCell *cell = [self.messageListView cellForRowAtIndexPath:indexPath];
-    if (cell && [cell isKindOfClass:MessageCell.class]) {
-        MessageCell *itemCell = (MessageCell*)cell;
-        [itemCell updateSentStatus];
-    }
-}
-
-- (void)didLoadHistory:(NSArray<MessageModel *> *)models isRemaining:(BOOL)remain{
-    if (models.count == 0) {
-        self.isLoadingHistoryMessage = NO;
-        [self.messageListView.mj_header endRefreshing];
-        return;
-    }
-    NSMutableArray *indexPathes = [[NSMutableArray alloc] initWithCapacity:20];
-    CGFloat height = self.messageListView.contentSize.height;
-    for (int i = 0; i < models.count; i++) {
-        NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:0];
-        MessageModel *msgModel = [self.dataSource objectAtIndex:i];
-        height += [msgModel contentSize].height;
-        [indexPathes addObject:indexPath];
-    }
-    if (indexPathes.count <= 0) {
-        self.isLoadingHistoryMessage = NO;
-        [self.messageListView.mj_header endRefreshing];
-        return;
-    }
-    self.isLoadingHistoryMessage = NO;
-    [self.messageListView.mj_header endRefreshing];
-    if (@available(iOS 11.0, *)) {
-        [UIView setAnimationsEnabled:NO];
-        [self.messageListView performBatchUpdates:^{
-            [self.messageListView insertRowsAtIndexPaths:indexPathes withRowAnimation:(UITableViewRowAnimationNone)];
-        } completion:^(BOOL finished) {
-            [self.messageListView scrollToRowAtIndexPath:indexPathes.lastObject atScrollPosition:UITableViewScrollPositionTop animated:NO];
-             [UIView setAnimationsEnabled:YES];
-        }];
-    } else {
-        [UIView setAnimationsEnabled:NO];
-        [self.messageListView insertRowsAtIndexPaths:indexPathes withRowAnimation:(UITableViewRowAnimationNone)];
-        [self.messageListView scrollToRowAtIndexPath:indexPathes.lastObject atScrollPosition:UITableViewScrollPositionTop animated:NO];
-        [UIView setAnimationsEnabled:YES];
-    }
-    
-}
-
-- (void)didRemoved:(MessageModel *)model atIndex:(NSInteger)index{
-    [UIView setAnimationsEnabled:NO];
-    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
-    [self.messageListView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationNone)];
-    [UIView setAnimationsEnabled:YES];
-}
-
-- (void)forceReloadData{
-    [self.messageListView reloadData];
-}
-
-
-#pragma mark - InputBarControlDelegate
-- (void)onInputBarControlContentSizeChanged:(CGRect)frame withAnimationDuration:(CGFloat)duration andAnimationCurve:(UIViewAnimationCurve)curve{
-    [UIView animateWithDuration:0.2 animations:^{
-        [UIView setAnimationCurve:curve];
-        CGRect rect = self.messageListView.frame;
-        CGFloat space = CGRectGetMaxY(rect)-CGRectGetMinY(frame);
-        rect.size.height -=space;
-        self.messageListView.frame = rect;
-        [UIView commitAnimations];
-    }];
-    [self scrollToBottomWithAnimated:YES];
-}
-
-- (void)onTouchSendButton:(NSString *)text{
-    RCTextMessage *textMsg = [RCTextMessage messageWithContent:text];
-    [[MessageHelper sharedInstance] sendMessage:textMsg pushContent:nil pushData:nil
-                                      toTargetId:self.targetId conversationType:self.conversationType];
-    [self.inputBarControl clearInputView];
-}
-
-#pragma mark - UITableViewDataSource & UITableViewDelegate
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
-    return self.dataSource.count;
-}
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
-    MessageModel *model = [self.dataSource objectAtIndex:indexPath.row];
-    NSString *identifier = model.message.objectName?model.message.objectName:unknownMessageIdentifier;
-    MessageBaseCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
-    if(!cell){
-        cell = [[MessageBaseCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:model.message.objectName];
-    }
-    if ([[[MessageHelper sharedInstance] getAllSupportMessage] containsObject:model.message.objectName]) {
-        [cell setDataModel:model];
-    }else{
-        //对于目前不支持的消息处理:删除所有子视图,表现为不展示
-        [cell.baseContainerView removeFromSuperview];
-    }
-    return cell;
-}
-
-- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
-    MessageModel *model = [self.dataSource objectAtIndex:indexPath.row];
-    if ([[[MessageHelper sharedInstance] getAllSupportMessage] containsObject:model.message.objectName]) {
-        CGFloat topAndBottomSpace = 12;
-        if ([model.message.content isKindOfClass:[TimeStampMessage class]]) {
-            return model.contentSize.height+16;
-        }else if ([model.message.content isKindOfClass:[RCTextMessage class]]){
-            CGFloat userNameHeight = 16;
-            CGFloat userNameAndContentSpace = 6;
-            return model.contentSize.height+topAndBottomSpace+userNameHeight+userNameAndContentSpace;
-        }else{
-            return model.contentSize.height+topAndBottomSpace;
-        }
-    }else{
-        //对于目前不支持的消息,高度为 0,表现为不展示
-        return 0;
-    }
-    
-}
-
-#pragma mark - UIScrollViewDelegate
-- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
-    if (scrollView.contentOffset.y <= 15 && !self.isLoadingHistoryMessage){
-        [self.messageListView.mj_header beginRefreshing];
-    }
-    [self.inputBarControl setInputBarStatus:(InputBarControlStatusDefault)];
-}
-
-- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
-    NSIndexPath *firstIndexPath = [NSIndexPath indexPathForItem:0 inSection:0];
-    [self.messageListView scrollToRowAtIndexPath:firstIndexPath atScrollPosition:(UITableViewScrollPositionTop) animated:YES];
-    return NO;
-}
-
-#pragma mark - helper
-- (void)scrollToBottomWithAnimated:(BOOL)animated {
-    if (self.dataSource.count > 0) {
-        if ([self.messageListView numberOfRowsInSection:0] >= self.dataSource.count -1) {
-            NSUInteger lastIndex = self.dataSource.count - 1;
-            NSIndexPath *toIndexPath = [NSIndexPath indexPathForItem:lastIndex inSection:0];
-            [self.messageListView  scrollToRowAtIndexPath:toIndexPath atScrollPosition:(UITableViewScrollPositionBottom) animated:animated];
-        }
-    }
-}
-
-#pragma mark - Target action
-- (void)didTap{
-    [self.inputBarControl setInputBarStatus:InputBarControlStatusDefault];
-}
-
-- (void)loadHistoryData{
-    [self.dataSource fetchHistoryMessages];
-}
-
-- (void)registerCell{
-    [self.messageListView registerClass:[MessageBaseCell class] forCellReuseIdentifier:unknownMessageIdentifier];
-    [self.messageListView registerClass:[TextMessageCell class] forCellReuseIdentifier:[RCTextMessage getObjectName]];
-    [self.messageListView registerClass:[TimeStampCell class] forCellReuseIdentifier:[TimeStampMessage getObjectName]];
-    [self.messageListView registerClass:[TipMessageCell class] forCellReuseIdentifier:[MemberChangeMessage getObjectName]];
-    [self.messageListView registerClass:[TipMessageCell class] forCellReuseIdentifier:[RCInformationNotificationMessage getObjectName]];
-}
-
-#pragma mark - 键盘弹起,表情按钮超出父视图,无法点击
-- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
-    UIView *view = [super hitTest:point withEvent:event];
-    if (view == nil) {
-        for (UIView *subView in self.subviews) {
-            CGPoint tp = [subView convertPoint:point fromView:self];
-            if (CGRectContainsPoint(subView.bounds, tp)) {
-                view = subView;
-            }
-        }
-    }
-    return view;
-}
-
-- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
-    CGPoint tp = [self.inputBarControl convertPoint:point fromView:self];
-    //if内的条件应该为,当触摸点point超出蓝色部分,但在黄色部分时
-    if (CGRectContainsPoint(self.inputBarControl.bounds, tp)) {
-        return YES;
-    }
-    return NO;
-}
-
-#pragma mark - Getters and setters
-- (UITableView *)messageListView{
-    if (!_messageListView) {
-        _messageListView = [[UITableView alloc] initWithFrame:CGRectMake(0,0, self.frame.size.width, self.frame.size.height-HeighInputBar) style:(UITableViewStylePlain)];
-        [_messageListView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
-        _messageListView.estimatedRowHeight =0;
-        _messageListView.estimatedSectionHeaderHeight =0;
-        _messageListView.estimatedSectionFooterHeight =0;
-        if (@available(iOS 11.0, *)) {
-            _messageListView.insetsContentViewsToSafeArea = NO;
-        }
-        _messageListView.dataSource = self;
-        _messageListView.delegate = self;
-        _messageListView.backgroundColor = [UIColor clearColor];
-        MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadHistoryData)];
-        header.lastUpdatedTimeLabel.hidden = YES;
-        header.stateLabel.hidden = YES;
-        header.arrowView.hidden = YES;
-        self.messageListView.mj_header = header;
-    }
-    return _messageListView;
-}
-
-- (InputBarControl *)inputBarControl{
-    if (!_inputBarControl) {
-        _inputBarControl = [[InputBarControl alloc] initWithStatus:InputBarControlStatusDefault];
-        _inputBarControl.frame = CGRectMake(0,CGRectGetMaxY(self.messageListView.frame), self.frame.size.width, HeighInputBar);
-        _inputBarControl.delegate = self;
-    }
-    return _inputBarControl;
-}
-@end

+ 0 - 19
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/Message/TimeStampMessage.h

@@ -1,19 +0,0 @@
-//
-//  RCTimeStampMessage.h
-//  RongIMKit
-//
-//  Created by zhaobingdong on 2018/10/12.
-//  Copyright © 2018年 RongCloud. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-#define TimeStampMessageIdentifier @"SC:TMSMsg"
-
-@interface TimeStampMessage : RCMessageContent
-
-- (instancetype)initWithTime:(NSTimeInterval)time;
-
-@property (nonatomic, assign, readonly) NSTimeInterval timestamp;
-
-@property (nonatomic, copy) NSString *timeText;
-@end

+ 0 - 32
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/Message/TimeStampMessage.m

@@ -1,32 +0,0 @@
-//
-//  RCTimeStampMessage.m
-//  RongIMKit
-//
-//  Created by zhaobingdong on 2018/10/12.
-//  Copyright © 2018年 RongCloud. All rights reserved.
-//
-
-#import "TimeStampMessage.h"
-
-@interface TimeStampMessage ()
-
-@property(nonatomic, assign) NSTimeInterval timestamp;
-@end
-
-@implementation TimeStampMessage
-
-- (instancetype)initWithTime:(NSTimeInterval)time {
-    if (self = [super init]) {
-        self.timestamp = time;
-    }
-    return self;
-}
-
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-
-+ (NSString *)getObjectName {
-    return TimeStampMessageIdentifier;
-}
-@end

+ 0 - 32
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/MessageBaseCell.h

@@ -1,32 +0,0 @@
-//
-//  MessageBaseCell.h
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#import "Masonry.h"
-#import "MessageModel.h"
-NS_ASSUME_NONNULL_BEGIN
-@interface MessageBaseCell : UITableViewCell
-
-@property(nonatomic, strong) MessageModel *model;
-
-@property(nonatomic, strong) UIView *baseContainerView;
-
-/**
- 设置数据模型
- 
- @param model 数据模型
- */
-- (void)setDataModel:(MessageModel *)model;
-
-/**
- 加载子视图
- */
-- (void)loadSubView;
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 44
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/MessageBaseCell.m

@@ -1,44 +0,0 @@
-//
-//  MessageBaseCell.m
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "MessageBaseCell.h"
-
-@implementation MessageBaseCell
-- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
-    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
-        self.selectionStyle = UITableViewCellSelectionStyleNone;
-        self.contentView.backgroundColor = [UIColor clearColor];
-        self.backgroundColor = [UIColor clearColor];
-        [self loadSubView];
-    }
-    return self;
-}
-
-- (void)loadSubView {
-    [self.contentView addSubview:self.baseContainerView];
-}
-
-#pragma mark - Api
-- (void)setDataModel:(MessageModel *)model{
-    self.model = model;
-    [self.baseContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.contentView).offset(0);
-        make.bottom.equalTo(self.contentView).offset(0);
-        make.right.equalTo(self.contentView).offset(0);
-        make.left.equalTo(self.contentView).offset(0);
-    }];
-}
-
-#pragma mark - Getters & setters
-- (UIView *)baseContainerView {
-    if (!_baseContainerView) {
-        _baseContainerView = [[UIView alloc] initWithFrame:self.contentView.bounds];
-    }
-    return _baseContainerView;
-}
-@end

+ 0 - 18
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/MessageCell.h

@@ -1,18 +0,0 @@
-//
-//  MessageCell.h
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "MessageBaseCell.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface MessageCell : MessageBaseCell
-@property(nonatomic, strong) UIView *messageContentView;
-- (void)updateSentStatus;
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 216
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/MessageCell.m

@@ -1,216 +0,0 @@
-//
-//  MessageCell.m
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "MessageCell.h"
-#import "Masonry.h"
-
-#import "ClassroomService.h"
-@interface MessageCell()
-@property (nonatomic, strong) UIImageView *headerImage;
-@property(nonatomic, strong) UILabel *nameLabel;
-@property (nonatomic, strong) UIView *sendStatusContentView;
-@property (nonatomic, strong) UIActivityIndicatorView *sendIndicatorView;
-@property (nonatomic, strong) UIButton *sendFailView;
-@end
-@implementation MessageCell
-#pragma mark - Super Api
-- (void)loadSubView{
-    [super loadSubView];
-    [self.baseContainerView addSubview:self.headerImage];
-    [self.baseContainerView addSubview:self.nameLabel];
-    [self.baseContainerView addSubview:self.messageContentView];
-    [self.baseContainerView addSubview:self.sendStatusContentView];
-}
-
-- (void)setDataModel:(MessageModel *)model {
-    [super setDataModel:model];
-    [self setOrUpdateLayout];
-    [self setDataInView];
-    [self updateSentStatus];
-}
-
-#pragma mark - Api
-- (void)updateSentStatus {
-    switch (self.model.message.sentStatus) {
-        case SentStatus_SENDING:
-            [self showSendIndicatorView:YES];
-            break;
-        case SentStatus_FAILED:
-            [self showSendIndicatorView:NO];
-            [self showSendFailView];
-            break;
-        case SentStatus_SENT:
-            [self showSendIndicatorView:NO];
-            [self hidenSendFailView];
-            break;
-        default:
-            break;
-    }
-    NSLog(@"rcim updateSentStatus %@",@(self.model.message.sentStatus));
-}
-
-#pragma mark - Helper
-- (void)setDataInView{
-    RoomMember *member = [[ClassroomService sharedService].currentRoom getMember:self.model.message.senderUserId];
-    
-    if(member.name.length > 0){
-        self.nameLabel.text = member.name;
-    }else{
-        if (self.model.message.content.senderUserInfo.name.length > 0) {
-            self.nameLabel.text = self.model.message.content.senderUserInfo.name;
-        }else{
-            self.nameLabel.text = self.model.message.senderUserId;
-        }
-    }
-    if (![NSString isEmptyString:member.headUrl]) {
-        [self.headerImage sd_setImageWithURL:[NSURL URLWithString:[member.headUrl getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USER_LOGO_RECTANGLE]];
-    }
-    else {
-        NSString *avatal = self.model.message.content.senderUserInfo.portraitUri;
-        [self.headerImage sd_setImageWithURL:[NSURL URLWithString:[avatal getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USER_LOGO_RECTANGLE]];
-    }
-    if (!member) {
-        member = [[RoomMember alloc] init];
-        member.headUrl = self.model.message.content.senderUserInfo.portraitUri;
-    }
-    member.name = self.nameLabel.text;
-}
-
-- (void)showSendIndicatorView:(BOOL)show{
-    [self.sendIndicatorView removeFromSuperview];
-    [self.sendIndicatorView stopAnimating];
-    if (show) {
-        [self.sendStatusContentView addSubview:self.sendIndicatorView];
-        [self.sendIndicatorView startAnimating];
-    }
-}
-
-- (void)showSendFailView{
-    [self.sendStatusContentView addSubview:self.sendFailView];
-}
-
-- (void)hidenSendFailView{
-   [self.sendFailView removeFromSuperview];
-}
-
-- (void)setOrUpdateLayout{
-    if (self.model.message.messageDirection == MessageDirection_RECEIVE) {
-        self.messageContentView.backgroundColor = HexRGB(0xffffff);
-        self.nameLabel.textAlignment = NSTextAlignmentLeft;
-        [self.headerImage mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.top.equalTo(self.baseContainerView).offset(6);
-            make.left.equalTo(self.baseContainerView).offset(10);
-            make.height.width.offset(40);
-        }];
-        
-        [self.nameLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.top.equalTo(self.headerImage.mas_top).offset(0);
-            make.left.equalTo(self.headerImage.mas_right).offset(10);
-            make.height.offset(16);
-            make.width.offset(200);
-        }];
-
-        [self.messageContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.top.equalTo(self.nameLabel.mas_bottom).offset(6);
-            make.bottom.equalTo(self.baseContainerView.mas_bottom).offset(-6);
-            make.left.equalTo(self.headerImage.mas_right).offset(10);
-            make.width.offset(self.model.contentSize.width);
-        }];
-        
-        [self.sendStatusContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.top.equalTo(self.nameLabel.mas_bottom).offset(6);
-            make.bottom.equalTo(self.baseContainerView.mas_bottom).offset(-6);
-            make.left.equalTo(self.headerImage.mas_right).offset(10);
-            make.width.offset(0);
-        }];
-    }else{
-        self.messageContentView.backgroundColor = THEMECOLOR;
-        [self.headerImage mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.top.equalTo(self.baseContainerView).offset(6);
-            make.right.equalTo(self.baseContainerView).offset(-10);
-            make.height.width.offset(40);
-        }];
-        
-        [self.nameLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.top.equalTo(self.headerImage.mas_top).offset(0);
-            make.right.equalTo(self.headerImage.mas_left).offset(-10);
-            make.height.offset(16);
-            make.width.offset(200);
-        }];
-        self.nameLabel.textAlignment = NSTextAlignmentRight;
-        
-        [self.messageContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.top.equalTo(self.nameLabel.mas_bottom).offset(6);
-            make.bottom.equalTo(self.baseContainerView.mas_bottom).offset(-6);
-            make.right.equalTo(self.headerImage.mas_left).offset(-10);
-            make.width.offset(self.model.contentSize.width);
-        }];
-        
-        [self.sendStatusContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.centerY.equalTo(self.messageContentView);
-            make.right.equalTo(self.messageContentView.mas_left).offset(-10);
-            make.width.height.offset(25);
-        }];
-    }
-}
-
-#pragma mark - Getters & setters
-- (UIView *)messageContentView{
-    if (!_messageContentView) {
-        _messageContentView = [[UIView alloc] init];
-        _messageContentView.backgroundColor = HexRGB(0xffffff);
-        _messageContentView.layer.masksToBounds = YES;
-        _messageContentView.layer.cornerRadius = 4;
-        
-    }
-    return _messageContentView;
-}
-
-- (UIImageView *)headerImage {
-    if (!_headerImage) {
-        _headerImage = [[UIImageView alloc] init];
-        _headerImage.layer.masksToBounds = YES;
-        _headerImage.contentMode = UIViewContentModeScaleAspectFill;
-        _headerImage.layer.cornerRadius = 6;
-    }
-    return _headerImage;
-}
-
-
-- (UILabel *)nameLabel{
-    if (!_nameLabel) {
-        _nameLabel = [[UILabel alloc] init];
-        _nameLabel.font = [UIFont systemFontOfSize:12];
-        _nameLabel.textColor = HexRGB(0x737373);
-    }
-    return _nameLabel;
-}
-
-- (UIView *)sendStatusContentView{
-    if (!_sendStatusContentView) {
-        _sendStatusContentView = [[UIView alloc] init];
-    }
-    return _sendStatusContentView;
-}
-
-- (UIActivityIndicatorView *)sendIndicatorView{
-    if (!_sendIndicatorView) {
-        _sendIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
-        _sendIndicatorView.frame = CGRectMake(0, 0, 25, 25);
-    }
-    return _sendIndicatorView;
-}
-
-- (UIButton *)sendFailView{
-    if (!_sendFailView) {
-        _sendFailView = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
-        [_sendFailView setImage:[UIImage imageNamed:@"sendMsg_failed_tip"] forState:UIControlStateNormal];
-    }
-    return _sendFailView;
-}
-@end

+ 0 - 21
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/TextMessageCell.h

@@ -1,21 +0,0 @@
-//
-//  TextMessageCell.h
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "MessageCell.h"
-
-#define TextMessage_Font_Size (14)
-
-NS_ASSUME_NONNULL_BEGIN
-
-
-
-@interface TextMessageCell : MessageCell
-@property (nonatomic, strong) UILabel *contentLabel;
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 43
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/TextMessageCell.m

@@ -1,43 +0,0 @@
-//
-//  TextMessageCell.m
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "TextMessageCell.h"
-#import "Masonry.h"
-@implementation TextMessageCell
-- (void)loadSubView{
-    [super loadSubView];
-    [self.messageContentView addSubview:self.contentLabel];
-}
-
-- (void)setDataModel:(MessageModel *)model{
-    [super setDataModel:model];
-    RCTextMessage *message = (RCTextMessage *)(model.message.content);
-    self.contentLabel.text = message.content;
-    [self.contentLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.messageContentView).offset(8);
-        make.bottom.equalTo(self.messageContentView).offset(-8);
-        make.right.equalTo(self.messageContentView).offset(-8);
-        make.left.equalTo(self.messageContentView).offset(8);
-    }];
-    if (self.model.message.messageDirection == MessageDirection_RECEIVE) {
-        self.contentLabel.textColor = HexRGB(0x4a4a4a);
-    }
-    else {
-        self.contentLabel.textColor = HexRGB(0xffffff);
-    }
-}
-
-- (UILabel *)contentLabel{
-    if (!_contentLabel) {
-        _contentLabel = [[UILabel alloc] init];
-        _contentLabel.font = [UIFont systemFontOfSize:TextMessage_Font_Size];
-        _contentLabel.numberOfLines = 0;
-    }
-    return _contentLabel;
-}
-@end

+ 0 - 17
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/TimeStampCell.h

@@ -1,17 +0,0 @@
-//
-//  TimeStampCell.h
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "MessageBaseCell.h"
-
-NS_ASSUME_NONNULL_BEGIN
-#define TimeTextFont 12
-@interface TimeStampCell : MessageBaseCell
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 53
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/TimeStampCell.m

@@ -1,53 +0,0 @@
-//
-//  TimeStampCell.m
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "TimeStampCell.h"
-#import "TimeStampMessage.h"
-@interface TimeStampCell ()
-@property (nonatomic, strong) UILabel *infoLabel;
-
-@end
-@implementation TimeStampCell
-#pragma mark - Super Api
--(void)loadSubView{
-    [super loadSubView];
-    [self.baseContainerView addSubview:self.infoLabel];
-}
-
-- (void)setModel:(MessageModel *)model{
-    [super setModel:model];
-    [self setDataInView];
-    [self.infoLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.baseContainerView).offset(10);
-        make.width.offset(model.contentSize.width);
-        make.height.offset(model.contentSize.height);
-        make.centerX.equalTo(self.baseContainerView);
-    }];
-}
-
-#pragma mark - helper
-- (void)setDataInView{
-    TimeStampMessage *timeMsg = (TimeStampMessage *)(self.model.message.content);
-    self.infoLabel.text = timeMsg.timeText;
-}
-#pragma mark - Getters and setters
-- (UILabel *)infoLabel{
-    if (!_infoLabel) {
-        _infoLabel = [[UILabel alloc] init];
-        _infoLabel.font = [UIFont systemFontOfSize:TimeTextFont];
-        _infoLabel.textColor = [UIColor whiteColor];
-        _infoLabel.numberOfLines = 0;
-        _infoLabel.lineBreakMode = NSLineBreakByTruncatingTail;
-        _infoLabel.textAlignment = NSTextAlignmentCenter;
-        _infoLabel.layer.masksToBounds = YES;
-        _infoLabel.layer.cornerRadius = 4.f;
-        _infoLabel.backgroundColor = [UIColor clearColor];
-    }
-    return _infoLabel;
-}
-@end

+ 0 - 18
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/TipMessageCell.h

@@ -1,18 +0,0 @@
-//
-//  RoleUpdateMessageCell.h
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/13.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "MessageBaseCell.h"
-
-NS_ASSUME_NONNULL_BEGIN
-#define InfoTextFont 12
-
-@interface TipMessageCell : MessageBaseCell
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 50
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageCell/TipMessageCell.m

@@ -1,50 +0,0 @@
-//
-//  RoleUpdateMessageCell.m
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/13.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "TipMessageCell.h"
-#import "MessageHelper.h"
-@interface TipMessageCell ()
-@property (nonatomic, strong) UILabel *infoLabel;
-@end
-@implementation TipMessageCell
-#pragma mark - Super Api
--(void)loadSubView{
-    [super loadSubView];
-    [self.baseContainerView addSubview:self.infoLabel];
-}
-
-- (void)setModel:(MessageModel *)model{
-    [super setModel:model];
-    [self setDataInView];
-    [self.infoLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.baseContainerView).offset(6);
-        make.width.offset(model.contentSize.width);
-        make.height.offset(model.contentSize.height);
-        make.centerX.equalTo(self.baseContainerView);
-    }];
-}
-
-#pragma mark - helper
-- (void)setDataInView{
-    self.infoLabel.text = [[MessageHelper sharedInstance] formatMessage:self.model.message.content];
-}
-#pragma mark - Getters and setters
-- (UILabel *)infoLabel{
-    if (!_infoLabel) {
-        _infoLabel = [[UILabel alloc] init];
-        _infoLabel.font = [UIFont systemFontOfSize:InfoTextFont];
-        _infoLabel.textColor = [UIColor whiteColor];
-        _infoLabel.numberOfLines = 0;
-        _infoLabel.textAlignment = NSTextAlignmentCenter;
-        _infoLabel.layer.masksToBounds = YES;
-        _infoLabel.layer.cornerRadius = 4.f;
-        _infoLabel.backgroundColor = [UIColor clearColor];
-    }
-    return _infoLabel;
-}
-@end

+ 0 - 77
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageDataSource.h

@@ -1,77 +0,0 @@
-//
-//  MessageDataSource.h
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/5.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <RongIMLib/RongIMLib.h>
-#import "MessageModel.h"
-#import "KSIMService.h"
-@protocol MessageDataSourceDelegate;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface MessageDataSource : NSObject <KSIMReceiveMessageDelegate>
-
-@property(nonatomic, assign, readonly) NSUInteger count;
-
-@property(nonatomic, weak) id<MessageDataSourceDelegate> delegate;
-
-- (instancetype)initWithTargetId:(NSString *)targetId conversationType:(RCConversationType)type;
-
-- (MessageModel *)objectAtIndex:(NSUInteger)index;
-
-- (void)fetchHistoryMessages;
-
-@end
-
-@protocol MessageDataSourceDelegate <NSObject>
-
-/**
- 最新消息加载完成时调用
- */
-- (void)lastestMessageLoadCompleted;
-
-/**
- 收到消息,或者发送消息时调用
- 
- @param model model
- @param index 插入数据的起始索引
- */
-- (void)didInsert:(MessageModel *)model startIndex:(NSInteger)index;
-
-/**
- 消息发送状态变更时调用
- 
- @param model 消息模型
- @param index 索引
- */
-- (void)didSendStatusUpdate:(MessageModel *)model index:(NSInteger)index;
-
-/**
- 历史消息载入完成是调用
- 
- @param models 消息模型数组
- @param remain 是否还有历史消息
- */
-- (void)didLoadHistory:(NSArray<MessageModel *> *)models isRemaining:(BOOL)remain;
-
-/**
- 移除 model
- 
- @param model 消息模型数组
- @param index 索引
- */
-- (void)didRemoved:(MessageModel *)model atIndex:(NSInteger)index;
-
-
-/**
- UI 需要 reloadData 是调用
- */
-- (void)forceReloadData;
-
-@end
-NS_ASSUME_NONNULL_END

+ 0 - 377
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageDataSource.m

@@ -1,377 +0,0 @@
-//
-//  MessageDataSource.m
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/5.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "MessageDataSource.h"
-#import "TimeStampMessage.h"
-#import "MessageHelper.h"
-#import "ClassroomService.h"
-
-const NSUInteger numOfMessages = 20;
-@interface MessageDataSource () <MessageHelperDelegate>
-@property (nonatomic, strong) dispatch_queue_t storeQueue;
-@property (nonatomic, strong) NSMutableArray <MessageModel *> *dataSource;
-@property (nonatomic, assign) RCConversationType conversationType;
-@property (nonatomic, assign) long long earliestMessageSendTime; /// 当前sotre中最早的发送时间
-@property (nonatomic, strong) NSMutableDictionary <NSNumber *,NSNumber *> *sendingCache;
-@property (nonatomic, copy) NSString *targetId;
-@end
-
-@implementation MessageDataSource
-#pragma mark - Life cycle
-- (instancetype)initWithTargetId:(NSString *)targetId
-                conversationType:(RCConversationType)type {
-    if (self = [super init]) {
-        [KSIMService sharedService].ksReceiveMessageDelegate = self;
-        self.targetId = targetId;
-        self.conversationType = type;
-        [self fetchLatestMessages];
-        [MessageHelper sharedInstance].delegate = self;
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(roleDidChange:) name:RoleDidChangeNotification object:nil];
-    }
-    return self;
-}
-
-- (void)dealloc{
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-#pragma mark - Api
-- (NSUInteger)count {
-    return self.dataSource.count;
-}
-
-- (MessageModel *)objectAtIndex:(NSUInteger)index{
-    MessageModel *model = self.dataSource[index];
-    return model;
-}
-
-- (void)fetchHistoryMessages {
-    NSAssert([[NSThread currentThread] isMainThread],
-             @"%@ is not invoked by the main thread.",
-             NSStringFromSelector(_cmd));
-    NSMutableArray *totalArray = [[NSMutableArray alloc] initWithCapacity:20];
-    NSLog(@"rcim getHistoryMessages"
-          @"earliestMessageSendTime %@",
-          @(self.earliestMessageSendTime));
-    NSArray<RCMessage *> *localMessages= [IMClient getHistoryMessages:self.conversationType targetId:self.targetId objectNames:[[MessageHelper sharedInstance] getAllSupportMessage] sentTime:self.earliestMessageSendTime isForward:YES count:numOfMessages];
-    localMessages = [localMessages.reverseObjectEnumerator allObjects];
-    
-    void (^insertHistoryMessageBlock)(NSArray<RCMessage *> *, BOOL) =
-    ^(NSArray<RCMessage *> *messages,BOOL isRemaining) {
-        NSLog(@"rcim insertHistorymesssages %@"
-              @"count %@, isRemaining %@",
-              messages,@(messages.count),@(isRemaining));
-        messages = [self insertTimeMessage:messages];
-        dispatch_async(self.storeQueue, ^{
-            __block NSArray *array = [self messageModels:messages];
-            dispatch_main_async_safe(^{
-                NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, array.count)];
-                if (array != nil) {
-                    [self.dataSource insertObjects:array atIndexes:indexSet];
-                    [self.delegate didLoadHistory:array isRemaining:isRemaining];
-                }
-            });
-        });
-    };
-    if (localMessages.count < numOfMessages) {
-        NSUInteger msgCount = numOfMessages - localMessages.count;
-        if (localMessages.count > 0) {
-            [totalArray addObjectsFromArray:localMessages];
-        }
-        void (^success)(NSArray *, BOOL) = ^(NSArray *messages, BOOL isRemaining) {
-            NSArray<RCMessage *> *remoteMessage = [messages.reverseObjectEnumerator allObjects];
-            [totalArray addObjectsFromArray:remoteMessage];
-            insertHistoryMessageBlock([totalArray copy], isRemaining);
-        };
-        void (^error)(RCErrorCode) = ^(RCErrorCode status) {
-            BOOL isRemain = status == MSG_ROAMING_SERVICE_UNAVAILABLE ? NO : YES;
-            insertHistoryMessageBlock(totalArray, isRemain);
-        };
-        
-        [IMClient getRemoteHistoryMessages:self.conversationType
-                                  targetId:self.targetId
-                                recordTime:self.earliestMessageSendTime
-                                     count:(int)msgCount
-                                   success:success
-                                     error:error];
-        return;
-    }
-    [totalArray addObjectsFromArray:localMessages];
-    insertHistoryMessageBlock([totalArray copy], YES);
-}
-
-#pragma mark - IMReceiveMessageDelegate
-- (void)onReceiveMessage:(RCMessage *)message left:(int)nLeft object:(id)object {
-    NSArray *supportMessages = [[MessageHelper sharedInstance] getAllSupportMessage];
-    if (![self isCurrentConversation:message] && ![self isPersistentMessage:message] && ![supportMessages containsObject:message.objectName]) {
-        return;
-    }
-    dispatch_async(self.storeQueue, ^{
-        MessageModel *model = [self messageModel:message];
-        if (!model) {
-            return;
-        }
-        dispatch_main_async_safe(^{
-            [self insertNewMessageTime:message];
-            [self.dataSource addObject:model];
-            NSUInteger index = self.dataSource.count - 1;
-            [self.delegate didInsert:model startIndex:index];
-        });
-    });
-}
-
-#pragma mark - MessageHelperDelegate
-- (void)willSendMessage:(RCMessage *)message {
-    if (![self isCurrentConversation:message]) {
-        return;
-    }
-    dispatch_async(self.storeQueue, ^{
-        message.sentStatus = SentStatus_SENDING;
-        MessageModel *model = [self messageModel:message];
-        if (!model) {
-            return;
-        }
-        dispatch_main_async_safe(^{
-            [self insertNewMessageTime:message];
-            [self.dataSource addObject:model];
-            NSUInteger index = self.dataSource.count - 1;
-            self.sendingCache[@(message.messageId)] = @(index);
-            [self.delegate didInsert:model startIndex:index];
-            [self.delegate didSendStatusUpdate:model index:index];
-        });
-    });
-}
-
-- (void)onSendMessage:(RCMessage *)message didCompleteWithError:(nullable NSError *)error {
-    if (![self isCurrentConversation:message]) {
-        return;
-    }
-    dispatch_main_async_safe(^{
-        NSNumber *indexNumber =  self.sendingCache[@(message.messageId)];
-        if (indexNumber) {
-            NSInteger index = [indexNumber integerValue];
-            MessageModel *model = [self.dataSource objectAtIndex:index];
-            model.message.sentStatus = SentStatus_SENT;
-            // dispatch_async(dispatch_get_main_queue(), ^{
-            //NSIndexSet *set = [NSIndexSet indexSetWithIndex:index];
-            [self.delegate didSendStatusUpdate:model index:index];
-            //});
-            [self.sendingCache removeObjectForKey:@(message.messageId)];
-        } else {
-            NSUInteger count = self.dataSource.count;
-            NSInteger index = NSNotFound;
-            for (NSInteger i = count - 1; i >= 0; i--) {
-                MessageModel *model = self.dataSource[i];
-                if (model.message.messageId == message.messageId) {
-                    index = i;
-                    break;
-                }
-            }
-            if (index != NSNotFound) {
-                MessageModel *model = [self.dataSource objectAtIndex:index];
-                model.message.sentStatus = SentStatus_SENT;
-                [self.delegate didSendStatusUpdate:model index:index];
-            } else {
-                MessageModel *model = [self messageModel:message];
-                if (!model) {
-                    return;
-                }
-                [self insertNewMessageTime:message];
-                [self.dataSource addObject:model];
-                NSUInteger index = self.dataSource.count - 1;
-                self.sendingCache[@(message.messageId)] = @(index);
-                [self.delegate didInsert:model startIndex:index];
-                [self.delegate didSendStatusUpdate:model index:index];
-            }
-        }
-    });
-}
-
-#pragma mark - Helper
-- (void)fetchLatestMessages {
-    NSArray<RCMessage *> *messages= [IMClient getHistoryMessages:self.conversationType targetId:self.targetId objectNames:[[MessageHelper sharedInstance] getAllSupportMessage] sentTime:0 isForward:YES count:numOfMessages];
-    messages = [messages.reverseObjectEnumerator allObjects];
-    messages = [self insertTimeMessage:messages];
-    NSLog(@"rcim lastestMessage %@ count %@", messages, @(messages.count));
-    dispatch_async(self.storeQueue, ^{
-        NSArray *array = [self messageModels:messages];
-        dispatch_main_async_safe(^{
-            [self.dataSource addObjectsFromArray:array];
-            [self.delegate forceReloadData];
-            [self.delegate lastestMessageLoadCompleted];
-        });
-    });
-    if (messages.count == 0) {
-        [self fetchHistoryMessages];
-    }
-}
-
-- (MessageModel *)messageModel:(RCMessage *)message {
-    return [[MessageModel alloc] initWithMessage:message];
-}
-
-- (NSArray *)messageModels:(NSArray *)messages {
-    NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:messages.count];
-    [messages enumerateObjectsUsingBlock:^(RCMessage *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) {
-        MessageModel *model = [self messageModel:obj];
-        if (model) {
-            [array addObject:model];
-        }
-    }];
-    return [array copy];
-}
-
-- (BOOL)isCurrentConversation:(RCMessage *)message {
-    return [message.targetId isEqualToString:self.targetId] &&
-    message.conversationType == self.conversationType;
-}
-
-- (BOOL)isPersistentMessage:(RCMessage *)message{
-    return ([[message.content class] persistentFlag] & MessagePersistent_ISPERSISTED);
-}
-
-- (RCMessage *)buildTimeMessage:(NSTimeInterval)time {
-    TimeStampMessage *timeMessage = [[TimeStampMessage alloc] initWithTime:time];
-    timeMessage.timeText = [[MessageHelper sharedInstance] convertChatMessageTime:time/1000];
-    RCMessage *message =
-    [[RCMessage alloc] initWithType:self.conversationType
-                           targetId:self.targetId
-                          direction:MessageDirection_SEND
-                          messageId:0
-                            content:timeMessage];
-    message.objectName = [TimeStampMessage getObjectName];
-    return message;
-}
-
-- (NSArray <RCMessage *> *)insertTimeMessage:(NSArray *)messages{
-    if (messages.count == 0) {
-        return nil;
-    }
-    NSMutableArray *mutableMessages = messages.mutableCopy;
-    RCMessage *lastMessage = messages[0];
-    for (int i = (int)messages.count-1; i > 0; i--) {
-        RCMessage *lastMessage = messages[i];
-        RCMessage *preMessage = messages[i-1];
-        if ((lastMessage.sentTime - preMessage.sentTime) > 3*60*1000) {
-            RCMessage *timeMessage = [self buildTimeMessage:lastMessage.sentTime];
-            if (timeMessage != nil) {
-                [mutableMessages insertObject:timeMessage atIndex:i];
-            }
-        }
-    }
-    RCMessage *timeMessage = [self buildTimeMessage:lastMessage.sentTime];
-    if (timeMessage != nil) {
-        [mutableMessages insertObject:timeMessage atIndex:0];
-    }
-    NSMutableArray *currentMessages = self.dataSource.mutableCopy;
-    if (currentMessages.count > 0) {
-        RCMessage *lastMessage = messages[messages.count-1];
-        //当前数据源第一个元素一定是时间model,所以第2个才是真正的消息
-        RCMessage *startMessage = ((MessageModel *)self.dataSource[1]).message;
-        if ((startMessage.sentTime - lastMessage.sentTime) < 3*60*1000) {
-            dispatch_main_async_safe(^{
-                [self removeObjectAtIndex:0];
-            });
-        }
-    }
-    return mutableMessages;
-}
-
-- (void)insertNewMessageTime:(RCMessage *)newMessage{
-    RCMessage *currentLastMessage = self.dataSource.lastObject.message;
-    if ((newMessage.sentTime - currentLastMessage.sentTime) > 3*60*1000) {
-        RCMessage *timeMessage = [self buildTimeMessage:newMessage.sentTime];
-        MessageModel *model = [self messageModel:timeMessage];
-        if (!model) {
-            return;
-        }
-        if ([NSThread isMainThread]) {
-            [self.dataSource addObject:model];
-            NSUInteger index = self.dataSource.count - 1;
-            [self.delegate didInsert:model startIndex:index];
-        }else{
-            dispatch_main_async_safe(^{
-                [self.dataSource addObject:model];
-                NSUInteger index = self.dataSource.count - 1;
-                [self.delegate didInsert:model startIndex:index];
-            });
-        }
-    }
-}
-
-- (void)removeObjectAtIndex:(NSUInteger)index {
-    NSAssert([[NSThread currentThread] isMainThread],
-             @"%@ is not invoked by the main thread.",
-             NSStringFromSelector(_cmd));
-    NSAssert(index < self.dataSource.count,
-             @"index %@ beyond bounds [0 .. %@]",
-             @(index), @(self.dataSource.count));
-    [self.dataSource removeObjectAtIndex:index];
-    [self.delegate didRemoved:self.dataSource[index] atIndex:index];
-}
-
-- (void)roleDidChange:(NSNotification *)notification{
-    NSDictionary *dic = notification.object;
-    Role role = [dic[@"role"] integerValue];
-    NSString *userId = dic[@"userId"];
-    RoomMember *member = [[ClassroomService sharedService].currentRoom getMember:userId];
-    NSString *name = userId;
-    if(member.name.length > 0){
-        name = member.name;
-    }
-    if ([member.userId isEqualToString:IMClient.currentUserInfo.userId]) {
-        name = NSLocalizedStringFromTable(@"You", @"SealClass", nil);
-    }
-    NSString *info;
-    if (role == RoleTeacher) {
-        info = [NSString stringWithFormat:NSLocalizedStringFromTable(@"BecomeTeacher", @"SealClass", nil),name];
-    }else if (role == RoleStudent) {
-        info = [NSString stringWithFormat:NSLocalizedStringFromTable(@"BecomeStudent", @"SealClass", nil),name];
-    }else if (role == RoleAudience) {
-        info = [NSString stringWithFormat:NSLocalizedStringFromTable(@"BecomeAudience", @"SealClass", nil),name];
-    }
-    if (info.length > 0) {
-        RCInformationNotificationMessage *infoContent = [[RCInformationNotificationMessage alloc] init];
-        infoContent.message = info;
-        RCMessage *message = [[RCMessage alloc] initWithType:self.conversationType targetId:self.targetId direction:(MessageDirection_RECEIVE) messageId:-1 content:infoContent];
-        [self onReceiveMessage:message left:0 object:@""];
-    }
-}
-
-#pragma mark - Getters & setters
-- (NSMutableArray<MessageModel *> *)dataSource {
-    if (!_dataSource) {
-        _dataSource = [[NSMutableArray alloc] initWithCapacity:2000];
-    }
-    return _dataSource;
-}
-
-- (NSMutableDictionary<NSNumber *, NSNumber *> *)sendingCache {
-    if (!_sendingCache) {
-        _sendingCache = [[NSMutableDictionary alloc] initWithCapacity:30];
-    }
-    return _sendingCache;
-}
-
-- (dispatch_queue_t)storeQueue {
-    if (!_storeQueue) {
-        _storeQueue = dispatch_queue_create("rcimkit.messagestorequeue", DISPATCH_QUEUE_SERIAL);
-    }
-    return _storeQueue;
-}
-
-- (long long)earliestMessageSendTime{
-    long long time = 0;
-    if (self.dataSource.count > 1) {
-        //当前数据源第一个元素一定是时间model,所以第2个才是真正的消息
-        MessageModel *model = [self objectAtIndex:1];
-        time = model.message.sentTime;
-    }
-    return time;
-}
-@end

+ 0 - 45
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageHelper.h

@@ -1,45 +0,0 @@
-//
-//  MessageHelper.h
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <RongIMLib/RongIMLib.h>
-NS_ASSUME_NONNULL_BEGIN
-@protocol MessageHelperDelegate <NSObject>
-
-@optional
-
-- (void)willSendMessage:(RCMessage *)message;
-
-- (void)onSendMessage:(RCMessage *)message didCompleteWithError:(nullable NSError *)error;
-
-@end
-
-@interface MessageHelper : NSObject
-
-@property (nonatomic, weak) id<MessageHelperDelegate> delegate;
-
-+ (instancetype)sharedInstance;
-
-- (RCMessage *)sendMessage:(RCMessageContent *)content
-               pushContent:(nullable NSString *)pushContent
-                  pushData:(nullable NSString *)pushData
-                toTargetId:(NSString *)targetId
-          conversationType:(RCConversationType)conversationType;
-
-- (void)setMaximumContentWidth:(CGFloat)width;
-
-- (CGSize)getMessageContentSize:(RCMessageContent *)content;
-
-- (NSString *)convertChatMessageTime:(long long)secs;
-
-- (NSArray <NSString *> *)getAllSupportMessage;
-
-- (NSString *)formatMessage:(RCMessageContent *)content;
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 265
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageHelper.m

@@ -1,265 +0,0 @@
-//
-//  MessageHelper.m
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "MessageHelper.h"
-#import "TimeStampMessage.h"
-#import "TextMessageCell.h"
-#import "TimeStampCell.h"
-#import "MemberChangeMessage.h"
-#import "TipMessageCell.h"
-#import "ClassroomService.h"
-#import <RongIMKit/RongIMKit.h>
-
-@interface MessageHelper ()
-@property (nonatomic, assign) CGFloat contentMaxWidth;
-@end
-
-@implementation MessageHelper
-
-+ (instancetype)sharedInstance {
-    static MessageHelper *service = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        service = [[self alloc] init];
-    });
-    return service;
-}
-
-- (RCMessage *)sendMessage:(RCMessageContent *)content
-               pushContent:(NSString *)pushContent
-                  pushData:(NSString *)pushData
-                toTargetId:(NSString *)targetId
-          conversationType:(RCConversationType)conversationType {
-    __block RCMessage *message = nil;
-    void (^success)(long messageId) = ^(long messageId) {
-        NSError *error = nil;
-        if (self.delegate && [self.delegate respondsToSelector:@selector(onSendMessage:didCompleteWithError:)]) {
-            [self.delegate onSendMessage:message didCompleteWithError:error];
-        }
-    };
-    
-    void (^error)(RCErrorCode nErrorCode, long messageId) = ^(RCErrorCode nErrorCode, long messageId) {
-        NSError *error = [NSError errorWithDomain:@"IMSendMessage" code:nErrorCode userInfo:nil];
-        if (self.delegate && [self.delegate respondsToSelector:@selector(onSendMessage:didCompleteWithError:)]) {
-            [self.delegate onSendMessage:message didCompleteWithError:error];
-        }
-    };
-    RoomMember *currentMember = [ClassroomService sharedService].currentRoom.currentMember;
-    if ([NSString isEmptyString:currentMember.headUrl]) {
-        content.senderUserInfo = [[RCUserInfo alloc] initWithUserId:currentMember.userId name:currentMember.name portrait:UserDefaultObjectForKey(AvatarUrlKey)];
-    }
-    else {
-        content.senderUserInfo = [[RCUserInfo alloc] initWithUserId:currentMember.userId name:currentMember.name portrait:currentMember.headUrl];
-    }
-    message = [[RCIM sharedRCIM] sendMessage:conversationType targetId:targetId content:content pushContent:pushContent pushData:pushData success:success error:error];
-    
-//    message = [IMClient
-//               sendMessage:conversationType
-//               targetId:targetId
-//               content:content
-//               pushContent:pushContent
-//               pushData:pushData
-//               success:success
-//               error:error];
-    if (self.delegate && [self.delegate respondsToSelector:@selector(willSendMessage:)]) {
-        [self.delegate willSendMessage:message];
-    }
-    return message;
-}
-
-- (void)setMaximumContentWidth:(CGFloat)width{
-    self.contentMaxWidth = width;
-}
-
-- (CGSize)getMessageContentSize:(RCMessageContent *)content{
-    NSString *display = [self formatMessage:content];
-    if ([content isKindOfClass:[RCTextMessage class]]) {
-        CGFloat maxWidth = ceil(self.contentMaxWidth * 0.73);//TODO
-        CGSize textSize =  [self getTextDrawingSize:display
-                                                       font:[UIFont systemFontOfSize:TextMessage_Font_Size]
-                                            constrainedSize:CGSizeMake(maxWidth - 33, 8000)];
-        textSize = CGSizeMake(ceilf(textSize.width), ceilf(textSize.height));
-        CGSize tipLabelSize = CGSizeMake(textSize.width+16, textSize.height+16);
-        if (tipLabelSize.height < 40) {
-            tipLabelSize.height = 40;
-        }
-        return tipLabelSize;
-    }else if ([content isKindOfClass:[TimeStampMessage class]]){
-        CGSize size = [display sizeWithAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:TimeTextFont]}];
-        CGSize tipLabelSize = CGSizeMake(ceilf(size.width)+10,20);
-        return tipLabelSize;
-    }else if ([content isKindOfClass:[MemberChangeMessage class]] || [content isKindOfClass:[RCInformationNotificationMessage class]]){
-        CGSize size = [display sizeWithAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:InfoTextFont]}];
-        CGSize tipLabelSize = CGSizeMake(ceilf(size.width)+20,30);
-        return tipLabelSize;
-    }
-    return CGSizeZero;
-}
-
-- (NSString *)convertChatMessageTime:(long long)secs {
-    NSString *timeText = nil;
-    
-    NSDate *messageDate = [NSDate dateWithTimeIntervalSince1970:secs];
-    NSDate *now = [NSDate date];
-    NSDateFormatter *formatter = [self getDateFormatter];
-    formatter.timeZone = [NSTimeZone systemTimeZone];
-    [formatter setDateFormat:@"yyyy"];
-    NSInteger currentYear=[[formatter stringFromDate:now] integerValue];
-    NSInteger msgYear=[[formatter stringFromDate:messageDate] integerValue];
-    
-    [formatter setDateFormat:@"MM"];
-    NSInteger currentMonth=[[formatter stringFromDate:now] integerValue];
-    NSInteger msgMonth=[[formatter stringFromDate:messageDate] integerValue];
-    
-    [formatter setDateFormat:@"dd"];
-    NSInteger currentDay=[[formatter stringFromDate:now] integerValue];
-    NSInteger msgDay=[[formatter stringFromDate:messageDate] integerValue];
-    
-    [formatter setLocale:[[NSLocale alloc]initWithLocaleIdentifier:NSLocalizedStringFromTable(@"locale", @"SealClass", nil)]];
-    
-    NSString *formatStr = [self getDateFormatterString:messageDate];
-    [formatter setDateFormat:formatStr];
-    if (currentYear == msgYear) {
-        if (currentMonth == msgMonth) {
-            if (currentDay == msgDay) {
-                return timeText = [formatter stringFromDate:messageDate];
-            }else{
-                if (currentDay - msgDay == 1) {
-                    return timeText =
-                    [NSString stringWithFormat:@"%@ %@", NSLocalizedStringFromTable(@"Yesterday", @"SealClass", nil),
-                     [formatter stringFromDate:messageDate]];
-                }else if(currentDay - msgDay < 7){
-                    [formatter setDateFormat:[NSString stringWithFormat:@"eeee %@", formatStr]];
-                    return timeText = [formatter stringFromDate:messageDate];
-                }else{
-                    return [self getMessageDate:messageDate dateFormat:formatter];
-                }
-            }
-        }else{
-            return [self getMessageDate:messageDate dateFormat:formatter];
-        }
-    }
-    return [self getMessageDate:messageDate dateFormat:formatter];
-}
-
-- (NSArray<NSString *> *)getAllSupportMessage{
-    return @[RCTextMessageTypeIdentifier,TimeStampMessageIdentifier,MemberChangeMessageIdentifier,RCInformationNotificationMessageIdentifier];
-}
-
-- (NSString *)formatMessage:(RCMessageContent *)content{
-    NSString *formatString;
-    if ([content isKindOfClass:[RCTextMessage class]]) {
-        RCTextMessage *textMessage = (RCTextMessage *)content;
-        formatString = textMessage.content;
-    }else if ([content isKindOfClass:[TimeStampMessage class]]){
-        TimeStampMessage *timeMsg = (TimeStampMessage *)content;
-        formatString = timeMsg.timeText;
-    }else if ([content isKindOfClass:[MemberChangeMessage class]]){
-        MemberChangeMessage *mcMsg = (MemberChangeMessage *)content;
-        NSString *userName = mcMsg.userName;
-        if ([mcMsg.userId isEqualToString:IMClient.currentUserInfo.userId]) {
-            userName = NSLocalizedStringFromTable(@"You", @"SealClass", nil);
-        }
-        if (mcMsg.action == MemberChangeActionLeave) {
-            formatString = [NSString stringWithFormat:NSLocalizedStringFromTable(@"LeaveRoomInfo", @"SealClass", nil),userName];
-        }else if(mcMsg.action == MemberChangeActionJoin){
-            formatString = [NSString stringWithFormat:NSLocalizedStringFromTable(@"JoinRoomInfo", @"SealClass", nil),userName];
-        }else if(mcMsg.action == MemberChangeActionKick){
-            formatString = [NSString stringWithFormat:NSLocalizedStringFromTable(@"LeaveRoomInfo", @"SealClass", nil),userName];
-        }
-    }else if ([content isKindOfClass:[RCInformationNotificationMessage class]]){
-        RCInformationNotificationMessage *infoMsg = (RCInformationNotificationMessage *)content;
-        formatString = infoMsg.message;
-    }
-    return formatString;
-}
-
-#pragma mark - help
-- (NSString *)getMessageDate:(NSDate*)messageDate dateFormat:(NSDateFormatter *)formatter{
-    [formatter setDateFormat:[NSString stringWithFormat:@"%@ %@",
-                              NSLocalizedStringFromTable(@"chatDate", @"SealClass", nil),
-                              [self getDateFormatterString:messageDate]]];
-    return [formatter stringFromDate:messageDate];
-}
-
-- (NSString *)getDateFormatterString:(NSDate *)messageDate{
-    NSString *formatStringForHours =
-    [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
-    NSRange containsA = [formatStringForHours rangeOfString:@"a"];
-    BOOL hasAMPM = containsA.location != NSNotFound;
-    NSString *formatStr = nil;
-    if (hasAMPM) {
-        formatStr = [self getFormatStringByMessageDate:messageDate];
-    } else {
-        formatStr = @"HH:mm";
-    }
-    return formatStr;
-}
-
-- (NSString *)getFormatStringByMessageDate:(NSDate *)messageDate {
-    NSString *formatStr = nil;
-    if ([self isBetweenFromHour:0 toHour:6 currentDate:messageDate]) {
-        formatStr = NSLocalizedStringFromTable(@"Dawn", @"SealClass", nil);
-    } else if ([self isBetweenFromHour:6 toHour:12 currentDate:messageDate]) {
-        formatStr = NSLocalizedStringFromTable(@"Forenoon", @"SealClass", nil);
-    } else if ([self isBetweenFromHour:12 toHour:13 currentDate:messageDate]) {
-        formatStr = NSLocalizedStringFromTable(@"Noon", @"SealClass", nil);
-    } else if ([self isBetweenFromHour:13 toHour:18 currentDate:messageDate]) {
-        formatStr = NSLocalizedStringFromTable(@"Afternoon", @"SealClass", nil);
-    } else {
-        formatStr = NSLocalizedStringFromTable(@"Evening", @"SealClass", nil);
-    }
-    return formatStr;
-}
-
-- (BOOL)isBetweenFromHour:(NSInteger)fromHour toHour:(NSInteger)toHour currentDate:(NSDate *)currentDate {
-    NSDate *date1 = [self getCustomDateWithHour:fromHour currentDate:currentDate];
-    NSDate *date2 = [self getCustomDateWithHour:toHour currentDate:currentDate];
-    if ([currentDate compare:date1] == NSOrderedDescending &&
-        ([currentDate compare:date2] == NSOrderedAscending || [currentDate compare:date1] == NSOrderedSame))
-        return YES;
-    return NO;
-}
-
-- (NSDate *)getCustomDateWithHour:(NSInteger)hour currentDate:(NSDate *)currentDate {
-    NSCalendar *currentCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
-    NSDateComponents *currentComps;
-    NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday |
-    NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
-    currentComps = [currentCalendar components:unitFlags fromDate:currentDate];
-    //设置当天的某个点
-    NSDateComponents *resultComps = [[NSDateComponents alloc] init];
-    [resultComps setYear:[currentComps year]];
-    [resultComps setMonth:[currentComps month]];
-    [resultComps setDay:[currentComps day]];
-    [resultComps setHour:hour];
-    NSCalendar *resultCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
-    return [resultCalendar dateFromComponents:resultComps];
-}
-
-- (NSDateFormatter *)getDateFormatter {
-    static NSDateFormatter *dateFormatter = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        dateFormatter = [[NSDateFormatter alloc] init];
-        dateFormatter.timeZone = [NSTimeZone systemTimeZone];
-    });
-    return dateFormatter;
-}
-
-- (CGSize)getTextDrawingSize:(NSString *)text font:(UIFont *)font constrainedSize:(CGSize)constrainedSize {
-    if (text.length <= 0) {
-        return CGSizeZero;
-    }
-    return [text boundingRectWithSize:constrainedSize
-                              options:(NSStringDrawingTruncatesLastVisibleLine |
-                                       NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
-                           attributes:@{NSFontAttributeName : font}
-                              context:nil].size;
-}
-@end

+ 0 - 19
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageModel.h

@@ -1,19 +0,0 @@
-//
-//  MessageModel.h
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/5.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <RongIMLib/RongIMLib.h>
-NS_ASSUME_NONNULL_BEGIN
-
-@interface MessageModel : NSObject
-@property (nonatomic, strong, readonly) RCMessage *message;
-@property (nonatomic, assign) CGSize contentSize;
-- (instancetype)initWithMessage:(RCMessage *)message;
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 23
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Chat/MessageManager/MessageModel.m

@@ -1,23 +0,0 @@
-//
-//  MessageModel.m
-//  SealClass
-//
-//  Created by 张改红 on 2019/3/5.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "MessageModel.h"
-#import "MessageHelper.h"
-@interface MessageModel ()
-@property(nonatomic, strong) RCMessage *message;
-@end
-
-@implementation MessageModel
-- (instancetype)initWithMessage:(RCMessage *)message{
-    if (self = [super init]) {
-        self.message = message;
-        self.contentSize = [[MessageHelper sharedInstance] getMessageContentSize:message.content];
-    }
-    return self;
-}
-@end

+ 0 - 26
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/MainContainer/EmptyView.h

@@ -1,26 +0,0 @@
-//
-//  EmptyView.h
-//  SealClass
-//
-//  Created by Zhaoqianyu on 2019/3/13.
-//  Copyright © 2019 RongCloud. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#import "RoomMember.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface EmptyView : UIView
-- (instancetype)initWithFrame:(CGRect)frame role:(Role)role;
-
-/**
- 切换角色
-
- @param role 当前角色
- @discussion 不同角色显示不同
- */
-- (void)changeRole:(Role)role;
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 79
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/MainContainer/EmptyView.m

@@ -1,79 +0,0 @@
-//
-//  EmptyView.m
-//  SealClass
-//
-//  Created by Zhaoqianyu on 2019/3/13.
-//  Copyright © 2019 RongCloud. All rights reserved.
-//
-
-#import "EmptyView.h"
-#import <Masonry/Masonry.h>
-
-#define ImageWidth 111
-#define ImageHeight 82
-
-@interface EmptyView()
-
-@property(nonatomic, assign) Role currentRole;
-@property(nonatomic, strong) UIImageView *emptyImageView;
-@property(nonatomic, strong) UILabel *emptyLabel;
-
-@end
-
-@implementation EmptyView
-
-- (instancetype)initWithFrame:(CGRect)frame role:(Role)role; {
-    self = [super initWithFrame:frame];
-    if (self) {
-        
-        [self addSubview:self.emptyImageView];
-        [self addSubview:self.emptyLabel];
-        [self.emptyImageView mas_makeConstraints:^(MASConstraintMaker *make) {
-            make.edges.mas_equalTo(self);
-        }];
-        [self.emptyLabel mas_makeConstraints:^(MASConstraintMaker *make) {
-            make.top.mas_equalTo(self).mas_offset((self.bounds.size.height-ImageHeight)/2+ImageHeight-10);
-            make.centerX.mas_equalTo(self);
-            make.height.mas_equalTo(9);
-        }];
-        [self changeRole:role];
-    }
-    return self;
-}
-
-- (void)changeRole:(Role)role {
-    self.currentRole = role;
-    switch (role) {
-        case RoleTeacher:
-            self.emptyImageView.image = [UIImage imageNamed:@"empty_teacher"];
-            self.emptyLabel.text = @"当前无共享内容,您可以新建共享内容";
-            break;
-        default:
-            self.emptyImageView.image = [UIImage imageNamed:@"empty_student"];
-            self.emptyLabel.text = @"当前无共享内容,请耐心等待";
-            break;
-    }
-}
-
-#pragma mark - Getters & setters
-
-- (UIImageView *)emptyImageView {
-    if (!_emptyImageView) {
-        _emptyImageView = [UIImageView new];
-        _emptyImageView.contentMode = UIViewContentModeCenter;
-        self.backgroundColor = HexRGB(0xffffff);
-    }
-    return _emptyImageView;
-}
-
-- (UILabel *)emptyLabel {
-    if (!_emptyLabel) {
-        _emptyLabel = [UILabel new];
-        _emptyLabel.textColor = HexRGB(0xb2b2b2);
-        _emptyLabel.font = [UIFont systemFontOfSize:6];
-        _emptyLabel.textAlignment = NSTextAlignmentCenter;
-    }
-    return _emptyLabel;
-}
-
-@end

+ 0 - 46
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/MainContainer/MainContainerView.h

@@ -1,46 +0,0 @@
-//
-//  MainContainerView.h
-//  SealClass
-//
-//  Created by Sin on 2019/2/28.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#import "ClassroomService.h"
-#import "EmptyView.h"
-#import "RoomMember.h"
-
-@class MainContainerView;
-@protocol MainContainerViewDelegate <NSObject>
-- (void)mainContainerView:(MainContainerView *_Nullable)view scale:(CGFloat)scale;
-- (void)mainContainerView:(MainContainerView *_Nullable)view fullScreen:(BOOL)isFull;
-@end
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface MainContainerView : UIView
-
-@property (nonatomic, strong) UIView *videoBackView;
-
-@property (nonatomic, strong) UIView *videoView;
-
-@property (nonatomic, strong) EmptyView *emptyView;
-
-@property (nonatomic, strong) RoomMember *member;
-
-@property (nonatomic, weak) id<MainContainerViewDelegate> delegate;
-
-@property (nonatomic, assign, readonly) BOOL isFullScreen;
-
-@property (nonatomic, readonly) CGRect currentVideoFrame;
-
-- (void)didChangeRole:(Role)role;
-
-- (void)containerViewRenderView:(RoomMember *)member;
-
-- (void)cancelRenderView;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 182
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/MainContainer/MainContainerView.m

@@ -1,182 +0,0 @@
-//
-//  MainContainerView.m
-//  SealClass
-//
-//  Created by Sin on 2019/2/28.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "MainContainerView.h"
-#import "RTCService.h"
-#import "Masonry.h"
-#import "ZoomControl.h"
-
-@interface MainContainerView()<ZoomControlDelegate>
-@property (nonatomic, strong) UIView *tapGestureView;
-@property (nonatomic, strong) ZoomControl *zoomControl;
-@property (nonatomic) CGRect currentVideoFrame;
-@property (nonatomic) CGRect originVideoFrame;
-
-@end
-
-@implementation MainContainerView
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    self = [super initWithFrame:frame];
-    if (self) {
-        self.backgroundColor = [UIColor colorWithHexString:@"28313A" alpha:1];
-        [self addSubview:self.emptyView];
-        [self addSubview:self.videoBackView];
-        [self.videoBackView addSubview:self.videoView];
-        [self.videoView addSubview:self.zoomControl];
-        [self.videoView bringSubviewToFront:self.zoomControl];
-        [self addConstraints];
-        self.originVideoFrame = self.videoBackView.frame;
-        self.currentVideoFrame = self.originVideoFrame;
-    }
-    return self;
-}
-
-#pragma mark - ZoomControlDelegate
-- (void)zoomControlDelegate:(CGFloat)scale{
-    if([self.delegate respondsToSelector:@selector(mainContainerView: scale:)]) {
-        [self.delegate mainContainerView:self scale:scale];
-    }
-}
-
-- (void)fullScreenDidUpdate:(BOOL)isFull{
-    [self updateVideoViewFrame:isFull];
-    if([self.delegate respondsToSelector:@selector(mainContainerView:fullScreen:)]) {
-        [self.delegate mainContainerView:self fullScreen:isFull];
-    }
-}
-
-- (void)didChangeRole:(Role)role {
-    [self.emptyView changeRole:role];
-}
-
-- (void)containerViewRenderView:(RoomMember *)member {
-    self.videoBackView.hidden = NO;
-    self.videoView.hidden = NO;
-    if([[ClassroomService sharedService].currentRoom.currentMemberId isEqualToString:member.userId]) {
-        RoomMember *curMemeber =[ClassroomService sharedService].currentRoom.currentMember;
-        [[RTCService sharedInstance] renderLocalVideoOnView:self.videoView cameraEnable:curMemeber.cameraEnable];
-    }else {
-        if (member.cameraEnable) {
-            [[RTCService sharedInstance] exchangeRemoteUserAVStreamToNomalSteam:member.userId callback:^{
-                [[RTCService sharedInstance] renderRemoteVideoOnView:self.videoView forUser:member.userId];
-            }];
-        }
-        else {
-           RTCService *service = [RTCService sharedInstance];
-            for(RCRTCRemoteUser *remoteUser in service.rtcRoom.remoteUsers) {
-                if([member.userId isEqualToString:remoteUser.userId]) {
-                    [service subscribeRemoteUserAVStream:remoteUser];
-                    [self cancelRenderView];
-                    break;
-                }
-            }
-        }
-    }
-    self.member = member;
-    [self.videoView bringSubviewToFront:self.zoomControl];
-    self.zoomControl.hidden = NO;
-    [self.zoomControl resetDefaultScale];
-}
-
-- (void)cancelRenderView {
-    // 如何关闭了摄像头,可能导致videoView 遮挡控制事件
-    [self updateVideoViewFrame:NO];
-    self.videoBackView.hidden = YES;
-    for(UIView *v in self.videoView.subviews) {
-        if([v isEqual:self.zoomControl]) {
-            v.hidden = YES;
-        }else {
-            [v removeFromSuperview];
-        }
-    }
-}
-
-#pragma mark - private method
-
-- (void)updateVideoViewFrame:(BOOL)isFull {
-    self.currentVideoFrame = self.frame;
-    if(isFull) {
-        [self.superview addSubview:self.videoBackView];
-        [self.superview bringSubviewToFront:self.videoBackView];
-        CGFloat width = 0.0f;
-        CGFloat height = 0.0f;
-        height = KLandscapeWidth / 4.0f * 3;
-        if (height > KLandscapeHeight) {
-            height = KLandscapeHeight;
-            width = height / 3.0f * 4;
-        }
-        else {
-            width = KLandscapeHeight;
-        }
-        self.videoView.frame = CGRectMake((KLandscapeWidth - width) / 2.0f, 0, width, height);
-    }else {
-        [self.videoBackView removeFromSuperview];
-        [self addSubview:self.videoBackView];
-        self.currentVideoFrame = self.originVideoFrame;
-        self.videoView.frame = CGRectMake(0, 0, CGRectGetWidth(self.currentVideoFrame), CGRectGetHeight(self.currentVideoFrame));
-    }
-    self.videoBackView.frame = self.currentVideoFrame;
-}
-
-#pragma mark - getter
-- (UIView *)videoBackView {
-    if (!_videoBackView) {
-        CGFloat width = 750/2;
-        CGFloat height = 563/2;
-        CGFloat x = (self.frame.size.width - 49 - 112 - width) /2.0 + 30;
-        CGFloat y = 64+10;
-        _videoBackView = [[UIView alloc] initWithFrame:CGRectMake(x, y, width, height)];
-        _videoBackView.backgroundColor = [UIColor colorWithHexString:@"28313A" alpha:1];
-    }
-    return _videoBackView;
-}
-
-
-- (UIView *)videoView {
-    if(!_videoView) {
-        CGFloat width = 750/2;
-        CGFloat height = 563/2;
-//        CGFloat x = (self.frame.size.width - 49 - 112 - width) /2.0 + 30;
-//        CGFloat y = 64+10;
-        _videoView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
-    }
-    return _videoView;
-}
-
-- (ZoomControl *)zoomControl{
-    if (!_zoomControl) {
-        _zoomControl = [[ZoomControl alloc] init];
-        _zoomControl.delegate = self;
-        _zoomControl.hidden = YES;
-        _zoomControl.increaseScaleBtn.hidden = YES;
-        _zoomControl.reduceScaleBtn.hidden = YES;
-    }
-    return _zoomControl;
-}
-
-- (EmptyView *)emptyView {
-    if (!_emptyView) {
-        CGFloat width = 750/2;
-        CGFloat height = 563/2;
-        CGFloat x = (self.frame.size.width - 49 - 112 - width) /2.0 + 30;
-        CGFloat y = 64+10;
-        _emptyView = [[EmptyView alloc] initWithFrame:CGRectMake(x, y, width, height) role:[ClassroomService sharedService].currentRoom.currentMember.role];
-    }
-    return _emptyView;
-}
-
-- (void)addConstraints {
-    [self.zoomControl mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.mas_equalTo(self.videoView).mas_offset(0);
-        make.right.mas_equalTo(self.videoView).mas_offset(0);
-        make.width.height.mas_equalTo(120);
-    }];
-}
-@end

+ 0 - 20
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/RecentShared/RecentSharedVideoCell.h

@@ -1,20 +0,0 @@
-//
-//  RecentSharedVideoCell.h
-//  SealClass
-//
-//  Created by liyan on 2019/3/13.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#import "RoomMember.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface RecentSharedVideoCell : UITableViewCell
-
-- (void)setModel:(RoomMember *)member;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 64
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/RecentShared/RecentSharedVideoCell.m

@@ -1,64 +0,0 @@
-//
-//  RecentSharedVideoCell.m
-//  SealClass
-//
-//  Created by liyan on 2019/3/13.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "RecentSharedVideoCell.h"
-#import "Masonry.h"
-#import "RTCService.h"
-#import "ClassroomService.h"
-
-@interface RecentSharedVideoCell()
-
-@property (nonatomic, strong) UIImageView *thumnailImageView;
-
-@end
-
-@implementation RecentSharedVideoCell
-
-- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
-{
-    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
-    if (self) {
-        self.selectionStyle = UITableViewCellSelectionStyleNone;
-        self.backgroundColor = [UIColor clearColor];
-        [self addSubViews];
-    }
-    return self;
-}
-
-- (void)addSubViews {
-    [self.contentView addSubview:self.thumnailImageView];
-    [self.thumnailImageView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.contentView.mas_top).offset(30);
-        make.left.equalTo(self.contentView.mas_left).offset(30);
-        make.right.equalTo(self.contentView.mas_right).offset(-30);
-        make.bottom.equalTo(self.contentView.mas_bottom).offset(0);
-    }];
-}
-
-- (void)setModel:(RoomMember *)member {
-    self.thumnailImageView.image = nil;
-    UIImage *image = nil;
-    if([[ClassroomService sharedService].currentRoom.currentMemberId isEqualToString:member.userId]) {
-        image = [[RTCService sharedInstance] imageForCurrentUser];
-    }else {
-        image = [[RTCService sharedInstance] imageForOtherUser:member.userId];
-    }
-    if (image != nil) {
-        self.thumnailImageView.image = image;
-    }
-}
-
-- (UIImageView *)thumnailImageView {
-    if(!_thumnailImageView) {
-        _thumnailImageView = [[UIImageView alloc] init];
-        _thumnailImageView.backgroundColor = [UIColor colorWithHexString:@"3D4041" alpha:1];
-    }
-    return _thumnailImageView;
-}
-
-@end

+ 0 - 32
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/RecentShared/RecentSharedView.h

@@ -1,32 +0,0 @@
-//
-//  RecentSharedView.h
-//  SealClass
-//
-//  Created by liyan on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#import "Whiteboard.h"
-#import "KSWhiteboardControl.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class RecentSharedView;
-@protocol RecentSharedViewDelegate <NSObject>
-
-- (void)recentSharedViewCellTap:(id)recentShared;
-
-@end
-
-@interface RecentSharedView : UIView
-
-@property (nonatomic, weak) id<RecentSharedViewDelegate> delegate;
-
-@property (nonatomic, strong) KSWhiteboardControl *whiteboardCtrl;
-
-- (void)reloadDataSource;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 175
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/RecentShared/RecentSharedView.m

@@ -1,175 +0,0 @@
-//
-//  RecentSharedView.m
-//  SealClass
-//
-//  Created by liyan on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "RecentSharedView.h"
-#import "RecentSharedWhiteboardCell.h"
-#import "ClassroomService.h"
-#import "RecentSharedVideoCell.h"
-
-@interface RecentSharedView ()<UITableViewDelegate, UITableViewDataSource>
-
-@property (nonatomic, strong) UITableView *recentSharedTableView;
-@property (nonatomic, strong) UILabel *alertLabel;
-@property (nonatomic, strong) NSMutableArray *recentSharedDataSource;
-
-@property (nonatomic, assign) NSInteger firstPageIndex;
-@end
-
-@implementation RecentSharedView
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    self = [super initWithFrame:frame];
-    if (self) {
-        self.backgroundColor = [UIColor colorWithHexString:@"132023" alpha:0.95];
-        [self reloadDataSource];
-        [self addSubviews];
-    }
-    return self;
-}
-
-- (void)addSubviews {
-    [self addSubview:self.recentSharedTableView];
-    [self addSubview:self.alertLabel];
-}
-
-- (void)reloadDataSource {
-    __weak typeof(self) weakSelf = self;
-    if (self.whiteboardCtrl) {
-        [self.whiteboardCtrl.wbView.room getScenesWithResult:^(NSArray<WhiteScene *> * _Nonnull scenes) {
-            dispatch_main_async_safe(^{
-                [self.recentSharedDataSource removeAllObjects];
-                NSArray *memberArray = [ClassroomService sharedService].currentRoom.memberList;
-                for (RoomMember *member in memberArray) {
-                    if (member.role == RoleTeacher) {
-                        [self.recentSharedDataSource addObject:member];
-                    }
-                }
-                if (self.recentSharedDataSource.count > 0) {
-                    self.alertLabel.hidden = YES;
-                }
-                weakSelf.firstPageIndex = self.recentSharedDataSource.count;
-                [weakSelf.recentSharedDataSource addObjectsFromArray:[[scenes reverseObjectEnumerator] allObjects]];
-                [weakSelf.recentSharedTableView reloadData];
-            });
-
-        }];
-    }
-    else {
-        [self.recentSharedDataSource removeAllObjects];
-        NSArray *memberArray = [ClassroomService sharedService].currentRoom.memberList;
-        for (RoomMember *member in memberArray) {
-            if (member.role == RoleTeacher) {
-                [self.recentSharedDataSource addObject:member];
-            }
-        }
-        if (self.recentSharedDataSource.count > 0) {
-            self.alertLabel.hidden = YES;
-        }
-        [weakSelf.recentSharedTableView reloadData];
-    }
-}
-
-#pragma mark - tableViewDelegate
--(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-    static NSString * cellName;
-    if ([[self.recentSharedDataSource objectAtIndex:indexPath.row] isKindOfClass:[WhiteScene class]]) {
-        cellName = @"RecentSharedWhiteboardCell";
-        RecentSharedWhiteboardCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName];
-        if (cell == nil) {
-            cell = [[RecentSharedWhiteboardCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellName];
-        }
-        
-        NSInteger index = self.recentSharedDataSource.count - indexPath.row;
-        [cell configCellWithIndex:index];
-        return cell;
-    }else {
-        cellName = @"RecentSharedVideoCell";
-        RecentSharedVideoCell * cell = [tableView dequeueReusableCellWithIdentifier:cellName];
-        if (cell == nil) {
-            cell = [[RecentSharedVideoCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellName];
-        }
-        [cell setModel:[self.recentSharedDataSource objectAtIndex:indexPath.row]];
-        return cell;
-    }
-}
-
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    if (self.recentSharedDataSource.count > indexPath.row) {
-        if(self.delegate && [self.delegate respondsToSelector:@selector(recentSharedViewCellTap:)]) {
-            [self.delegate recentSharedViewCellTap:[self.recentSharedDataSource objectAtIndex:indexPath.row]];
-        }
-    }
-}
-    
--(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return self.recentSharedDataSource.count;
-}
-
--(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    return 165.0;
-}
-
-- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
-    return 30;
-}
-
-- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
-    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 50)];
-    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(30, 20, self.frame.size.width, 20)];
-    label.text = @"资源库";
-    label.textColor = [UIColor whiteColor];
-    label.textAlignment = NSTextAlignmentLeft;
-    label.font = [UIFont systemFontOfSize:16];
-    [view addSubview:label];
-    return view;
-}
-
-- (UITableView *)recentSharedTableView {
-    if(!_recentSharedTableView) {
-        CGSize size = self.bounds.size;
-        _recentSharedTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height) style:UITableViewStyleGrouped];
-        _recentSharedTableView.backgroundColor = [UIColor clearColor];
-        _recentSharedTableView.delegate = self;
-        _recentSharedTableView.dataSource = self;
-        _recentSharedTableView.bounces = NO;
-        _recentSharedTableView.separatorColor=[UIColor clearColor];
-        _recentSharedTableView.showsVerticalScrollIndicator = NO;
-        _recentSharedTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
-        if (@available(iOS 11.0, *)) {
-            _recentSharedTableView.insetsContentViewsToSafeArea = NO;
-        }
-        
-    }
-    return _recentSharedTableView;
-}
-
-- (UILabel *)alertLabel {
-    CGSize size = self.bounds.size;
-    if(!_alertLabel) {
-        _alertLabel = [[UILabel alloc] initWithFrame:CGRectMake((size.width - 80) / 2, (size.height - 40) / 2, 80, 40)];
-        _alertLabel.font = [UIFont systemFontOfSize:12];
-        _alertLabel.textAlignment = NSTextAlignmentCenter;
-        _alertLabel.numberOfLines = 2;
-        _alertLabel.hidden = NO;
-        _alertLabel.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-        _alertLabel.text = NSLocalizedStringFromTable(@"NoContent", @"SealClass", nil);
-    }
-    return _alertLabel;
-}
-
-- (NSMutableArray *)recentSharedDataSource {
-    if(!_recentSharedDataSource) {
-        _recentSharedDataSource = [[NSMutableArray alloc] init];
-    }
-    return _recentSharedDataSource;
-}
-
-
-@end

+ 0 - 22
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/RecentShared/RecentSharedWhiteboardCell.h

@@ -1,22 +0,0 @@
-//
-//  RecentSharedWhiteboardCell.h
-//  SealClass
-//
-//  Created by liyan on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#import "WhiteScene.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface RecentSharedWhiteboardCell : UITableViewCell
-
-- (void)setModel:(WhiteScene *)whiteboard;
-
-- (void)configCellWithIndex:(NSInteger)pageIndex;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 81
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/RecentShared/RecentSharedWhiteboardCell.m

@@ -1,81 +0,0 @@
-//
-//  RecentSharedWhiteboardCell.m
-//  SealClass
-//
-//  Created by liyan on 2019/3/6.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "RecentSharedWhiteboardCell.h"
-#import "Masonry.h"
-
-@interface RecentSharedWhiteboardCell()
-
-@property (nonatomic, strong) UIView *backView;
-@property (nonatomic, strong) UILabel *nameLable;
-
-@end
-
-@implementation RecentSharedWhiteboardCell
-
-- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
-{
-    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
-    if (self) {
-        self.selectionStyle = UITableViewCellSelectionStyleNone;
-        self.backgroundColor = [UIColor clearColor];
-        [self addSubViews];
-    }
-    return self;
-}
-
-- (void)addSubViews {
-    [self.contentView addSubview:self.backView];
-    [self.backView addSubview:self.nameLable];
-    [self.backView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.contentView.mas_top).offset(30);
-        make.left.equalTo(self.contentView.mas_left).offset(30);
-        make.right.equalTo(self.contentView.mas_right).offset(-30);
-        make.bottom.equalTo(self.contentView.mas_bottom).offset(0);
-    }];
-    [self.nameLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.backView.mas_top).offset(0);
-        make.left.equalTo(self.backView.mas_left).offset(0);
-        make.right.equalTo(self.backView.mas_right).offset(0);
-        make.bottom.equalTo(self.backView.mas_bottom).offset(0);
-    }];
-}
-
-- (void)setModel:(WhiteScene *)whiteboard {
-    if (!whiteboard) {
-        return;
-    }
-    self.nameLable.text = [NSString stringWithFormat:@"Page%@", whiteboard.name];
-}
-
-- (void)configCellWithIndex:(NSInteger)pageIndex {
-    self.nameLable.text = [NSString stringWithFormat:@"Page%zd", pageIndex];
-}
-
-- (void)resetDefaultStyle {
-    self.nameLable.text = nil;
-}
-
-- (UIView *)backView {
-    if(!_backView) {
-        _backView = [[UIView alloc] init];
-    }
-    return _backView;
-}
-
-- (UILabel *)nameLable {
-    if(!_nameLable) {
-        _nameLable = [[UILabel alloc] init];
-        _nameLable.backgroundColor = [UIColor colorWithHexString:@"ffffff" alpha:1];
-        _nameLable.font = [UIFont systemFontOfSize:12];
-        _nameLable.textAlignment = NSTextAlignmentCenter;
-        _nameLable.textColor = [UIColor colorWithHexString:@"000000" alpha:1];
-    }
-    return _nameLable;
-}
-@end

+ 0 - 54
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Title/ClassroomTitleView.h

@@ -1,54 +0,0 @@
-//
-//  ClassroomTitleView.h
-//  SealClass
-//
-//  Created by Sin on 2019/2/28.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-typedef enum : NSUInteger {
-    ClassroomTitleViewActionTagSwitchLine,
-    ClassroomTitleViewActionTagSwitchCamera,
-    ClassroomTitleViewActionTagMicrophone,
-    ClassroomTitleViewActionTagCamera,
-    ClassroomTitleViewActionTagMute,
-    ClassroomTitleViewActionTagHangup,
-} ClassroomTitleViewActionTag;
-
-@class ClassroomTitleView;
-@protocol ClassroomTitleViewDelegate <NSObject>
-
-- (void)classroomTitleView:(UIButton *)button didTapAtTag:(ClassroomTitleViewActionTag)tag;
-
-- (void)refreshClassroomStatus;
-
-@end
-
-@interface ClassroomTitleView : UIView
-
-@property (nonatomic, weak) id<ClassroomTitleViewDelegate> delegate;
-
-@property (nonatomic, strong) UIButton *switchLineBtn;
-
-@property (nonatomic, strong) UIButton *switchCameraBtn;
-
-@property (nonatomic, strong) UIButton *microphoneBtn;
-
-@property (nonatomic, strong) UIButton *cameraBtn;
-
-@property (nonatomic, strong) UIButton *muteBtn;
-
-@property (nonatomic, strong) UIButton *hangupBtn;
-
-- (void)refreshTitleView;
-
-- (void)stopDurationTimer;
-
-- (void)isCameraAvailable:(void (^)(bool avilable))successBlock;
-
--(void)isMicrophoneAvailable:(void (^)(bool avilable))successBlock;
-
-@end
-

+ 0 - 456
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/Title/ClassroomTitleView.m

@@ -1,456 +0,0 @@
-//
-//  ClassroomTitleView.m
-//  SealClass
-//
-//  Created by Sin on 2019/2/28.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "ClassroomTitleView.h"
-#import "ClassroomService.h"
-#import "Masonry.h"
-#import <AVFoundation/AVFoundation.h>
-#import "RTCService.h"
-#import "NormalAlertView.h"
-#import "ClassroomService.h"
-#import "KSPremissionAlert.h"
-
-#define TSignalImageViewWidth   12
-#define TTimeLableWidth   70
-#define TTimeLableHeight  16
-#define TTitleViewWidth   120
-#define TTitleViewHeight   24
-#define TToolViewWidth   (6 * 22 + 6 * 20)
-#define TButtonCount     6
-
-
-#define TButtonWidht     22
-
-@interface ClassroomTitleView ()
-
-@property (nonatomic, strong) UIImageView *signalImageView;
-@property (nonatomic, strong) UILabel *timeLable;
-@property (nonatomic, strong) UILabel *titleLable;
-@property (nonatomic, strong) UIView *toolView;
-@property (nonatomic, strong) NSTimer *timeTimer;
-@property (nonatomic, strong) NSMutableArray *buttonArray;
-@property (nonatomic, strong) NSArray *buttonImageArray;
-@property (nonatomic, strong) NSArray *buttonHighlightedImageArray;
-@property (nonatomic, strong) NSArray *buttonCloseImageArray;
-@property (nonatomic, assign) NSInteger duration;
-
-@property (nonatomic, assign) BOOL isCountDown;
-
-@end
-
-@implementation ClassroomTitleView
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    self = [super initWithFrame:frame];
-    if (self) {
-        CAGradientLayer * gradientLayer = [CAGradientLayer layer];
-        gradientLayer.colors = @[(__bridge id)[UIColor colorWithHexString:@"262F38" alpha:0.01].CGColor,(__bridge id)[UIColor colorWithHexString:@"262F38" alpha:1].CGColor];
-        gradientLayer.startPoint = CGPointMake(0, 0);
-        gradientLayer.endPoint = CGPointMake(0, 1);
-        gradientLayer.frame = CGRectMake(0, 0, frame.size.width, frame.size.height);
-        self.backgroundColor = [[UIColor clearColor] colorWithAlphaComponent:0.6];
-//        self.duration = 0;
-        self.isCountDown = NO;
-        self.duration = [ClassroomService sharedService].currentRoom.surplusTime;
-        [self.layer addSublayer:gradientLayer];
-        [self.buttonArray addObjectsFromArray:@[self.switchLineBtn,self.switchCameraBtn,self.microphoneBtn,self.cameraBtn,self.muteBtn,self.hangupBtn]];
-        [self addSubviews];
-        [self refreshTitleView];
-        [self.timeTimer setFireDate:[NSDate distantPast]];
-    }
-    return self;
-}
-
-- (void)addSubviews {
-    [self addSubview:self.signalImageView];
-    [self addSubview:self.timeLable];
-    [self addSubview:self.titleLable];
-    [self addSubview:self.toolView];
-    [self.toolView addSubview:self.switchLineBtn];
-    [self.toolView addSubview:self.switchCameraBtn];
-    [self.toolView addSubview:self.microphoneBtn];
-    [self.toolView addSubview:self.cameraBtn];
-    [self.toolView addSubview:self.muteBtn];
-    [self.toolView addSubview:self.hangupBtn];
-    CGFloat topOffset = (self.bounds.size.height - TButtonWidht ) / 2.0;
-    
-    [self.signalImageView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.equalTo(self.mas_left).offset(10);
-        make.centerY.equalTo(self.mas_centerY);
-        make.width.equalTo(@TSignalImageViewWidth);
-        make.height.equalTo(@TSignalImageViewWidth);
-    }];
-    [self.timeLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.equalTo(self.signalImageView.mas_right).offset(2.5);
-        make.centerY.equalTo(self.mas_centerY);
-        make.width.equalTo(@TTimeLableWidth);
-        make.height.equalTo(@TTimeLableHeight);
-    }];
-    [self.titleLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.centerX.equalTo(self.mas_centerX).offset(-50);
-        make.centerY.equalTo(self.mas_centerY);
-        make.width.equalTo(@TTitleViewWidth);
-        make.height.equalTo(@TTitleViewHeight);
-    }];
-    [self.toolView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.mas_top).offset(0);
-        make.right.equalTo(self.mas_right).offset(0);
-        make.width.equalTo(@TToolViewWidth);
-        make.height.equalTo(self.mas_height);
-    }];
-    
-    [self.buttonArray mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedItemLength:TButtonWidht leadSpacing:0 tailSpacing:20];
-    [self.buttonArray mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.toolView.mas_top).offset(topOffset);
-        make.height.equalTo(@TButtonWidht);
-    }];
-    
-}
-
-
-- (void)refreshTitleView {
-    [self setDefaultButtons];
-    RoomMember *curMember = [ClassroomService sharedService].currentRoom.currentMember;
-    switch (curMember.role) {
-        case RoleTeacher:
-        case RoleStudent:{
-            [self isCameraAvailable:^(bool avilable) {
-                if (avilable) {
-                    self.cameraBtn.selected = !curMember.cameraEnable;
-                }else {
-                    self.cameraBtn.selected = YES;
-                }
-            }];
-            [self isMicrophoneAvailable:^(bool avilable) {
-                if (avilable) {
-                    self.microphoneBtn.selected = !curMember.microphoneEnable;
-                }else {
-                    self.microphoneBtn.selected = YES;
-                }
-            }];
-        }
-            break;
-        case RoleAudience:
-            self.switchCameraBtn.enabled = NO;
-            self.microphoneBtn.enabled = NO;
-            self.cameraBtn.enabled = NO;
-            [self.switchCameraBtn setBackgroundImage:[UIImage imageNamed:@"switchcamera_disable"]  forState:UIControlStateNormal];
-            [self.microphoneBtn setBackgroundImage:[UIImage imageNamed:@"speakerphone_disable"]  forState:UIControlStateNormal];
-            [self.cameraBtn setBackgroundImage:[UIImage imageNamed:@"tcamera_disable"]  forState:UIControlStateNormal];
-            break;
-    }
-}
-
-- (void)timeFunction:(NSTimer *)timer
-{
-    self.timeLable.text = [self formatJoinTime];
-    if (self.delegate && [self.delegate respondsToSelector:@selector(refreshClassroomStatus)]) {
-        [self.delegate refreshClassroomStatus];
-    }
-}
-
-- (void)stopDurationTimer {
-    [self.timeTimer setFireDate:[NSDate distantFuture]];
-    if (self.timeTimer.valid) {
-        [self.timeTimer invalidate];
-        self.timeTimer = nil;
-    }
-}
-
-- (void)tapEvent:(UIButton *)btn {
-    if (btn.tag == ClassroomTitleViewActionTagCamera) {
-        [self isCameraAvailable:^(bool avilable) {
-            if (!avilable) {
-                [KSPremissionAlert shareInstanceDisplayImage:CHECKDEVICETYPE_CAMREA message:@"请开启摄像头访问权限" showInView:self.superview cancel:^{
-                    
-                } confirm:^{
-                    [self openSettingView];
-                }];
-                return;
-            }else {
-                // 二次确认
-                if (btn.selected) {
-                    btn.selected = !btn.selected;
-                    if(self.delegate && [self.delegate respondsToSelector:@selector(classroomTitleView:didTapAtTag:)]) {
-                        [self.delegate classroomTitleView:btn didTapAtTag:btn.tag];
-                    }
-                }
-                else {
-                    [NormalAlertView showAlertWithTitle:@"确认关闭摄像头吗?" leftTitle:@"取消" rightTitle:@"确认" cancel:^{
-                        
-                    } confirm:^{
-                        btn.selected = !btn.selected;
-                        if(self.delegate && [self.delegate respondsToSelector:@selector(classroomTitleView:didTapAtTag:)]) {
-                            [self.delegate classroomTitleView:btn didTapAtTag:btn.tag];
-                        }
-                    }];
-                }
-            }
-        }];
-    }else if (btn.tag == ClassroomTitleViewActionTagMicrophone ) {
-        [self isMicrophoneAvailable:^(bool avilable) {
-            if (!avilable) {
-                [KSPremissionAlert shareInstanceDisplayImage:CHECKDEVICETYPE_MIC message:@"请开启麦克风访问权限" showInView:self.superview cancel:^{
-                    
-                } confirm:^{
-                    [self openSettingView];
-                }];
-                return;
-            }else {
-                // 二次确认
-                if (btn.selected) {
-                    btn.selected = !btn.selected;
-                    if(self.delegate && [self.delegate respondsToSelector:@selector(classroomTitleView:didTapAtTag:)]) {
-                        [self.delegate classroomTitleView:btn didTapAtTag:btn.tag];
-                    }
-                }
-                else {
-                    [NormalAlertView showAlertWithTitle:@"确认关闭麦克风吗?" leftTitle:@"取消" rightTitle:@"确认" cancel:^{
-                        
-                    } confirm:^{
-                        btn.selected = !btn.selected;
-                        if(self.delegate && [self.delegate respondsToSelector:@selector(classroomTitleView:didTapAtTag:)]) {
-                            [self.delegate classroomTitleView:btn didTapAtTag:btn.tag];
-                        }
-                    }];
-                }
-            }
-        }];
-    }else {
-        btn.selected = !btn.selected;
-        if(self.delegate && [self.delegate respondsToSelector:@selector(classroomTitleView:didTapAtTag:)]) {
-            [self.delegate classroomTitleView:btn didTapAtTag:btn.tag];
-        }
-    }
-}
-
-- (void)setDefaultButtons {
-    self.buttonImageArray = @[@"line_switch",@"switchcamera", @"speakerphone", @"tcamera", @"quiet", @"hangup"];
-    self.buttonHighlightedImageArray = @[@"line_switch",@"switchcamera_selected", @"speakerphone_selected", @"tcamera_selected", @"quiet_selected", @"hangup_selected"];
-    self.buttonCloseImageArray = @[@"line_switch",@"switchcamera_close", @"speakerphone_close", @"tcamera_close", @"quiet_close", @"hangup"];
-
-    for(int i = 0; i < self.buttonArray.count; i++) {
-        UIButton *button = [self.buttonArray objectAtIndex:i];
-        button.enabled = YES;
-        [button setBackgroundImage:[UIImage imageNamed:[self.buttonImageArray objectAtIndex:i]] forState:UIControlStateNormal];
-        [button setBackgroundImage:[UIImage imageNamed:[self.buttonCloseImageArray objectAtIndex:i]]  forState:UIControlStateSelected];
-        [button setBackgroundImage:[UIImage imageNamed:[self.buttonHighlightedImageArray objectAtIndex:i]] forState:UIControlStateHighlighted];
-        [button setBackgroundImage:[UIImage imageNamed:[self.buttonCloseImageArray objectAtIndex:i]] forState:UIControlStateSelected|UIControlStateHighlighted];
-        
-    }
-}
-
-- (void)isCameraAvailable:(void (^)(bool avilable))successBlock {
-    NSString *mediaType = AVMediaTypeVideo;                                                         //读取媒体类型
-    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType]; //读取设备授权状态
-    if (AVAuthorizationStatusAuthorized == authStatus) {
-        successBlock(YES);
-    } else if(authStatus == AVAuthorizationStatusNotDetermined) {
-        [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo
-                                 completionHandler:^(BOOL granted) {
-                                     dispatch_async(dispatch_get_main_queue(), ^{
-                                         if (granted) {
-                                             successBlock(YES);
-                                         } else {
-                                             successBlock(NO);
-                                         }
-                                     });
-                                 }];
-    }else {
-        successBlock(NO);
-    }
-}
-
--(void)isMicrophoneAvailable:(void (^)(bool avilable))successBlock  {
-    AVAudioSessionRecordPermission authStatus = [[AVAudioSession sharedInstance] recordPermission];
-    if (AVAudioSessionRecordPermissionGranted == authStatus) {
-        successBlock(YES);
-    } else if(authStatus == AVAudioSessionRecordPermissionUndetermined){
-        [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                if (granted) {
-                    successBlock(YES);
-                } else {
-                    successBlock(NO);
-                    
-                }
-            });
-        }];
-    }else {
-        successBlock(NO);
-    }
-}
-
-- (void)setDuration:(NSInteger)duration {
-    _duration = duration;
-    if (_duration < 300 && self.isCountDown == NO) {
-        self.isCountDown = YES;
-        self.timeLable.textColor = HexRGB(0x2DC7AA);
-        [self.timeLable.layer addAnimation:[self opacityForeverAnimation:0.5f] forKey:nil];
-    }
-}
-- (NSString *)formatJoinTime {
-    if (self.duration <= 0) {
-        return @"00:00:00";
-    }
-    NSInteger durationInteger = self.duration --;
-    NSInteger durationS = durationInteger % 60;
-    NSInteger durationM = ((durationInteger - durationS) / 60) % 60;
-    NSInteger durationH = (durationInteger - durationS - 60 * durationM) / 3600;
-    NSMutableArray * durationArr = [NSMutableArray new];
-    [durationArr addObject:[NSString stringWithFormat:@"%02ld", durationH]];
-    [durationArr addObject:[NSString stringWithFormat:@"%02ld", durationM]];
-    [durationArr addObject:[NSString stringWithFormat:@"%02ld", durationS]];
-    return [durationArr componentsJoinedByString:@":"];
-}
-
-- (UIImageView *)signalImageView {
-    if(!_signalImageView) {
-        _signalImageView = [[UIImageView alloc] init];
-        _signalImageView.image = [UIImage imageNamed:@"signal_1"];
-        _signalImageView.hidden = YES;
-    }
-    return _signalImageView;
-}
-
-- (UILabel *)timeLable {
-    if(!_timeLable) {
-        _timeLable = [[UILabel alloc] init];
-        _timeLable.font = [UIFont systemFontOfSize:14];
-        _timeLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-    }
-    return _timeLable;
-}
-
-- (UILabel *)titleLable {
-    if(!_titleLable) {
-        _titleLable = [[UILabel alloc] init];
-        _titleLable.font = [UIFont systemFontOfSize:17];
-        _titleLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-        _titleLable.text = [ClassroomService sharedService].currentRoom.roomId ? [ClassroomService sharedService].currentRoom.roomId : @"" ;
-    }
-    return _titleLable;
-}
-
-- (UIView *)toolView {
-    if(!_toolView) {
-        _toolView = [[UIView alloc] init];
-    }
-    return _toolView;
-}
-
-- (UIButton *)switchLineBtn {
-    if (!_switchLineBtn) {
-        _switchLineBtn = [[UIButton alloc] init];
-        _switchLineBtn.enabled = YES;
-        _switchLineBtn.tag = ClassroomTitleViewActionTagSwitchLine;
-        [_switchLineBtn addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _switchLineBtn;
-}
-
-- (UIButton *)switchCameraBtn {
-    if(!_switchCameraBtn) {
-        _switchCameraBtn = [[UIButton alloc] init];
-        _switchCameraBtn.enabled = YES;
-        _switchCameraBtn.tag = ClassroomTitleViewActionTagSwitchCamera;
-        [_switchCameraBtn addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-        
-    }
-    return _switchCameraBtn;
-}
-
-- (UIButton *)microphoneBtn {
-    if(!_microphoneBtn) {
-        _microphoneBtn = [[UIButton alloc] init];
-        _microphoneBtn.enabled = YES;
-        _microphoneBtn.tag =  ClassroomTitleViewActionTagMicrophone;
-        [_microphoneBtn addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-        
-    }
-    return _microphoneBtn;
-}
-
-- (UIButton *)cameraBtn {
-    if(!_cameraBtn) {
-        _cameraBtn = [[UIButton alloc] init];
-        _cameraBtn.enabled = YES;
-        _cameraBtn.tag =  ClassroomTitleViewActionTagCamera;
-        [_cameraBtn addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-        
-    }
-    return _cameraBtn;
-}
-
-- (UIButton *)muteBtn {
-    if(!_muteBtn) {
-        _muteBtn = [[UIButton alloc] init];
-        _muteBtn.enabled = YES;
-        _muteBtn.tag =  ClassroomTitleViewActionTagMute;
-        [_muteBtn addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-        
-    }
-    return _muteBtn;
-}
-
-- (UIButton *)hangupBtn {
-    if(!_hangupBtn) {
-        _hangupBtn = [[UIButton alloc] init];
-        _hangupBtn.enabled = YES;
-        _hangupBtn.tag =  ClassroomTitleViewActionTagHangup;
-        [_hangupBtn addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-        
-    }
-    return _hangupBtn;
-}
-
-- (NSMutableArray *)buttonArray {
-    if (!_buttonArray) {
-        _buttonArray = [[NSMutableArray alloc] init];
-    }
-    return _buttonArray;
-}
-
-- (NSTimer *)timeTimer {
-    if (_timeTimer == nil) {
-        
-        _timeTimer = [NSTimer scheduledTimerWithTimeInterval:1
-                                                      target:self
-                                                    selector:@selector(timeFunction:)
-                                                    userInfo:nil
-                                                     repeats:YES];
-        [[NSRunLoop currentRunLoop] addTimer:_timeTimer forMode:NSRunLoopCommonModes];
-    }
-    
-    return _timeTimer;
-}
-
-- (void)openSettingView {
-    if (@available(iOS 10, *)) {
-        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
-    } else {
-        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
-    }
-}
-
-#pragma mark === 永久闪烁的动画 ======
-- (CABasicAnimation *)opacityForeverAnimation:(CGFloat)time {
-    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
-    animation.fromValue = [NSNumber numberWithFloat:1.0f];
-    animation.toValue = [NSNumber numberWithFloat:0.0f];//这是透明度。
-    animation.autoreverses = YES;
-    animation.duration = time;
-    animation.repeatCount = MAXFLOAT;
-    animation.removedOnCompletion = NO;
-    animation.fillMode = kCAFillModeForwards;
-    animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
-    return animation;
-}
-
-@end

+ 0 - 43
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/ToolPanel/ToolPanelView.h

@@ -1,43 +0,0 @@
-//
-//  ToolPanelView.h
-//  SealClass
-//
-//  Created by Sin on 2019/2/28.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#define LLeftButtonWidht     24
-
-typedef enum : NSUInteger {
-    ToolPanelViewActionTagWhiteboard,
-    ToolPanelViewActionTagRecentlyShared,
-    ToolPanelViewActionTagOnlinePerson,
-    ToolPanelViewActionTagVideoList,
-    ToolPanelViewActionTagClassNews,
-    ToolPanelViewActionTagMusicMode,
-    ToolPanelViewActionTagStopMusic,
-} ToolPanelViewActionTag;
-
-@class ToolPanelView;
-@protocol ToolPanelViewDelegate <NSObject>
-
-- (void)toolPanelView:(UIButton *)button didTapAtTag:(ToolPanelViewActionTag)tag;
-
-@end
-
-@interface ToolPanelView : UIView
-
-@property (nonatomic, strong) UIButton *musicBtn;
-
-@property (nonatomic, strong) NSMutableArray *buttonArray;
-
-@property (nonatomic, weak) id<ToolPanelViewDelegate> delegate;
-
-- (void)reloadToolPanelView;
-- (void)foldToolPanelView;
-- (void)clearUnreadMessage;
-
-@end
-
-

+ 0 - 194
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/ToolPanel/ToolPanelView.m

@@ -1,194 +0,0 @@
-//
-//  ToolPanelView.m
-//  SealClass
-//
-//  Created by Sin on 2019/2/28.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "ToolPanelView.h"
-#import "ClassroomService.h"
-#import <RongIMLib/RongIMLib.h>
-
-
-
-@interface ToolPanelView ()
-
-@property (nonatomic, strong) UIView *toolView;
-@property (nonatomic, strong) NSArray *buttonImageArray;
-@property (nonatomic, strong) NSArray *buttonSelectedImageArray;
-@property (nonatomic, strong) NSArray *buttonOpenHighlightedImageArray;
-@property (nonatomic, strong) NSArray *buttonHighlightedImageArray;
-
-@end
-
-@implementation ToolPanelView
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    self = [super initWithFrame:frame];
-    if (self) {
-        self.backgroundColor = [UIColor colorWithHexString:@"293A3D" alpha:0.95];
-        [self addSubviews];
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onReceiveMessageNotification:) name:OnReceiveMessageNotification object:nil];
-    }
-    return self;
-}
-
-- (void)onReceiveMessageNotification:(NSNotification *)notification{
-    NSDictionary *dic = notification.object;
-    RCMessage *message = dic[@"message"];
-    Classroom *currentRoom = [ClassroomService sharedService].currentRoom;
-    if ([message.targetId isEqualToString:currentRoom.roomId]) {
-        dispatch_main_async_safe(^{
-            [self updateClassNewsButton];
-        });
-    }
-}
-
-- (void)addSubviews {
-    [self addSubview:self.toolView];
-    [self addButtonsIn:self.toolView];
-}
-
-- (void)tapEvent:(UIButton *)btn {
-    
-    if (btn.tag == ToolPanelViewActionTagMusicMode || btn.tag == ToolPanelViewActionTagStopMusic) {
-        btn.selected = !btn.selected;
-        if(self.delegate && [self.delegate respondsToSelector:@selector(toolPanelView:didTapAtTag:)]) {
-            [self.delegate toolPanelView:btn didTapAtTag:btn.tag];
-        }
-        return;
-    }
-    for (UIButton *button in self.buttonArray) {
-        if (button.tag != btn.tag && button.tag != ToolPanelViewActionTagMusicMode && button.tag != ToolPanelViewActionTagStopMusic) {
-            button.selected = NO;
-        }
-    }
-    if (btn.tag == ToolPanelViewActionTagClassNews) {
-        [self clearUnreadMessage];
-    }
-    btn.selected = !btn.selected;
-    [self setVedioStatus];
-    if(self.delegate && [self.delegate respondsToSelector:@selector(toolPanelView:didTapAtTag:)]) {
-        [self.delegate toolPanelView:btn didTapAtTag:btn.tag];
-    }
-}
-- (void)updateClassNewsButton{
-    Classroom *currentRoom = [ClassroomService sharedService].currentRoom;
-    int unreadCount = [[RCIMClient sharedRCIMClient] getUnreadCount:ConversationType_GROUP targetId:currentRoom.roomId];
-    UIButton *button = (UIButton *)[self viewWithTag:ToolPanelViewActionTagClassNews];
-    if (unreadCount > 0 && !button.selected) {
-        [button setBackgroundImage:[UIImage imageNamed:@"classnews_unread"] forState:UIControlStateNormal];
-        [button setBackgroundImage:[UIImage imageNamed:@"classnews_unread_pressed"] forState:UIControlStateHighlighted];
-    }else{
-        [button setBackgroundImage:[UIImage imageNamed:@"classnews"] forState:UIControlStateNormal];
-        [button setBackgroundImage:[UIImage imageNamed:@"classnews_selected"] forState:UIControlStateHighlighted];
-    }
-}
-
-- (void)clearUnreadMessage{
-    Classroom *currentRoom = [ClassroomService sharedService].currentRoom;
-    [[RCIMClient sharedRCIMClient] clearMessagesUnreadStatus:ConversationType_GROUP targetId:currentRoom.roomId];
-    UIButton *button = (UIButton *)[self viewWithTag:ToolPanelViewActionTagClassNews];
-    [button setBackgroundImage:[UIImage imageNamed:@"classnews"] forState:UIControlStateNormal];
-    [button setBackgroundImage:[UIImage imageNamed:@"classnews_selected"] forState:UIControlStateHighlighted];
-}
-
-- (void)addButtonsIn:(UIView *)toolView; {
-    self.buttonArray = [[NSMutableArray alloc] init];
-    CGFloat buttonX = (self.bounds.size.width - LLeftButtonWidht ) / 2.0;
-    self.buttonImageArray = @[@"whiteboard", @"recentlyshared", @"onlineperson", @"videolist", @"classnews",@"music_mode_off"/*,@"stop_music"*/];
-    self.buttonSelectedImageArray = @[@"whiteboard_selected", @"recentlyshared_open", @"onlineperson_open", @"videolist_open", @"classnews_open", @"music_mode_on"/*, @"stop_music_h"*/];
-    self.buttonOpenHighlightedImageArray = @[@"whiteboard_selected", @"recentlyshared_open_selected", @"onlineperson_open_selected", @"videolist_open_selected", @"classnews_open_selected", @"music_mode_on"/*, @"stop_music_h"*/];
-    self.buttonHighlightedImageArray = @[@"whiteboard_selected", @"recentlyshared_selected", @"onlineperson_selected", @"videolist_selected", @"classnews_selected", @"music_mode_on"/*, @"stop_music_h"*/];
-    
-    CGFloat buttonMargin = (self.bounds.size.height - LLeftButtonWidht* self.buttonImageArray.count)/(self.buttonImageArray.count-1 + 2);
-    for(int i = 0; i < self.buttonImageArray.count; i++) {
-        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(buttonX, buttonMargin + i * (LLeftButtonWidht + buttonMargin), LLeftButtonWidht, LLeftButtonWidht)];
-        button.tag = i;
-        [button setBackgroundImage:[UIImage imageNamed:[self.buttonImageArray objectAtIndex:i]] forState:UIControlStateNormal];
-        [button setBackgroundImage:[UIImage imageNamed:[self.buttonSelectedImageArray objectAtIndex:i]]  forState:UIControlStateSelected];
-        [button setBackgroundImage:[UIImage imageNamed:[self.buttonHighlightedImageArray objectAtIndex:i]] forState:UIControlStateHighlighted];
-        [button setBackgroundImage:[UIImage imageNamed:[self.buttonOpenHighlightedImageArray objectAtIndex:i]] forState:(UIControlStateHighlighted|UIControlStateSelected)];
-        [button addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-        [toolView addSubview:button];
-        [self.buttonArray addObject:button];
-        [self setButtonImage];
-        if (button.tag == ToolPanelViewActionTagVideoList) {
-            button.selected = YES;
-        }
-        if (button.tag == ToolPanelViewActionTagMusicMode) {
-            self.musicBtn = button;
-            button.selected = NO;
-        }
-    }
-    
-}
-- (void)setButtonImage {
-    RoomMember *currentMember = [ClassroomService sharedService].currentRoom.currentMember;
-    for (UIButton * button in self.buttonArray) {
-        if (button.tag == ToolPanelViewActionTagWhiteboard) {
-            if (currentMember.role !=RoleTeacher) {
-                [button setBackgroundImage:[UIImage imageNamed:@"whiteboard_disable"] forState:UIControlStateNormal];
-                button.enabled = NO;
-            }else {
-                button.enabled = YES;
-                [button setBackgroundImage:[UIImage imageNamed:@"whiteboard"] forState:UIControlStateNormal];
-            }
-        }
-        if (button.tag == ToolPanelViewActionTagRecentlyShared) {
-            if (currentMember.role !=RoleTeacher) {
-                [button setBackgroundImage:[UIImage imageNamed:@"recentlyshared_disable"] forState:UIControlStateNormal];
-                button.enabled = NO;
-            }else {
-                button.enabled = YES;
-                [button setBackgroundImage:[UIImage imageNamed:@"recentlyshared"] forState:UIControlStateNormal];
-            }
-        }
-        if (button.tag == ToolPanelViewActionTagOnlinePerson) {
-            if (currentMember.role !=RoleTeacher) {
-                [button setBackgroundImage:[UIImage imageNamed:@"onlineperson_selected"] forState:UIControlStateNormal];
-                button.enabled = NO;
-            }else {
-                button.enabled = YES;
-                [button setBackgroundImage:[UIImage imageNamed:@"onlineperson"] forState:UIControlStateNormal];
-            }
-        }
-    }
-}
-
-- (void)reloadToolPanelView {
-    [self setButtonImage];
-}
-
-- (void)setVedioStatus{
-    BOOL isSelectVideo = YES;
-    for (UIButton * button in self.buttonArray) {
-        if(button.selected && button.tag != ToolPanelViewActionTagVideoList && button.tag != ToolPanelViewActionTagMusicMode && button.tag != ToolPanelViewActionTagMusicMode){
-            isSelectVideo = NO;
-        }
-    }
-    UIButton *videoListButton = (UIButton *)[self viewWithTag:ToolPanelViewActionTagVideoList];
-    videoListButton.selected = isSelectVideo;
-}
-
-- (void)foldToolPanelView{
-    for (UIButton * button in self.buttonArray) {
-        if(button.tag == ToolPanelViewActionTagRecentlyShared || button.tag == ToolPanelViewActionTagOnlinePerson || button.tag == ToolPanelViewActionTagWhiteboard){
-            if (button.selected) {
-                button.selected = NO;
-            }
-        }
-    }
-    [self setVedioStatus];
-}
-
-- (UIView *)toolView {
-    if(!_toolView) {
-        _toolView = [[UIView alloc] initWithFrame:self.bounds];
-    }
-    return _toolView;
-}
-
-@end

+ 0 - 38
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/UpgradeApply/UpgradeDidApplyView.h

@@ -1,38 +0,0 @@
-//
-//  UpgradeDidApplyView.h
-//  SealClass
-//
-//  Created by liyan on 2019/3/11.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#import "RoomMember.h"
-
-typedef enum : NSUInteger {
-    UpgradeDidApplyViewAccept,
-    UpgradeDidApplyViewRefuse,
-} UpgradeDidApplyViewActionTag;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class UpgradeDidApplyView;
-@protocol UpgradeDidApplyViewDelegate <NSObject>
-
-- (void)upgradeDidApplyView:(UpgradeDidApplyView *)topView didTapAtTag:(UpgradeDidApplyViewActionTag)tag;
-
-@end
-
-@interface UpgradeDidApplyView : UIView
-
-@property (nonatomic, weak) id<UpgradeDidApplyViewDelegate> delegate;
-
-- (instancetype)initWithMember:(RoomMember *)member ticket:(NSString *)ticket;
-
-@property (nonatomic, strong) RoomMember *member;
-
-@property (nonatomic, strong) NSString *ticket;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 105
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/UpgradeApply/UpgradeDidApplyView.m

@@ -1,105 +0,0 @@
-//
-//  UpgradeDidApplyView.m
-//  SealClass
-//
-//  Created by liyan on 2019/3/11.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "UpgradeDidApplyView.h"
-#import "Masonry.h"
-
-#define TLeftOffset 204
-#define TViewHeight 44
-
-@interface UpgradeDidApplyView()
-
-@property (nonatomic, strong) UILabel *titleLable;
-@property (nonatomic, strong) UIButton *acceptButton;
-@property (nonatomic, strong) UIButton *cancelButton;
-
-@end
-
-@implementation UpgradeDidApplyView
-
-
-- (instancetype)initWithMember:(RoomMember *)member ticket:(NSString *)ticket{
-    self = [super initWithFrame:CGRectMake(TLeftOffset, 0, kScreenWidth - TLeftOffset*2, TViewHeight)];
-    if (self) {
-        self.backgroundColor = [UIColor colorWithHexString:@"FCFCFC" alpha:1];
-        self.layer.cornerRadius = 2;
-        self.layer.masksToBounds = YES;
-        self.member = member;
-        self.ticket = ticket;
-        [self addSubviews];
-    }
-    return self;
-}
-
-- (void)addSubviews {
-    [self addSubview:self.titleLable];
-    [self addSubview:self.acceptButton];
-    [self addSubview:self.cancelButton];
-    [self.cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.right.equalTo(self.mas_right).offset(-15);
-        make.top.equalTo(self.mas_top).offset(10);
-        make.height.equalTo(@24);
-        make.width.equalTo(@24);
-    }];
-    [self.acceptButton mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.mas_top).offset(10);
-        make.right.equalTo(self.cancelButton.mas_left).offset(-20);
-        make.height.equalTo(@24);
-        make.width.equalTo(@24);
-    }];
-    [self.titleLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.right.equalTo(self.acceptButton.mas_left).offset(-20);
-        make.top.equalTo(self.mas_top).offset(11);
-        make.left.equalTo(self.mas_left).offset(16);
-        make.height.equalTo(@22);
-    }];
-}
-
-- (void)buttonAction:(UIButton *)button {
-    if(self.delegate && [self.delegate respondsToSelector:@selector(upgradeDidApplyView:didTapAtTag:)]) {
-        [self.delegate upgradeDidApplyView:self didTapAtTag:button.tag];
-    }
-}
-
-- (UILabel *)titleLable {
-    if(!_titleLable) {
-        _titleLable = [[UILabel alloc] init];
-        _titleLable.font = [UIFont systemFontOfSize:16];
-        _titleLable.textAlignment = NSTextAlignmentLeft;
-        _titleLable.text = [NSString stringWithFormat:@"%@ %@",self.member.name,NSLocalizedStringFromTable(@"RequestSpeek", @"SealClass", nil)];
-        _titleLable.lineBreakMode = NSLineBreakByTruncatingMiddle;
-        _titleLable.textColor = [UIColor colorWithHexString:@"303030" alpha:1];
-    }
-    return _titleLable;
-}
-
-- (UIButton *)acceptButton {
-    if(!_acceptButton) {
-        _acceptButton = [[UIButton alloc] init];
-        [_acceptButton setBackgroundImage:[UIImage imageNamed:@"accept"] forState:UIControlStateNormal];
-        [_acceptButton setBackgroundImage:[UIImage imageNamed:@"accept_sel"]  forState:UIControlStateSelected];        _acceptButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
-        _acceptButton.tag = UpgradeDidApplyViewAccept;
-        [_acceptButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
-        
-    }
-    return _acceptButton;
-}
-
-- (UIButton *)cancelButton {
-    if(!_cancelButton) {
-        _cancelButton = [[UIButton alloc] init];
-        [_cancelButton setBackgroundImage:[UIImage imageNamed:@"refuse"] forState:UIControlStateNormal];
-        [_cancelButton setBackgroundImage:[UIImage imageNamed:@"refuse_sel"]  forState:UIControlStateSelected];
-        _cancelButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
-        _cancelButton.tag = UpgradeDidApplyViewRefuse;
-        [_cancelButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _cancelButton;
-}
-
-@end

+ 0 - 28
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/VideoList/VideoListCell.h

@@ -1,28 +0,0 @@
-//
-//  VideoListCell.h
-//  SealClass
-//
-//  Created by liyan on 2019/3/5.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#import "RoomMember.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface VideoListCell : UITableViewCell
-
-@property (nonatomic, strong) UIView *videoView;
-
-@property (nonatomic, strong) UILabel *WaitLable;
-
-- (void)setModel:(RoomMember *)member showAssistantPrompt:(BOOL)assistentPrompt showTeacherPrompt:(BOOL)teacherPrompt;
-
-- (void)renderVideo:(RoomMember *)member;
-
-- (void)cancelVideo;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 245
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/VideoList/VideoListCell.m

@@ -1,245 +0,0 @@
-//
-//  VideoListCell.m
-//  SealClass
-//
-//  Created by liyan on 2019/3/5.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "VideoListCell.h"
-#import "Masonry.h"
-#import "RTCService.h"
-#import "ClassroomService.h"
-#import "KSRemoteUserManager.h"
-#import "LocalRenderManager.h"
-
-#define  RoleAssistantColor [UIColor colorWithHexString:@"F5A623" alpha:1]
-#define  RoleTeacherColor  [UIColor colorWithHexString:@"FF5500" alpha:1]
-
-@interface VideoListCell()
-
-@property (nonatomic, strong) UIView *backGroundView;
-@property (nonatomic, strong) UILabel *roleLable;
-@property (nonatomic, strong) UILabel *nameLable;
-@property (nonatomic, strong) UILabel *promptLable;
-
-@end
-
-@implementation VideoListCell
-
-- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
-{
-    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
-    if (self) {
-        self.selectionStyle = UITableViewCellSelectionStyleNone;
-        self.backgroundColor = [UIColor clearColor];
-        [self addSubViews];
-    }
-    return self;
-}
-
-- (void)addSubViews {
-    [self.contentView addSubview:self.backGroundView];
-    [self.contentView addSubview:self.WaitLable];
-    [self.contentView addSubview:self.promptLable];
-    [self.contentView addSubview:self.videoView];
-    [self.contentView addSubview:self.roleLable];
-    [self.contentView addSubview:self.nameLable];
-
-    self.videoView.frame = CGRectMake(0, 10, 112, 94.0-10);
-   
-    [self.backGroundView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.equalTo(self.contentView.mas_left).offset(0);
-        make.top.equalTo(self.contentView.mas_top).offset(10);
-        make.bottom.equalTo(self.contentView.mas_bottom).offset(0);
-        make.right.equalTo(self.contentView.mas_right).offset(0);
-    }];
-    [self.WaitLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.centerY.equalTo(self.videoView.mas_centerY);
-        make.centerX.equalTo(self.videoView.mas_centerX);
-        make.height.equalTo(@25);
-        make.width.equalTo(@84);
-    }];
-    [self.promptLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.centerY.equalTo(self.videoView.mas_centerY);
-        make.centerX.equalTo(self.videoView.mas_centerX);
-        make.height.equalTo(@25);
-        make.width.equalTo(@84);
-    }];
-    [self.roleLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.equalTo(self.contentView.mas_left).offset(4);
-        make.top.equalTo(self.contentView.mas_top).offset(14);
-        make.height.equalTo(@18);
-        make.width.equalTo(@24);
-    }];
-    [self.nameLable mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.equalTo(self.contentView.mas_left).offset(4);
-        make.bottom.equalTo(self.contentView.mas_bottom).offset(-4);
-        make.height.equalTo(@12);
-        make.width.equalTo(self.contentView.mas_width);
-    }];
-
-}
-
-
-- (void)setModel:(RoomMember *)member showAssistantPrompt:(BOOL)assistentPrompt showTeacherPrompt:(BOOL)teacherPrompt {
-    [self resetDefaultStyle];
-    if (member == nil) {
-        return;
-    }
-    if (member.userId == nil) {
-        self.promptLable.hidden = YES;
-        self.nameLable.hidden = YES;
-        self.roleLable.hidden = YES;
-        self.WaitLable.hidden = NO;
-        self.videoView.hidden = YES;
-    }else {
-        switch (member.role) {
-            case RoleTeacher:
-                if (teacherPrompt) {
-                    self.videoView.hidden = YES;
-                    self.promptLable.hidden = NO;
-                    self.promptLable.text = NSLocalizedStringFromTable(@"Teaching", @"SealClass", nil);
-                }else {
-                    self.videoView.hidden = NO;
-                    self.promptLable.hidden = YES;
-                }
-                self.roleLable.backgroundColor = RoleTeacherColor;
-                self.roleLable.text = NSLocalizedStringFromTable(@"RoleTeacher", @"SealClass", nil);
-                break;
-            case RoleStudent:
-                self.roleLable.hidden = YES;
-                break;
-            case RoleAudience:
-                self.roleLable.hidden =YES;
-                
-                break;
-                
-            default:
-                break;
-        }
-        [self remakeNameLable:member];
-        [self renderVideo:member];
-    }
-}
-
-- (void)resetDefaultStyle {
-    self.nameLable.text = nil;
-    self.roleLable.text = nil;
-    self.roleLable.backgroundColor = [UIColor clearColor];
-    self.roleLable.hidden = NO;
-    self.nameLable.hidden = NO;
-    self.WaitLable.hidden = YES;
-    self.promptLable.text = nil;
-    self.promptLable.hidden = YES;
-    self.videoView.hidden = NO;
-    [self cancelVideo];
-}
-
-- (void)renderVideo:(RoomMember *)member {
-    if(![self canRenderVideo:member]) {
-        return;
-    }
-    // 涉及到请求返回比较慢的情况 主屏已经渲染
-    if ([[ClassroomService sharedService].currentRoom.currentMemberId isEqualToString:member.userId] && [LocalRenderManager shareInstance].hadRenderMainView) {
-        return;
-    }
-    if([[ClassroomService sharedService].currentRoom.currentMemberId isEqualToString:member.userId]) {
-        RoomMember *curMemeber =[ClassroomService sharedService].currentRoom.currentMember;
-        [[RTCService sharedInstance] renderLocalVideoOnView:self.videoView cameraEnable:curMemeber.cameraEnable];
-    }else {
-        [[RTCService sharedInstance] renderRemoteVideoOnView:self.videoView forUser:member.userId];
-    }
-}
-
-- (void)cancelVideo {
-    [[RTCService sharedInstance] cancelRenderVideoInView:self.videoView];
-}
-
-- (void)remakeNameLable:(RoomMember *)member {
-    NSString * nameTxt = [[NSString alloc] init];
-    nameTxt =  member.name.length > 5 ? [NSString stringWithFormat:@"%@...",[member.name substringToIndex:5]] : member.name;
-    self.nameLable.text = nameTxt;
-}
-
-#pragma mark - private method
-//当前的 cell 是否可以渲染视频
-- (BOOL)canRenderVideo:(RoomMember *)member {
-    //主视频区渲染了该用户的视频,则 视频列表 cell 不显示视频
-    //旁观者不显示视频
-    //主视频区蒙版渲染了该用户的视频,则 视频列表 cell 不显示视频
-    Classroom *room = [ClassroomService sharedService].currentRoom;
-    if([room.currentDisplayURI isEqualToString:member.userId] || member.role == RoleAudience || [room.currentMaskUserId isEqualToString:member.userId]) {
-        return NO;
-    }
-    return YES;
-}
-
-- (UIView *)backGroundView {
-    if(!_backGroundView) {
-        _backGroundView = [[UIView alloc] init];
-        _backGroundView.backgroundColor = [UIColor colorWithHexString:@"3D4041" alpha:1];
-        _backGroundView.hidden = NO;
-    }
-    return _backGroundView;
-}
-
-- (UIView *)videoView {
-    if(!_videoView) {
-        _videoView = [[UIView alloc] init];
-        _videoView.backgroundColor = [UIColor colorWithHexString:@"3D4041" alpha:1];
-    }
-    return _videoView;
-}
-
-- (UILabel *)roleLable {
-    if(!_roleLable) {
-        _roleLable = [[UILabel alloc] init];
-        _roleLable.font = [UIFont systemFontOfSize:10];
-        _roleLable.textAlignment = NSTextAlignmentCenter;
-        _roleLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-        _roleLable.layer.cornerRadius = 4;
-        _roleLable.layer.masksToBounds = YES;
-    }
-    return _roleLable;
-}
-- (UILabel *)nameLable {
-    if(!_nameLable) {
-        _nameLable = [[UILabel alloc] init];
-        _nameLable.font = [UIFont systemFontOfSize:11];
-        _nameLable.numberOfLines = 1;
-        _nameLable.textAlignment = NSTextAlignmentLeft;
-        _nameLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-    }
-    return _nameLable;
-}
-
-- (UILabel *)WaitLable {
-    if(!_WaitLable) {
-        _WaitLable = [[UILabel alloc] init];
-        _WaitLable.font = [UIFont systemFontOfSize:9];
-        _WaitLable.numberOfLines = 2;
-        _WaitLable.textAlignment = NSTextAlignmentCenter;
-        _WaitLable.backgroundColor = [UIColor clearColor];
-        _WaitLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-        _WaitLable.text =  NSLocalizedStringFromTable(@"WaitTeacher", @"SealClass", nil);
-        _WaitLable.hidden = YES;
-    }
-    return _WaitLable;
-}
-
-- (UILabel *)promptLable {
-    if(!_promptLable) {
-        _promptLable = [[UILabel alloc] init];
-        _promptLable.font = [UIFont systemFontOfSize:9];
-        _promptLable.numberOfLines = 1;
-        _promptLable.textAlignment = NSTextAlignmentCenter;
-        _promptLable.backgroundColor = [UIColor clearColor];
-        _promptLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-        _promptLable.text =  NSLocalizedStringFromTable(@"WaitTeacher", @"SealClass", nil);
-        _promptLable.hidden = YES;
-    }
-    return _promptLable;
-}
-
-@end

+ 0 - 36
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/VideoList/VideoListView.h

@@ -1,36 +0,0 @@
-//
-//  VideoListView.h
-//  SealClass
-//
-//  Created by liyan on 2019/3/5.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-@class VideoListView,RoomMember;
-@protocol VideoListViewDelegate <NSObject>
-
-- (void)videoListView:(VideoListView *_Nullable)view didTap:(RoomMember *_Nullable)member;
-
-@end
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface VideoListView : UIView
-
-@property (nonatomic, assign) BOOL showAssistantPrompt;
-
-@property (nonatomic, assign) BOOL showTeacherPrompt;
-
-@property (nonatomic, weak) id<VideoListViewDelegate> delegate;
-
-
-- (void)updateUserVideo:(NSString *)userId;
-
-- (void)reloadVideoList;
-
-- (void)showAssistantPrompt:(BOOL)showAssistantPrompt showTeacherPrompt:(BOOL)showTeacherPrompt;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 181
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/Classroom/View/VideoList/VideoListView.m

@@ -1,181 +0,0 @@
-//
-//  VideoListView.m
-//  SealClass
-//
-//  Created by liyan on 2019/3/5.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "VideoListView.h"
-#import "VideoListCell.h"
-#import "ClassroomService.h"
-#import "RTCService.h"
-
-@interface VideoListView ()<UITableViewDelegate, UITableViewDataSource>
-
-@property (nonatomic, strong) UITableView *videoListTableView;
-@property (nonatomic, strong) NSMutableArray *videoDataSource;
-@property (nonatomic, strong) dispatch_queue_t videoListQueue;
-
-@end
-
-@implementation VideoListView
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    self = [super initWithFrame:frame];
-    if (self) {
-        self.backgroundColor = [UIColor clearColor];
-        [self addSubview:self.videoListTableView];
-        [self getDataSource];
-        self.showAssistantPrompt = NO;
-        self.showTeacherPrompt = NO;
-    }
-    return self;
-}
-
-- (void)getDataSource {
-    //讲师第一,自己第二
-    dispatch_async(self.videoListQueue, ^{
-        NSArray *tempArray = [ClassroomService sharedService].currentRoom.memberList;
-        if (tempArray.count <= 0) {
-            return;
-        }
-        NSSortDescriptor * des = [[NSSortDescriptor alloc] initWithKey:@"joinTime" ascending:YES];
-        NSMutableArray *sortArray = [[tempArray sortedArrayUsingDescriptors:@[des]] mutableCopy];
-        RoomMember *currentMember = [ClassroomService sharedService].currentRoom.currentMember;
-        RoomMember *teacher = [ClassroomService sharedService].currentRoom.teacher;
-        __block NSInteger teacherIdx = -1;
-        __block  NSInteger meIdx = -1;
-        NSMutableIndexSet *set = [[NSMutableIndexSet alloc]init];
-        
-        for (int i = 0; i < [sortArray count]; i++ ) {
-            RoomMember *member = (RoomMember *)[sortArray objectAtIndex:i];
-            if ([member.userId isEqualToString:currentMember.userId]) {
-                meIdx = i;
-            }else {
-                if (member.role == RoleTeacher) {
-                    teacherIdx = i;
-                }
-                if (member.role == RoleAudience) {
-                    [set addIndex:i];//旁观者不能被任何他人看见,如果自己是旁观者自己可以看见自己
-                }
-            }
-        }
-        
-        NSMutableArray *lastArray = [[NSMutableArray alloc] init];
-        if (teacherIdx >= 0) {
-            [lastArray addObject:teacher];
-            [set addIndex:teacherIdx];
-        }
-        if (meIdx >= 0) {
-            [lastArray addObject:currentMember];
-            [set addIndex:meIdx];
-        }
-        if (set.count >0) {
-            [sortArray removeObjectsAtIndexes:set];
-        }
-        
-        [lastArray addObjectsFromArray:sortArray];
-        if (teacher == nil) {
-            RoomMember *member = [[RoomMember alloc] init];
-            [lastArray insertObject:member atIndex:0];
-        }
-        dispatch_async(dispatch_get_main_queue(), ^{
-            self.videoDataSource = [lastArray mutableCopy];
-            [self.videoListTableView reloadData];
-        });
-    });
-    
-}
-
-- (void)updateUserVideo:(NSString *)userId {
-    dispatch_async(self.videoListQueue, ^{
-        for(int i=0;i<self.videoDataSource.count;i++) {
-            RoomMember *member = self.videoDataSource[i];
-            if([member.userId isEqualToString:userId]) {
-                NSIndexPath *index = [NSIndexPath indexPathForRow:i inSection:0];
-                dispatch_async(dispatch_get_main_queue(), ^{
-                    [self.videoListTableView reloadRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationNone];
-                });
-            }
-        }
-    });
-}
-
-- (void)reloadVideoList {
-    [self getDataSource];
-}
-
-- (void)showAssistantPrompt:(BOOL)showAssistantPrompt showTeacherPrompt:(BOOL)showTeacherPrompt {
-    self.showAssistantPrompt = showAssistantPrompt;
-    self.showTeacherPrompt = showTeacherPrompt;
-    [self reloadVideoList];
-}
-
-#pragma mark - tableViewDelegate
--(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-    static NSString * cellName = @"VideoListCell";
-    VideoListCell * cell = [tableView dequeueReusableCellWithIdentifier:cellName];
-    if (cell == nil) {
-        cell = [[VideoListCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellName];
-    }
-    if (self.videoDataSource.count > 0) {
-        [cell setModel:[self.videoDataSource objectAtIndex:indexPath.row] showAssistantPrompt:self.showAssistantPrompt showTeacherPrompt:self.showTeacherPrompt];
-    }
-    return cell;
-}
-
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    RoomMember *mem = [self.videoDataSource objectAtIndex:indexPath.row];
-    if([self.delegate respondsToSelector:@selector(videoListView:didTap:)]) {
-        [self.delegate videoListView:self didTap:mem];
-    }
-}
-
--(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    if (self.videoDataSource != nil) {
-        return self.videoDataSource.count;
-    }
-    return 0;
-}
-
--(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    return 94.0;
-}
-
-- (UITableView *)videoListTableView {
-    if(!_videoListTableView) {
-        CGSize size = self.bounds.size;
-        _videoListTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height) style:UITableViewStylePlain];
-        _videoListTableView.backgroundColor = [UIColor clearColor];
-        _videoListTableView.delegate = self;
-        _videoListTableView.dataSource = self;
-        _videoListTableView.bounces = NO;
-        if (@available(iOS 11.0, *)) {
-            _videoListTableView.insetsContentViewsToSafeArea = NO;
-        }
-        _videoListTableView.separatorColor=[UIColor clearColor];
-        _videoListTableView.showsVerticalScrollIndicator = NO;
-        UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, size.width, 10)];
-        footerView.backgroundColor = [UIColor clearColor];
-        _videoListTableView.tableFooterView = footerView;
-    }
-    return _videoListTableView;
-}
-
-- (NSArray *)videoDataSource {
-    if(!_videoDataSource) {
-        _videoDataSource = [[NSMutableArray alloc] init];
-    }
-    return _videoDataSource;
-}
-
-- (dispatch_queue_t)videoListQueue {
-    if(!_videoListQueue) {
-        _videoListQueue = dispatch_queue_create("cn.rongcloud.sealclass.videolist", DISPATCH_QUEUE_SERIAL);
-    }
-    return _videoListQueue;
-}
-@end

+ 0 - 117
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Sections/NewWhiteboard/KSWhiteboardControl.m

@@ -1,117 +0,0 @@
-//
-//  KSWhiteboardControl.m
-//  TeacherDaya
-//
-//  Created by Kyle on 2019/10/31.
-//  Copyright © 2019 DayaMusic. All rights reserved.
-//
-
-#import "KSWhiteboardControl.h"
-
-@interface KSWhiteboardControl ()<KSWhiteboardViewDelegate>
-
-@property(nonatomic, weak) id<KSWhiteboardControlDelegate> delegate;
-
-@property (nonatomic, assign) CGRect viewFrame;
-
-@end
-
-@implementation KSWhiteboardControl
-
-- (instancetype)initWithDelegate:(id<KSWhiteboardControlDelegate>)delegate viewFrame:(CGRect)viewFrame {
-    self = [super init];
-    if (self) {
-        self.viewFrame = viewFrame;
-        self.delegate = delegate;
-    }
-    return self;
-}
-
-- (void)loadWBoardWithFrame:(CGRect)frame name:(NSString *)name {
-    self.wbView.currentFrame = frame;
-    self.wbView.hidden = NO;
-    self.wbView.boardView.hidden = NO;
-    [self.wbView joinWhiteRoom];
-    [self.wbView reloadWhiteBoardWithName:name];
-}
-
-- (void)hideBoard {
-    [self.wbView leaveRoom];
-    self.wbView.hidden = YES;
-    self.wbView.boardView.hidden = YES;
-}
-
-- (void)destroyBoard {
-    [self.wbView destroy];
-}
-
-- (void)turnPage:(NSInteger)pageNum {
-    
-}
-
-- (void)setWBoardFrame:(CGRect)newFrame {
-    self.wbView.currentFrame = newFrame;
-}
-
-- (void)moveWBoard:(CGFloat)offset {
-    CGRect newFrame = CGRectMake(self.wbView.currentFrame.origin.x+offset, self.wbView.currentFrame.origin.y, self.wbView.currentFrame.size.width, self.wbView.currentFrame.size.height);
-    self.wbView.currentFrame = newFrame;
-}
-
-- (void)moveToSuperView:(UIView *)superView {
-    [superView addSubview:self.wbView];
-}
-
-#pragma mark - WhiteboardViewDelegate
-
-- (void)didTurnPage:(NSInteger)pageNum {
-    if (self.delegate && [self.delegate respondsToSelector:@selector(didTurnPage:)]) {
-        [self.delegate didTurnPage:pageNum];
-    }
-}
-
-- (void)whiteboardViewDidChangeZoomScale:(float)scale{
-    if (self.delegate && [self.delegate respondsToSelector:@selector(whiteboardViewDidChangeZoomScale:)]) {
-        [self.delegate whiteboardViewDidChangeZoomScale:scale];
-    }
-}
-
-- (void)needRefreshBoardCount {
-    if (self.delegate && [self.delegate respondsToSelector:@selector(needRefreshWhiteboardList)]) {
-        [self.delegate needRefreshWhiteboardList];
-    }
-}
-
-- (void)showTopTitleView:(UIView *)touchView {
-    if (self.delegate && [self.delegate respondsToSelector:@selector(needShowTopTitleView:)]) {
-        [self.delegate needShowTopTitleView:touchView];
-    }
-}
-
-- (void)joinWhiteboardRoomStatus:(JOINROOMSTATUS)status {
-    if (self.delegate && [self.delegate respondsToSelector:@selector(connectionWhiteboardStatus:)]) {
-        [self.delegate connectionWhiteboardStatus:status];
-    }
-}
-
-#pragma mark - Getters & setters
-
-- (KSWhiteboardView *)wbView {
-    if(!_wbView) {
-        _wbView = [[KSWhiteboardView alloc] initWithDelegate:self frame:self.viewFrame];
-        _wbView.roomId = self.roomId;
-        _wbView.isRotationImage = self.isRatationImage;
-        _wbView.subjectId = self.subjectId;
-    }
-    return _wbView;
-}
-
-- (BOOL)wBoardDisplayed {
-    return self.wbView.superview && !self.wbView.hidden;
-}
-
-- (void)setIsRatationImage:(BOOL)isRatationImage {
-    _isRatationImage = isRatationImage;
-}
-
-@end

+ 0 - 684
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/ClassroomService.m

@@ -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

+ 0 - 24
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/AccompanyDownloadCallbackMessage.h

@@ -1,24 +0,0 @@
-//
-//  AccompanyDownloadCallbackMessage.h
-//  TeacherDaya
-//
-//  Created by Kyle on 2021/3/12.
-//  Copyright © 2021 DayaMusic. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-#import "ClassSongMessage.h"
-// 学员下载状态同步消息
-#define AccompanyDownloadCallbackMessageIdentifier  @"DY:MSDSMsg"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface AccompanyDownloadCallbackMessage : RCMessageContent
-
-@property (nonatomic, assign) int studentId;
-
-@property (nonatomic, strong) NSMutableArray *songMessage;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 46
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/AccompanyDownloadCallbackMessage.m

@@ -1,46 +0,0 @@
-//
-//  AccompanyDownloadCallbackMessage.m
-//  TeacherDaya
-//
-//  Created by Kyle on 2021/3/12.
-//  Copyright © 2021 DayaMusic. All rights reserved.
-//
-
-#import "AccompanyDownloadCallbackMessage.h"
-
-@implementation AccompanyDownloadCallbackMessage
-
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.studentId = [dic[@"studentId"] intValue];
-        NSArray *songMessageArray = [dic ks_arrayValueForKey:@"studentMusicScores"];
-        self.songMessage = [NSMutableArray array];
-        for (NSDictionary *parm in songMessageArray) {
-            ClassSongMessage *songModel = [ClassSongMessage messageFromJson:parm];
-            [self.songMessage addObject:songModel];
-        }
-    }
-}
-
-
-+ (NSString *)getObjectName {
-    return AccompanyDownloadCallbackMessageIdentifier;
-}
-
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-- (NSString *)conversationDigest {
-    return AccompanyDownloadCallbackMessageIdentifier;
-}
-
-
-@end

+ 0 - 28
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/AccompanyDownloadMessage.h

@@ -1,28 +0,0 @@
-//
-//  AccompanyDownloadMessage.h
-//  TeacherDaya
-//
-//  Created by Kyle on 2021/3/12.
-//  Copyright © 2021 DayaMusic. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-
-
-#define AccompanyDownloadMessageIdentifier @"DY:musicScoreDownloadMessage"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface AccompanyDownloadMessage : RCMessageContent
-
-
-@property (nonatomic, assign) int speed;
-
-@property (nonatomic, strong) NSString *url; // 原声
-
-@property (nonatomic, strong) NSString *mp3Url; // 伴奏
-
-@property (nonatomic, strong) NSString *examSongId; // 曲子id
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 39
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/AccompanyDownloadMessage.m

@@ -1,39 +0,0 @@
-//
-//  AccompanyDownloadMessage.m
-//  TeacherDaya
-//
-//  Created by Kyle on 2021/3/12.
-//  Copyright © 2021 DayaMusic. All rights reserved.
-//
-
-#import "AccompanyDownloadMessage.h"
-
-@implementation AccompanyDownloadMessage
-
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.speed = [dic[@"speed"] intValue];
-        self.url = dic[@"url"];
-        self.mp3Url = dic[@"mp3Url"];
-        self.examSongId = dic[@"id"];
-    }
-}
-+ (NSString *)getObjectName {
-    return AccompanyDownloadMessageIdentifier;
-}
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-- (NSString *)conversationDigest {
-    return AccompanyDownloadMessageIdentifier;
-}
-
-@end

+ 0 - 17
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/ApplySpeechMessage.h

@@ -1,17 +0,0 @@
-//
-//  ApplySpeechMessage.h
-//  SealClass
-//
-//  Created by Sin on 2019/3/14.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-#define ApplySpeechMessageIdentifier @"SC:RSMsg"
-//申请发言消息,当一个 Audience 申请发言成功之后,会收到此消息,助教需要对此消息进行处理,比如同意发言或者拒绝发言
-@interface ApplySpeechMessage : RCMessageContent
-@property (nonatomic, copy) NSString *requestUserId;//发起请求的用户id
-@property (nonatomic, copy) NSString *requestUserName;//发起请求的用户名
-@property (nonatomic, copy) NSString *ticket;//请求凭证
-@end
-

+ 0 - 36
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/ApplySpeechMessage.m

@@ -1,36 +0,0 @@
-//
-//  ApplySpeechMessage.m
-//  SealClass
-//
-//  Created by Sin on 2019/3/14.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "ApplySpeechMessage.h"
-
-@implementation ApplySpeechMessage
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.requestUserId = dic[@"reqUserId"];
-        self.requestUserName = dic[@"reqUserName"];
-        self.ticket = dic[@"ticket"];
-    }
-}
-+ (NSString *)getObjectName {
-    return ApplySpeechMessageIdentifier;
-}
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-- (NSString *)conversationDigest {
-    return ApplySpeechMessageIdentifier;
-}
-@end

+ 0 - 25
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/ApplySpeechResultMessage.h

@@ -1,25 +0,0 @@
-//
-//  ApplySpeechResultMessage.h
-//  SealClass
-//
-//  Created by Sin on 2019/3/14.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-
-typedef NS_ENUM(NSUInteger, SpeechResultAction) {
-    //同意
-    SpeechResultApprove = 1,
-    //拒绝
-    SpeechResultReject = 2,
-};
-
-#define SpeechResultMessageIdentifier @"SC:SRMsg"
-
-//请求发言的结果消息,可能助教同意或者拒绝
-@interface ApplySpeechResultMessage : RCMessageContent
-@property (nonatomic, copy) NSString *operatorId;
-@property (nonatomic, copy) NSString *operatorName;
-@property (nonatomic, assign) SpeechResultAction action;
-@end

+ 0 - 36
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/ApplySpeechResultMessage.m

@@ -1,36 +0,0 @@
-//
-//  ApplySpeechResultMessage.m
-//  SealClass
-//
-//  Created by Sin on 2019/3/14.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "ApplySpeechResultMessage.h"
-
-@implementation ApplySpeechResultMessage
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.operatorId = dic[@"reqUserId"];
-        self.operatorName = dic[@"reqUserName"];
-        self.action = (SpeechResultAction)[dic[@"action"] integerValue];
-    }
-}
-+ (NSString *)getObjectName {
-    return SpeechResultMessageIdentifier;
-}
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-- (NSString *)conversationDigest {
-    return SpeechResultMessageIdentifier;
-}
-@end

+ 0 - 18
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/AssistantTransferMessage.h

@@ -1,18 +0,0 @@
-//
-//  AssistantTransferMessage.h
-//  SealClass
-//
-//  Created by Sin on 2019/3/14.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-
-#define AssistantTransferMessageIdentifier @"SC:ATMsg"
-//助教变更消息,当助教变成功变更为另一个人时触发
-@interface AssistantTransferMessage : RCMessageContent
-@property (nonatomic, copy) NSString *operatorId;
-@property (nonatomic, copy) NSString *toUserId;
-@end
-
-

+ 0 - 35
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/AssistantTransferMessage.m

@@ -1,35 +0,0 @@
-//
-//  AssistantTransferMessage.m
-//  SealClass
-//
-//  Created by Sin on 2019/3/14.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "AssistantTransferMessage.h"
-
-@implementation AssistantTransferMessage
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.operatorId = dic[@"opUserId"];
-        self.toUserId = dic[@"toUserId"];
-    }
-}
-+ (NSString *)getObjectName {
-    return AssistantTransferMessageIdentifier;
-}
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-- (NSString *)conversationDigest {
-    return AssistantTransferMessageIdentifier;
-}
-@end

+ 0 - 33
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/ControlDeviceNotifyMessage.h

@@ -1,33 +0,0 @@
-//
-//  ControlDeviceNotifyMessage.h
-//  SealClass
-//
-//  Created by LiFei on 2019/3/19.
-//  Copyright © 2019 RongCloud. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-#import "ClassroomDefine.h"
-
-typedef NS_ENUM(NSUInteger, ControlDeviceAction) {
-    //邀请
-    ControlDeviceActionInvite = 0,
-    //拒绝
-    ControlDeviceActionReject = 1,
-    //同意
-    ControlDeviceActionApprove = 2
-};
-
-NS_ASSUME_NONNULL_BEGIN
-
-#define ControlDeviceNotifyMessageIdentifier @"SC:CDNMsg"
-
-@interface ControlDeviceNotifyMessage : RCMessageContent
-@property (nonatomic, assign) ControlDeviceAction action;
-@property (nonatomic, assign) DeviceType type;
-@property (nonatomic, copy)   NSString *opUserId;
-@property (nonatomic, copy)   NSString *opUserName;
-@property (nonatomic, copy)   NSString *ticket;
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 42
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/ControlDeviceNotifyMessage.m

@@ -1,42 +0,0 @@
-//
-//  ControlDeviceNotifyMessage.m
-//  SealClass
-//
-//  Created by LiFei on 2019/3/19.
-//  Copyright © 2019 RongCloud. All rights reserved.
-//
-
-#import "ControlDeviceNotifyMessage.h"
-
-@implementation ControlDeviceNotifyMessage
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.action = [dic[@"action"] longValue];
-        self.type = [dic[@"type"] longValue];
-        self.opUserId = dic[@"opUserId"];
-        self.opUserName = dic[@"opUserName"];
-        self.ticket = dic[@"ticket"];
-    }
-}
-
-+ (NSString *)getObjectName {
-    return ControlDeviceNotifyMessageIdentifier;
-}
-
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-
-- (NSString *)conversationDigest {
-    return ControlDeviceNotifyMessageIdentifier;
-}
-@end

+ 0 - 26
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/DeviceMessage.h

@@ -1,26 +0,0 @@
-//
-//  DeviceMessage.h
-//  SealClass
-//
-//  Created by Sin on 2019/3/12.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-#import "ClassroomDefine.h"
-
-#define DeviceMessageIdentifier @"SC:DRMsg"
-
-/**
- RTC room 设备消息,由服务下发,通知端上硬件的行为,如麦克风、相机等是否可用
- @note 该消息只能由服务下发
- */
-@interface DeviceMessage : RCMessageContent
-@property (nonatomic, copy)   NSString *userId;
-@property (nonatomic, assign) BOOL enable;
-@property (nonatomic, assign) DeviceType type;
-
-@property (nonatomic, assign) int songId;
-@property (nonatomic, assign) int soundVolume;
-@end
-

+ 0 - 38
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/DeviceMessage.m

@@ -1,38 +0,0 @@
-//
-//  DeviceMessage.m
-//  SealClass
-//
-//  Created by Sin on 2019/3/12.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "DeviceMessage.h"
-
-@implementation DeviceMessage
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.enable = [dic[@"enable"] boolValue];
-        self.type = (DeviceType)[dic[@"type"] integerValue];
-        self.userId = dic[@"userId"];
-        self.songId = [dic[@"musicScoreAccompanimentId"] intValue];
-        self.soundVolume = [dic[@"soundVolume"] intValue];
-    }
-}
-+ (NSString *)getObjectName {
-    return DeviceMessageIdentifier;
-}
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-- (NSString *)conversationDigest {
-    return DeviceMessageIdentifier;
-}
-@end

+ 0 - 16
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/DisplayCommandMessage.h

@@ -1,16 +0,0 @@
-//
-//  DisplayCommandMessage.h
-//  SealClass
-//
-//  Created by Sin on 2019/3/12.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-
-#define DisplayCommandMessageIdentifier @"SC:DisplayMsg"
-@interface DisplayCommandMessage : RCMessageContent
-@property (nonatomic, copy) NSString *display;
-@end
-
-

+ 0 - 34
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/DisplayCommandMessage.m

@@ -1,34 +0,0 @@
-//
-//  DisplayCommandMessage.m
-//  SealClass
-//
-//  Created by Sin on 2019/3/12.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "DisplayCommandMessage.h"
-
-@implementation DisplayCommandMessage
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.display = dic[@"display"];
-    }
-}
-+ (NSString *)getObjectName {
-    return DisplayCommandMessageIdentifier;
-}
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-- (NSString *)conversationDigest {
-    return DisplayCommandMessageIdentifier;
-}
-@end

+ 0 - 33
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/InviteUpgradeMessage.h

@@ -1,33 +0,0 @@
-//
-//  InviteUpgradeMessage.h
-//  SealClass
-//
-//  Created by LiFei on 2019/3/19.
-//  Copyright © 2019 RongCloud. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-#import "ClassroomDefine.h"
-
-typedef NS_ENUM(NSUInteger, InviteUpgradeAction) {
-    //邀请
-    InviteUpgradeActionInvite = 1,
-    //拒绝
-    InviteUpgradeActionReject = 2,
-    //同意
-    InviteUpgradeActionApprove = 3
-};
-
-NS_ASSUME_NONNULL_BEGIN
-
-#define InviteUpgradeMessageIdentifier @"SC:IURMsg"
-
-@interface InviteUpgradeMessage : RCMessageContent
-@property (nonatomic, assign) InviteUpgradeAction action;
-@property (nonatomic, assign) Role role;
-@property (nonatomic, copy)   NSString *operatorId;
-@property (nonatomic, copy)   NSString *operatorName;
-@property (nonatomic, copy)   NSString *ticket;
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 42
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/InviteUpgradeMessage.m

@@ -1,42 +0,0 @@
-//
-//  InviteUpgradeMessage.m
-//  SealClass
-//
-//  Created by LiFei on 2019/3/19.
-//  Copyright © 2019 RongCloud. All rights reserved.
-//
-
-#import "InviteUpgradeMessage.h"
-
-@implementation InviteUpgradeMessage
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.action = [dic[@"action"] longValue];
-        self.role = [dic[@"role"] longValue];
-        self.operatorId = dic[@"opUserId"];
-        self.operatorName = dic[@"opUserName"];
-        self.ticket = dic[@"ticket"];
-    }
-}
-
-+ (NSString *)getObjectName {
-    return InviteUpgradeMessageIdentifier;
-}
-
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-
-- (NSString *)conversationDigest {
-    return InviteUpgradeMessageIdentifier;
-}
-@end

+ 0 - 40
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/MemberChangeMessage.h

@@ -1,40 +0,0 @@
-//
-//  MemberChangeMessage.h
-//  SealClass
-//
-//  Created by Sin on 2019/3/12.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-
-#define MemberChangeMessageIdentifier @"SC:RMCMsg"
-
-typedef NS_ENUM(NSUInteger, MemberChangeAction) {
-    //加入
-    MemberChangeActionJoin = 1,
-    //离开
-    MemberChangeActionLeave = 2,
-    //被踢掉线
-    MemberChangeActionKick = 3,
-};
-
-/**
- RTC room 命令消息,由服务下发,通知端上特定用户的行为,如加入、离开、被踢等
- @note 该消息只能由服务下发
- */
-@interface MemberChangeMessage : RCMessageContent
-@property (nonatomic, copy) NSString *userId;
-@property (nonatomic, copy) NSString *userName;
-@property (nonatomic, assign) MemberChangeAction action;
-@property (nonatomic, assign) int role;
-@property (nonatomic, assign) long timestamp;
-@property (nonatomic, assign) BOOL metronomeSwitch;
-@property (nonatomic, assign) BOOL handUpOn;
-@property (nonatomic, assign) BOOL microphone;
-@property (nonatomic, assign) BOOL camera;
-@property (nonatomic, assign) BOOL examSongSwitch;
-@property (nonatomic, strong) NSString *avatar;
-
-@end
-

+ 0 - 55
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/MemberChangeMessage.m

@@ -1,55 +0,0 @@
-//
-//  MemberChangeMessage.m
-//  SealClass
-//
-//  Created by Sin on 2019/3/12.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "MemberChangeMessage.h"
-
-@implementation MemberChangeMessage
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        NSDictionary *member = [dic ks_dictionaryValueForKey:@"roomMember"];
-        self.userId = [member ks_stringValueForKey:@"imUserId"];
-        self.userName = [member ks_stringValueForKey:@"username"];
-        self.role = [member ks_intValueForKey:@"role"];
-        self.avatar = [member ks_stringValueForKey:@"avatar"];
-        NSString *roleString = [dic ks_stringValueForKey:@"changedEnum"];
-        if ([roleString isEqualToString:@"LEAVE"]) {
-            self.action = MemberChangeActionLeave;
-        }
-        else if ([roleString isEqualToString:@"JOIN"]) {
-            self.action = MemberChangeActionJoin;
-        }
-        else {
-            self.action = MemberChangeActionKick;
-        }
-        
-        self.timestamp = [member ks_longValueForKey:@"joinTime"];
-        self.camera = [member ks_longValueForKey:@"cameraFlag"];
-        self.microphone = [member ks_longValueForKey:@"micFlag"];
-        self.handUpOn = [member ks_longValueForKey:@"handFlag"];
-        self.metronomeSwitch = [dic ks_boolValueForKey:@"metronomeSwitch"];
-        self.examSongSwitch = [dic ks_boolValueForKey:@"examSongSwitch"];
-    }
-}
-
-+ (NSString *)getObjectName {
-    return MemberChangeMessageIdentifier;
-}
-
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_ISPERSISTED;
-}
-@end

+ 0 - 40
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/NodePlayMessage.m

@@ -1,40 +0,0 @@
-//
-//  NodePlayMessage.m
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/5/13.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import "NodePlayMessage.h"
-
-@implementation NodePlayMessage
-
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.enable = [dic[@"enable"] boolValue];
-        self.rate = [dic[@"rate"] intValue];
-        self.customType = [dic[@"customType"] integerValue];
-        self.userId = dic[@"userId"];
-        self.playVolume = [dic[@"playVolume"] integerValue];
-    }
-}
-+ (NSString *)getObjectName {
-    return NodePlayMessageIdentifier;
-}
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-- (NSString *)conversationDigest {
-    return NodePlayMessageIdentifier;
-}
-
-@end

+ 0 - 17
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/RoleChangedMessage.h

@@ -1,17 +0,0 @@
-//
-//  RoleChangedMessage.h
-//  SealClass
-//
-//  Created by Sin on 2019/3/14.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-
-#define RoleChangedMessageIdentifier @"SC:RCMsg"
-
-@interface RoleChangedMessage : RCMessageContent
-@property (nonatomic, copy) NSString *operatorId;
-@property (nonatomic, strong) NSArray <NSDictionary *>*users;//String userId;int role
-@end
-

+ 0 - 35
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/RoleChangedMessage.m

@@ -1,35 +0,0 @@
-//
-//  RoleChangedMessage.m
-//  SealClass
-//
-//  Created by Sin on 2019/3/14.
-//  Copyright © 2019年 RongCloud. All rights reserved.
-//
-
-#import "RoleChangedMessage.h"
-
-@implementation RoleChangedMessage
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.operatorId = dic[@"opUserId"];
-        self.users = dic[@"users"];
-    }
-}
-+ (NSString *)getObjectName {
-    return RoleChangedMessageIdentifier;
-}
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-- (NSString *)conversationDigest {
-    return RoleChangedMessageIdentifier;
-}
-@end

+ 0 - 25
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/SongDownloadCallbackMessage.h

@@ -1,25 +0,0 @@
-//
-//  SongDownloadCallbackMessage.h
-//  StudentDaya
-//
-//  Created by Kyle on 2020/12/3.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-
-#define SongDownloadCallbackMessageIdentifier  @"DY:DSMsg"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface SongDownloadCallbackMessage : RCMessageContent
-
-@property (nonatomic, assign) BOOL status;
-
-@property (nonatomic, assign) int studentId;
-
-@property (nonatomic, assign) int examSongId;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 41
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/SongDownloadCallbackMessage.m

@@ -1,41 +0,0 @@
-//
-//  SongDownloadCallbackMessage.m
-//  StudentDaya
-//
-//  Created by Kyle on 2020/12/3.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import "SongDownloadCallbackMessage.h"
-
-@implementation SongDownloadCallbackMessage
-
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.studentId = [dic[@"studentId"] intValue];
-        self.examSongId = [dic[@"examSongId"] intValue];
-        self.status = [dic[@"status"] boolValue];
-    }
-}
-
-
-+ (NSString *)getObjectName {
-    return SongDownloadCallbackMessageIdentifier;
-}
-
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-- (NSString *)conversationDigest {
-    return SongDownloadCallbackMessageIdentifier;
-}
-
-@end

+ 0 - 27
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/SongDownloadMessage.h

@@ -1,27 +0,0 @@
-//
-//  SongDownloadMessage.h
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/11/26.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import <RongIMLib/RongIMLib.h>
-
-#define SongDownloadMessageIdentifier  @"DY:examSongDownloadMessage"
-
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface SongDownloadMessage : RCMessageContent
-
-// examSongName
-@property (nonatomic, copy) NSString *examSongName;
-// examSongId
-@property (nonatomic, copy) NSString *examSongId;
-// userId
-@property (nonatomic, copy) NSString *url;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 38
KulexiuForTeacher/KulexiuForTeacher/Module/SealClass/Services/Classroom/Message/SongDownloadMessage.m

@@ -1,38 +0,0 @@
-//
-//  SongDownloadMessage.m
-//  TeacherDaya
-//
-//  Created by Kyle on 2020/11/26.
-//  Copyright © 2020 DayaMusic. All rights reserved.
-//
-
-#import "SongDownloadMessage.h"
-
-@implementation SongDownloadMessage
-
-- (NSData *)encode {
-    return nil;
-}
-
-- (void)decodeWithData:(NSData *)data {
-    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
-    if(dic) {
-        self.examSongName = dic[@"examSongName"];
-        self.examSongId = dic[@"examSongId"];
-        self.url = dic[@"url"];
-    }
-}
-+ (NSString *)getObjectName {
-    return SongDownloadMessageIdentifier;
-}
-- (NSArray<NSString *> *)getSearchableWords {
-    return nil;
-}
-+ (RCMessagePersistent)persistentFlag {
-    return MessagePersistent_NONE;
-}
-- (NSString *)conversationDigest {
-    return SongDownloadMessageIdentifier;
-}
-
-@end

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff