UserController.java 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package com.ym.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.ym.common.BaseResponse;
  5. import com.ym.mec.biz.dal.dto.TencentData;
  6. import com.ym.mec.biz.dal.dto.TencentImCallbackResult;
  7. import com.ym.mec.biz.dal.enums.ETencentImCallbackCommand;
  8. import com.ym.mec.biz.service.ImLiveBroadcastRoomService;
  9. import com.ym.mec.common.entity.ImUserState;
  10. import com.ym.service.LiveRoomService;
  11. import com.ym.service.UserService;
  12. import io.rong.models.user.UserModel;
  13. import io.swagger.annotations.ApiOperation;
  14. import org.slf4j.Logger;
  15. import org.slf4j.LoggerFactory;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.web.bind.annotation.*;
  18. import javax.servlet.http.HttpServletRequest;
  19. import java.util.List;
  20. @RestController
  21. @RequestMapping("/user")
  22. public class UserController {
  23. private static final Logger log = LoggerFactory.getLogger(UserController.class);
  24. @Autowired
  25. private UserService userService;
  26. @Autowired
  27. private ImLiveBroadcastRoomService imLiveBroadcastRoomService;
  28. @Autowired
  29. private LiveRoomService liveRoomService;
  30. @RequestMapping(value = "/register", method = RequestMethod.POST)
  31. public Object register(@RequestBody UserModel userModel) throws Exception {
  32. return userService.register(userModel);
  33. }
  34. @RequestMapping(value = "/update", method = RequestMethod.POST)
  35. public Object update(@RequestBody UserModel userModel) throws Exception {
  36. return userService.update(userModel);
  37. }
  38. /**
  39. * 监听融云用户状态变更
  40. *
  41. * @param userState List<ImUserState>
  42. */
  43. @PostMapping(value = "/statusImUser")
  44. public BaseResponse statusImUser(@RequestBody List<ImUserState> userState) {
  45. log.info("statusImUser >>>>> : {}", JSONObject.toJSONString(userState));
  46. imLiveBroadcastRoomService.opsRoom(userState);
  47. return new BaseResponse<>();
  48. }
  49. @ApiOperation("腾讯im 回调接口")
  50. @PostMapping(value = "/tencentImCallback")
  51. public TencentImCallbackResult tencentImCallback(@RequestBody String body, HttpServletRequest request) {
  52. log.info("tencentImCallback body:{}", body);
  53. log.info("tencentImCallback request param:{}", JSON.toJSONString(request.getParameterMap()));
  54. String clientIP = request.getParameter("ClientIP");
  55. String optPlatform = request.getParameter("OptPlatform");
  56. if(request.getParameter("CallbackCommand").equals(ETencentImCallbackCommand.GROUP_CALLBACKONMEMBERSTATECHANGE.name())) {
  57. TencentData.CallbackOnMemberStateChange callbackOnMemberStateChange = TencentData.CallbackOnMemberStateChange.toObject(
  58. body);
  59. log.debug("callbackOnMemberStateChange: {}", callbackOnMemberStateChange);
  60. callbackOnMemberStateChange.setClientIP(clientIP);
  61. callbackOnMemberStateChange.setOptPlatform(optPlatform);
  62. imLiveBroadcastRoomService.callbackOnMemberStateChange(callbackOnMemberStateChange);
  63. } else if(request.getParameter("CallbackCommand").equals(ETencentImCallbackCommand.GROUP_CALLBACKAFTERMEMBEREXIT.name())) {
  64. TencentData.CallbackAfterMemberExit callbackAfterMemberExit = TencentData.CallbackAfterMemberExit.toObject(
  65. body);
  66. log.debug("callbackAfterMemberExit: {}", callbackAfterMemberExit);
  67. callbackAfterMemberExit.setClientIP(clientIP);
  68. callbackAfterMemberExit.setOptPlatform(optPlatform);
  69. imLiveBroadcastRoomService.callbackAfterMemberExit(callbackAfterMemberExit);
  70. } else if(request.getParameter("CallbackCommand").equals(ETencentImCallbackCommand.GROUP_CALLBACKAFTERNEWMEMBERJOIN.name())) {
  71. TencentData.CallbackAfterNewMemberJoin callbackAfterNewMemberJoin = TencentData.CallbackAfterNewMemberJoin.toObject(
  72. body);
  73. log.debug("CallbackAfterNewMemberJoin: {}", callbackAfterNewMemberJoin);
  74. callbackAfterNewMemberJoin.setClientIP(clientIP);
  75. callbackAfterNewMemberJoin.setOptPlatform(optPlatform);
  76. imLiveBroadcastRoomService.callbackAfterNewMemberJoin(callbackAfterNewMemberJoin);
  77. }
  78. return new TencentImCallbackResult();
  79. }
  80. @ApiOperation("腾讯云直播-推流 回调接口")
  81. @PostMapping(value = "/tencentStreamEventCallback")
  82. public TencentData.StreamEventCallbackResult tencentStreamEventCallback(@RequestBody String body) {
  83. log.info("tencentStreamEventCallback body:{}", body);
  84. TencentData.CallbackStreamStateEvent event = TencentData.CallbackStreamStateEvent.from(body);
  85. // 断流事件通知
  86. if (event.getEventType() == 0) {
  87. // 自动关闭录制
  88. // liveRoomService.stopTencentLiveVideoRecord(event.getStreamId());
  89. imLiveBroadcastRoomService.closeLive(getRoomUid(event.getStreamId()), getSpeakerId(event.getStreamId()));
  90. }
  91. // 推流事件通知
  92. if (event.getEventType() == 1) {
  93. // 自动开启录制
  94. // liveRoomService.startTencentLiveVideoRecord(event.getStreamId());
  95. imLiveBroadcastRoomService.startLive(getRoomUid(event.getStreamId()), getSpeakerId(event.getStreamId()), null);
  96. }
  97. return TencentData.StreamEventCallbackResult.builder().code(0).build();
  98. }
  99. private Integer getSpeakerId(String streamId) {
  100. return Integer.parseInt(streamId.split("_")[1]);
  101. }
  102. private String getRoomUid(String streamId) {
  103. return streamId.split("_")[0];
  104. }
  105. @ApiOperation("腾讯云直播-录制 回调接口")
  106. @PostMapping(value = "/tencentStreamRecordCallback")
  107. public TencentData.StreamEventCallbackResult tencentStreamRecordCallback(@RequestBody String body) {
  108. log.info("tencentStreamRecordCallback body:{}", body);
  109. TencentData.CallbackSteamRecordEvent event = TencentData.CallbackSteamRecordEvent.from(body);
  110. log.info("taskId={}, url={}", event.getTaskId(), event.getVideoUrl());
  111. // 生成直播录制信息
  112. liveRoomService.createLiveRoomVideoRecord(event);
  113. return TencentData.StreamEventCallbackResult.builder().code(0).build();
  114. }
  115. @ApiOperation("腾讯云直播-推流异常 回调接口")
  116. @PostMapping(value = "/tencentStreamExceptionCallback")
  117. public TencentData.StreamEventCallbackResult tencentStreamExceptionCallback(@RequestBody String body) {
  118. log.info("tencentStreamExceptionCallback body:{}", body);
  119. return TencentData.StreamEventCallbackResult.builder().code(0).build();
  120. }
  121. }