|
@@ -554,12 +554,9 @@ public class RoomServiceImpl implements RoomService {
|
|
|
}
|
|
|
action.handUpOn(roomMember.isHand())
|
|
|
.microphone(playMidi)
|
|
|
+ .timestamp(curTime.getTime())
|
|
|
.camera(true)
|
|
|
- .sendUserInfo(RTCRoomMessage.MessageUser.builder()
|
|
|
- .sendUserId(userId)
|
|
|
- .sendUserName(userInfo.getName())
|
|
|
- .avatarUrl(roomMember.getHeadUrl())
|
|
|
- .build());
|
|
|
+ .sendUserInfo(getSendUser(userId,roleEnum));
|
|
|
|
|
|
|
|
|
RTCRoomMessage roomMessage = RTCRoomMessage.builder()
|
|
@@ -628,6 +625,12 @@ public class RoomServiceImpl implements RoomService {
|
|
|
return roomMember;
|
|
|
}
|
|
|
|
|
|
+ public String getRoomServiceProviter(String roomId ) {
|
|
|
+ Integer firstCourseId = Integer.parseInt(roomId.substring(1));
|
|
|
+ CourseSchedule courseSchedule = courseScheduleDao.get(firstCourseId.longValue());
|
|
|
+ return courseSchedule.getServiceProvider();
|
|
|
+ }
|
|
|
+
|
|
|
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
@Override
|
|
|
public void leaveRoomSuccess(String roomId, String userId, String deviceNum) throws Exception {
|
|
@@ -703,12 +706,9 @@ public class RoomServiceImpl implements RoomService {
|
|
|
action.role(EMemberRole.STUDENT.getValue());
|
|
|
}
|
|
|
action.handUpOn(false)
|
|
|
+ .timestamp(System.currentTimeMillis())
|
|
|
.microphone(false)
|
|
|
- .camera(false).sendUserInfo(RTCRoomMessage.MessageUser.builder()
|
|
|
- .sendUserId(userId)
|
|
|
- .sendUserName(username)
|
|
|
- .avatarUrl(sysUser.getAvatar())
|
|
|
- .build());
|
|
|
+ .camera(false).sendUserInfo(getSendUser(userId,roleEnum));
|
|
|
|
|
|
|
|
|
RTCRoomMessage roomMessage = RTCRoomMessage.builder()
|
|
@@ -855,14 +855,11 @@ public class RoomServiceImpl implements RoomService {
|
|
|
// 腾讯云RTC服务
|
|
|
RTCRoomMessage.MessageContent.MessageContentBuilder action = RTCRoomMessage.MessageContent.builder()
|
|
|
.action(status)
|
|
|
+ .timestamp(System.currentTimeMillis())
|
|
|
.role(roomMember.getRole());
|
|
|
action.handUpOn(false)
|
|
|
.microphone(false)
|
|
|
- .camera(false).sendUserInfo(RTCRoomMessage.MessageUser.builder()
|
|
|
- .sendUserId(roomMember.getUid())
|
|
|
- .sendUserName(roomMember.getName())
|
|
|
- .avatarUrl(roomMember.getHeadUrl())
|
|
|
- .build());
|
|
|
+ .camera(false).sendUserInfo(getSendUser(roomMember.getUid(),RoleEnum.getEnumByValue(roomMember.getRole())));
|
|
|
|
|
|
|
|
|
RTCRoomMessage roomMessage = RTCRoomMessage.builder()
|
|
@@ -887,14 +884,22 @@ public class RoomServiceImpl implements RoomService {
|
|
|
CheckUtils.checkArgument(type >= 0 && type < DisplayEnum.values().length, "type not exist");
|
|
|
DisplayEnum displayEnum = DisplayEnum.values()[type];
|
|
|
|
|
|
+ RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
|
|
|
+
|
|
|
+ String roomServiceProviter = getRoomServiceProviter(roomId);
|
|
|
if (displayEnum.equals(DisplayEnum.None)) {
|
|
|
roomDao.updateDisplayByRid(roomId, "");
|
|
|
- DisplayMessage displayMessage = new DisplayMessage("");
|
|
|
- IMApiResultInfo apiResultInfo = imHelper.publishMessage(userId, roomId, displayMessage);
|
|
|
- if (apiResultInfo.isSuccess()) {
|
|
|
- return true;
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
|
|
|
+
|
|
|
+ sendDisplayMessage("", roomMember);
|
|
|
} else {
|
|
|
- throw new ApiException(ErrorEnum.ERR_MESSAGE_ERROR, apiResultInfo.getErrorMessage());
|
|
|
+ DisplayMessage displayMessage = new DisplayMessage("");
|
|
|
+ IMApiResultInfo apiResultInfo = imHelper.publishMessage(userId, roomId, displayMessage);
|
|
|
+ if (apiResultInfo.isSuccess()) {
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ throw new ApiException(ErrorEnum.ERR_MESSAGE_ERROR, apiResultInfo.getErrorMessage());
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -906,9 +911,15 @@ public class RoomServiceImpl implements RoomService {
|
|
|
} else {
|
|
|
display += "?userId=" + teachers.get(0).getUid() + "?uri=";
|
|
|
roomDao.updateDisplayByRid(roomId, display);
|
|
|
- DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
- imHelper.publishMessage(userId, roomId, displayMessage);
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
|
|
|
+
|
|
|
+ sendDisplayMessage(display, roomMember);
|
|
|
+ } else {
|
|
|
+ DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
+ imHelper.publishMessage(userId, roomId, displayMessage);
|
|
|
+ }
|
|
|
log.info("change display to teacher: roomId={}, display={}", roomId, display);
|
|
|
+
|
|
|
}
|
|
|
} else if (displayEnum.equals(DisplayEnum.Assistant)) {
|
|
|
List<RoomMember> assistants = roomMemberDao.findByRidAndRole(roomId, RoleEnum.RoleAssistant.getValue());
|
|
@@ -917,34 +928,89 @@ public class RoomServiceImpl implements RoomService {
|
|
|
} else {
|
|
|
display += "?userId=" + assistants.get(0).getUid() + "?uri=";
|
|
|
roomDao.updateDisplayByRid(roomId, display);
|
|
|
- DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
- imHelper.publishMessage(userId, roomId, displayMessage);
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
|
|
|
+
|
|
|
+ sendDisplayMessage(display, roomMember);
|
|
|
+ } else {
|
|
|
+ DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
+ imHelper.publishMessage(userId, roomId, displayMessage);
|
|
|
+ }
|
|
|
log.info("change display to assistant: roomId={}, display={}", roomId, display);
|
|
|
}
|
|
|
} else if (displayEnum.equals(DisplayEnum.Screen)) {
|
|
|
display += "?userId=" + userId + "?uri=";
|
|
|
roomDao.updateDisplayByRid(roomId, display);
|
|
|
- DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
- imHelper.publishMessage(userId, roomId, displayMessage);
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
|
|
|
+
|
|
|
+ sendDisplayMessage(display, roomMember);
|
|
|
+ } else {
|
|
|
+ DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
+ imHelper.publishMessage(userId, roomId, displayMessage);
|
|
|
+ }
|
|
|
log.info("change display to screen: roomId={}, display={}", roomId, display);
|
|
|
} else if (displayEnum.equals(DisplayEnum.STUDENT)) {
|
|
|
display += "?userId=" + targetUserId + "?uri=" + uri;
|
|
|
roomDao.updateDisplayByRid(roomId, display);
|
|
|
- DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
- imHelper.publishMessage(userId, roomId, displayMessage);
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
|
|
|
+
|
|
|
+ sendDisplayMessage(display, roomMember);
|
|
|
+ } else {
|
|
|
+ DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
+ imHelper.publishMessage(userId, roomId, displayMessage);
|
|
|
+ }
|
|
|
log.info("change display to screen: roomId={}, display={}", roomId, display);
|
|
|
} else {
|
|
|
display += "?userId=" + userId + "?uri=" + uri;
|
|
|
// CheckUtils.checkArgument(uri != null, "uri must't be null");
|
|
|
// CheckUtils.checkArgument(whiteboardDao.findByRidAndWbid(roomId, uri).size() > 0, "whiteboard not exist");
|
|
|
- roomDao.updateDisplayByRid(roomId, display);
|
|
|
- DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
- imHelper.publishMessage(userId, roomId, displayMessage);
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
|
|
|
+
|
|
|
+ sendDisplayMessage(display, roomMember);
|
|
|
+ } else {
|
|
|
+ roomDao.updateDisplayByRid(roomId, display);
|
|
|
+ DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
+ imHelper.publishMessage(userId, roomId, displayMessage);
|
|
|
+ }
|
|
|
}
|
|
|
log.info("result display in room: {}, type = {}, uri = {}", roomId, type, uri);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ private void sendDisplayMessage(String display, RoomMember roomMember) throws Exception {
|
|
|
+ // 获取RTC服务提供方
|
|
|
+ RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(TencentCloudRTCPlugin.PLUGIN_NAME);
|
|
|
+ // 腾讯云RTC服务
|
|
|
+ RTCRoomMessage.MessageContent.MessageContentBuilder action = RTCRoomMessage.MessageContent.builder()
|
|
|
+ .display(display)
|
|
|
+ .sendUserInfo(getSendUser(roomMember.getUid(),RoleEnum.getEnumByValue(roomMember.getRole())));
|
|
|
+
|
|
|
+
|
|
|
+ RTCRoomMessage roomMessage = RTCRoomMessage.builder()
|
|
|
+ .objectName(RTCRoomMessage.DISPLAY_MESSAGE)
|
|
|
+ .content(action.build())
|
|
|
+ .toChatRoomId(roomMember.getRid())
|
|
|
+ .fromUserId(roomMember.getUid())
|
|
|
+ .isIncludeSender(1)
|
|
|
+ .isPersisted(1)
|
|
|
+ .build();
|
|
|
+
|
|
|
+ pluginService.sendChatRoomMessage(roomMessage);
|
|
|
+ }
|
|
|
+
|
|
|
+ private RTCRoomMessage.MessageUser getSendUser(String userId,RoleEnum role) {
|
|
|
+
|
|
|
+ SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(userId));
|
|
|
+ RTCRoomMessage.MessageUser build = RTCRoomMessage.MessageUser.builder()
|
|
|
+ .sendUserId(userId)
|
|
|
+ .sendUserName(sysUser.getUsername())
|
|
|
+ .avatarUrl(sysUser.getAvatar())
|
|
|
+ .build();
|
|
|
+ if (role == RoleTeacher) {
|
|
|
+ build.setSendUserName(sysUser.getRealName());
|
|
|
+ }
|
|
|
+ return build;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public String createWhiteBoard(String roomId) throws Exception {
|
|
@@ -978,8 +1044,17 @@ public class RoomServiceImpl implements RoomService {
|
|
|
imHelper.publishMessage(userId, roomId, wbmsg);
|
|
|
String display = "display://type=2?userId=" + userId + "?uri=" + wbId;
|
|
|
roomDao.updateDisplayByRid(roomId, display);
|
|
|
- DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
- imHelper.publishMessage(userId, roomId, displayMessage, 1);
|
|
|
+
|
|
|
+ RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
|
|
|
+
|
|
|
+ String roomServiceProviter = getRoomServiceProviter(roomId);
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
|
|
|
+
|
|
|
+ sendDisplayMessage(display, roomMember);
|
|
|
+ } else {
|
|
|
+ DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
+ imHelper.publishMessage(userId, roomId, displayMessage, 1);
|
|
|
+ }
|
|
|
|
|
|
return wbId;
|
|
|
} else {
|
|
@@ -1007,8 +1082,17 @@ public class RoomServiceImpl implements RoomService {
|
|
|
if (display.contains("uri=" + whiteBoardId)) {
|
|
|
int result = roomDao.updateDisplayByRid(roomId, "");
|
|
|
log.info("clear room display, room: {}, result: {}", roomId, result);
|
|
|
- DisplayMessage displayMessage = new DisplayMessage("");
|
|
|
- imHelper.publishMessage(userId, roomId, displayMessage, 1);
|
|
|
+
|
|
|
+ RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
|
|
|
+
|
|
|
+ String roomServiceProviter = getRoomServiceProviter(roomId);
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
|
|
|
+
|
|
|
+ sendDisplayMessage(display, roomMember);
|
|
|
+ } else {
|
|
|
+ DisplayMessage displayMessage = new DisplayMessage("");
|
|
|
+ imHelper.publishMessage(userId, roomId, displayMessage, 1);
|
|
|
+ }
|
|
|
} else {
|
|
|
log.info("no display to clean: room={}", room);
|
|
|
}
|
|
@@ -1197,7 +1281,14 @@ public class RoomServiceImpl implements RoomService {
|
|
|
deviceResourceMessage.setSoundVolume(data.getSoundVolume());
|
|
|
//原音
|
|
|
courseScheduleStudentMusicScoreDao.openPlayStatus(scheduleId, data.getMusicScoreAccompanimentId(), Integer.parseInt(userId));
|
|
|
- imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
|
|
|
+ // 消息发送
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
|
|
|
+ // 腾讯云推送
|
|
|
+ pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.DEVICE_MESSAGE).content(messageContent));
|
|
|
+ } else {
|
|
|
+ // 融云推送
|
|
|
+ imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
|
|
|
+ }
|
|
|
} else if (typeEnum.equals(DeviceTypeEnum.MusicScoreAccompaniment)) {
|
|
|
long scheduleId = Long.parseLong(roomId.substring(1));
|
|
|
//关闭所有曲目播放
|
|
@@ -1206,8 +1297,14 @@ public class RoomServiceImpl implements RoomService {
|
|
|
DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(typeEnum.ordinal(), enable);
|
|
|
deviceResourceMessage.setMusicScoreAccompanimentId(data.getMusicScoreAccompanimentId());
|
|
|
deviceResourceMessage.setUserId(userId);
|
|
|
- deviceResourceMessage.setSoundVolume(data.getSoundVolume());
|
|
|
- imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
|
|
|
+ deviceResourceMessage.setSoundVolume(data.getSoundVolume());// 消息发送
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
|
|
|
+ // 腾讯云推送
|
|
|
+ pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.DEVICE_MESSAGE).content(messageContent));
|
|
|
+ } else {
|
|
|
+ // 融云推送
|
|
|
+ imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
|
|
|
+ }
|
|
|
} else {
|
|
|
String ticket = IdentifierUtils.uuid();
|
|
|
ControlDeviceTaskInfo taskInfo = new ControlDeviceTaskInfo();
|
|
@@ -1453,11 +1550,7 @@ public class RoomServiceImpl implements RoomService {
|
|
|
.builder()
|
|
|
.type(deviceResourceMessage.getType())
|
|
|
.enable(deviceResourceMessage.isEnable())
|
|
|
- .sendUserInfo(RTCRoomMessage.MessageUser.builder()
|
|
|
- .sendUserId(authUser.getId().toString())
|
|
|
- .sendUserName(authUser.getRealName())
|
|
|
- .avatarUrl(authUser.getAvatar())
|
|
|
- .build())
|
|
|
+ .sendUserInfo(getSendUser(authUser.getId().toString(), RoleTeacher))
|
|
|
.build();
|
|
|
|
|
|
// 腾讯云消息推送
|
|
@@ -1807,9 +1900,18 @@ public class RoomServiceImpl implements RoomService {
|
|
|
imHelper.publishMessage(userId, roomId, msg, 1);
|
|
|
|
|
|
String display = "display://type=1?userId=" + targetUserId + "?uri=";
|
|
|
- DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
+
|
|
|
+ RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
|
|
|
+
|
|
|
+ String roomServiceProviter = getRoomServiceProviter(roomId);
|
|
|
roomDao.updateDisplayByRid(roomId, display);
|
|
|
- imHelper.publishMessage(userId, roomId, displayMessage, 1);
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
|
|
|
+
|
|
|
+ sendDisplayMessage(display, roomMember);
|
|
|
+ } else {
|
|
|
+ DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
+ imHelper.publishMessage(userId, roomId, displayMessage, 1);
|
|
|
+ }
|
|
|
log.info("changeRole, display changed: roomId={}, {}, targetUserId={}", roomId, display, targetUserId);
|
|
|
|
|
|
return true;
|
|
@@ -1899,8 +2001,33 @@ public class RoomServiceImpl implements RoomService {
|
|
|
String roomId = playMidiMessageData.getRoomId();
|
|
|
CustomMessage customMessage = JSONObject.parseObject(content, CustomMessage.class);
|
|
|
String userId = sysUser.getId().toString();
|
|
|
- MetronomeMessageMessage displayMessage = new MetronomeMessageMessage(customMessage);
|
|
|
- imHelper.publishMessage(userId, roomId, displayMessage, 1);
|
|
|
+
|
|
|
+ RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
|
|
|
+
|
|
|
+ String roomServiceProviter = getRoomServiceProviter(roomId);
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
|
|
|
+ // 获取RTC服务提供方
|
|
|
+ RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(TencentCloudRTCPlugin.PLUGIN_NAME);
|
|
|
+ // 腾讯云RTC服务
|
|
|
+
|
|
|
+ RTCRoomMessage.MessageContent messageContent = JSONObject.parseObject(content, RTCRoomMessage.MessageContent.class);
|
|
|
+ messageContent.setSendUserInfo(getSendUser(roomMember.getUid(),RoleEnum.getEnumByValue(roomMember.getRole())));
|
|
|
+
|
|
|
+
|
|
|
+ RTCRoomMessage roomMessage = RTCRoomMessage.builder()
|
|
|
+ .objectName(RTCRoomMessage.PLAY_MIDI_MESSAGE)
|
|
|
+ .content(messageContent)
|
|
|
+ .toChatRoomId(roomMember.getRid())
|
|
|
+ .fromUserId(roomMember.getUid())
|
|
|
+ .isIncludeSender(1)
|
|
|
+ .isPersisted(1)
|
|
|
+ .build();
|
|
|
+
|
|
|
+ pluginService.sendChatRoomMessage(roomMessage);
|
|
|
+ } else {
|
|
|
+ MetronomeMessageMessage displayMessage = new MetronomeMessageMessage(customMessage);
|
|
|
+ imHelper.publishMessage(userId, roomId, displayMessage, 1);
|
|
|
+ }
|
|
|
//记录节拍器消息
|
|
|
courseScheduleStudentPaymentDao.adjustPlayMidi(Long.parseLong(roomId.substring(1)), playMidiMessageData.getUserId(), content);
|
|
|
}
|
|
@@ -2034,8 +2161,17 @@ public class RoomServiceImpl implements RoomService {
|
|
|
|
|
|
public void updateDisplay(String roomId, String senderId, String display, Integer isIncludeSender) throws Exception {
|
|
|
roomDao.updateDisplayByRid(roomId, display);
|
|
|
- DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
- imHelper.publishMessage(senderId, roomId, displayMessage, isIncludeSender);
|
|
|
+
|
|
|
+ RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, senderId);
|
|
|
+
|
|
|
+ String roomServiceProviter = getRoomServiceProviter(roomId);
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
|
|
|
+
|
|
|
+ sendDisplayMessage(display, roomMember);
|
|
|
+ } else {
|
|
|
+ DisplayMessage displayMessage = new DisplayMessage(display);
|
|
|
+ imHelper.publishMessage(senderId, roomId, displayMessage, isIncludeSender);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public boolean isUserDisplay(Room room, String userId) {
|