Browse Source

直播调整

Jeremy 2 years ago
parent
commit
1d495e4af4
1 changed files with 78 additions and 70 deletions
  1. 78 70
      Service/DeviceService.cs

+ 78 - 70
Service/DeviceService.cs

@@ -63,7 +63,8 @@ namespace WingDeviceService.Service
         private IDiagnosisModuleDBService _diagnosisModuleService;
 
         private IRemedicalService _remedicalService;
-        private IWingRtcService _rtcService;
+        private IWingRtcService _wingRtcService;
+        private IRtcService _rtcService;
         private int _heartRateSeconds;
         private DeviceHeartRateManager _deviceHeartRateManager;
         private string _webSocketUrl = string.Empty;
@@ -93,7 +94,8 @@ namespace WingDeviceService.Service
             _patientInfoDBService = GetProxy<IPatientInfoDBService>();
             _diagnosisModuleService = GetProxy<IDiagnosisModuleDBService>();
             _remedicalService = GetProxy<IRemedicalService>();
-            _rtcService = GetProxy<IWingRtcService>();
+            _wingRtcService = GetProxy<IWingRtcService>();
+            _rtcService = GetProxy<IRtcService>();
             _liveConsultationService = GetProxy<ILiveConsultationService>();
             _consultationRecordDBService = GetProxy<IConsultationRecordDBService>();
             _remedicalDBService = GetProxy<IRemedicalDBService>();
@@ -1086,13 +1088,14 @@ namespace WingDeviceService.Service
                 DeviceCode = deviceCode,
                 IsResponse = true
             };
-          var cacheControllingParameter = new CacheControllingParameter()
+            var cacheControllingParameter = new CacheControllingParameter()
             {
                 Code = deviceCode,
                 ProbeApplication = Newtonsoft.Json.JsonConvert.SerializeObject(request.ProbeApplication),
                 Parameter = Newtonsoft.Json.JsonConvert.SerializeObject(request.Parameter),
             };
-            _controllingParameterDevices.AddOrUpdate(deviceCode,(k)=>cacheControllingParameter,(k,exist)=>{
+            _controllingParameterDevices.AddOrUpdate(deviceCode, (k) => cacheControllingParameter, (k, exist) =>
+            {
                 return cacheControllingParameter;
             });
             var notificationRequest = new SendNotificationRequest()
@@ -1122,7 +1125,7 @@ namespace WingDeviceService.Service
             {
                 ThrowCustomerException(CustomerRpcCode.DeviceCodeIsEmpty, "Required parameter:DeviceCode cannot be empty");
             }
-            _controllingParameterDevices.TryGetValue(deviceCode,out var controlParameterData);
+            _controllingParameterDevices.TryGetValue(deviceCode, out var controlParameterData);
             if (controlParameterData != null)
             {
                 return new DeviceControlParameterDataDTO()
@@ -1143,60 +1146,75 @@ namespace WingDeviceService.Service
         {
             var userInfo = await _authenticationService.GetTokenAsync(request);
             var deviceCode = request.DeviceCode;
-            var liveRooms = await _rtcService.GetLiveRoomsByDeviceCodeAsync(new GetLiveRoomsByDeviceCodeRequest
+            var deviceInfo = CacheMaintenance.Instance.Get<IDeviceInfosManager>().Get(deviceCode);
+            var liveRoom = await _rtcService.GetInitiatingRoomByDeviceCodeAsync(new GetInitiatingRoomByDeviceCodeRequest
             {
                 DeviceCode = deviceCode
             });
-            var liveRoom = liveRooms?.FirstOrDefault(x => x.Status == LiveRoomStatus.Initiating);
             LiveMemberDTO deviceMemberInfo;
             if (liveRoom != null)
             {
-                //设备正在推流
-                deviceMemberInfo = liveRoom.Members.FirstOrDefault(x => x.Code == deviceCode);
-                if (deviceMemberInfo?.Status == LiveMemberStatus.Joined)
+                if (liveRoom.LiveRoomCode == deviceCode)
                 {
-                    return new JoinDeviceLiveRoomResult
+                    //设备正在推流
+                    deviceMemberInfo = liveRoom.DeviceInfos.FirstOrDefault(x => x.Code == deviceCode);
+                    if (deviceMemberInfo?.Status == LiveMemberStatus.Joined)
                     {
-                        RoomNo = liveRoom.RoomNo,
-                        RtmpUrl = deviceMemberInfo.LiveData.RtmpPullUrl,
-                    };
+                        //添加观众
+                        await _rtcService.SaveViewerAsync(new SaveViewerRequest
+                        {
+                            LiveRoomCode = liveRoom.LiveRoomCode,
+                            UserCode = userInfo.ClientId,
+                            UserName = userInfo.AccountName,
+                        });
+                        return new JoinDeviceLiveRoomResult
+                        {
+                            RoomNo = liveRoom.RtcRoomId,
+                            RtmpUrl = deviceMemberInfo.LiveData.RtmpPullUrl,
+                        };
+                    }
                 }
             }
-            //新增或更新设备直播间 TODO
-            var rtcRoomResult = await _rtcService.GetRoomIdAsync(new GetRoomIdRequest
+            //新增或更新设备直播间
+            var deviceName = !string.IsNullOrWhiteSpace(deviceInfo.Name) ? deviceInfo.Name : deviceInfo.ShortCode;
+            var deviceLiveInfo = new LiveMemberDTO
+            {
+                Code = deviceCode,
+                Name = deviceName,
+                MemberType = LiveMemberEnum.Device,
+                HeadImageToken = deviceInfo.HeadPicUrl,
+                Status = LiveMemberStatus.Accepted,
+            };
+            var room = new LiveRoomDTO
+            {
+                LiveRoomCode = deviceCode,
+                Name = deviceName,
+                RelatedCode = deviceCode,
+                BusinessModule = BusinessModuleEnum.LivingConsultation,
+                Status = LiveRoomStatus.Default,
+                UserInfos = new List<LiveMemberDTO>(),
+                DeviceInfos = new List<LiveMemberDTO> { deviceLiveInfo }
+            };
+            await _rtcService.AddOrUpdateLiveRoomAsync(new AddOrUpdateLiveRoomRequest
             {
-                UniqueId = deviceCode,
+                LiveRoom = room,
             });
-            var rtcRoomId = (int)rtcRoomResult.RoomId;
-            var initiateResult = await _rtcService.InitiateLiveAsync(new InitiateLiveRequest
+            var initiateResult = await _rtcService.InitiateAsync(new InitiateRequest
             {
-                RoomId = deviceCode,
+                LiveRoomCode = deviceCode,
                 InitiatorCode = deviceCode,
-                IntegerRoomId = rtcRoomId
             });
+            deviceMemberInfo = initiateResult.DeviceInfos.FirstOrDefault(x => x.Code == deviceCode);
             //添加观众
-            var addOrUpdateViewerResult = await _rtcService.SaveViewerAsync(new SaveViewerRequest
+            await _rtcService.SaveViewerAsync(new SaveViewerRequest
             {
-                LiveRoomCode = initiateResult.RoomId,
+                LiveRoomCode = initiateResult.LiveRoomCode,
                 UserCode = userInfo.ClientId,
                 UserName = userInfo.AccountName,
             });
-            //通知设备推流
-            deviceMemberInfo = initiateResult.Members.FirstOrDefault(x => x.Code == deviceCode);
-            var message = new StartLiveToDeviceNotification
-            {
-                LiveRoomCode = initiateResult.RoomId,
-                RoomNo = initiateResult.RoomNo,
-                AppId = _sdkAppId,
-                // MergedChannel = deviceMemberInfo.MergedChannel,
-                // MergedVideoOutputWidth = deviceMemberInfo.MergedVideoOutputWidth,
-                // MergedVideoOutputHeight = deviceMemberInfo.MergedVideoOutputHeight,
-                // VideoDeviceOutputList = deviceMemberInfo.VideoDeviceInfos.ToList(),
-            };
-            await BroadcastNotificationAsync(liveRoom.RoomId, new List<string> { deviceCode }, message);
             return new JoinDeviceLiveRoomResult
             {
-                RoomNo = initiateResult.RoomNo,
+                RoomNo = initiateResult.RtcRoomId,
                 RtmpUrl = deviceMemberInfo.LiveData.RtmpPullUrl,
                 ReportStateIntervalSeconds = _reportStateIntervalSeconds,
             };
@@ -1211,30 +1229,26 @@ namespace WingDeviceService.Service
         {
             var userInfo = await _authenticationService.GetTokenAsync(request);
             var userCode = userInfo.ClientId;
-            var rtcRoomId = request.RoomNo;
-            var liveRooms = await _rtcService.GetLiveRoomsByRtcRoomIdAsync(new GetLiveRoomsByRtcRoomIdRequest
+            var deviceCode = request.DeviceCode;
+            var liveRoom = await _rtcService.GetInitiatingRoomByDeviceCodeAsync(new GetInitiatingRoomByDeviceCodeRequest
             {
-                RtcRoomId = rtcRoomId
+                DeviceCode = deviceCode
             });
-            var liveRoom = liveRooms?.FirstOrDefault(x => x.Status == LiveRoomStatus.Initiating);
             if (liveRoom != null)
             {
-                var deviceCode = liveRoom.DeviceInfos?.FirstOrDefault()?.Code;
                 //移除观众
                 var removeViewerResult = await _rtcService.RemoveViewerAsync(new RemoveViewerRequest
                 {
-                    LiveRoomCode = liveRoom.RoomId,
+                    LiveRoomCode = liveRoom.LiveRoomCode,
                     UserCode = userInfo.ClientId,
                 });
                 var expireTime = DateTime.UtcNow.AddSeconds(_reportStateTimeout * -1);
-                if (!liveRoom.ViewerInfos.Any(x => x.UserCode != userCode && x.LastReportTime >= expireTime) && !string.IsNullOrWhiteSpace(deviceCode))
+                if (!liveRoom.ViewerInfos.Any(x => x.UserCode != userCode && x.LastReportTime >= expireTime))
                 {
-                    //关闭直播 to device
-                    var message = new CloseLiveToDeviceNotification
+                    await _rtcService.CloseAsync(new CloseRequest
                     {
-                        LiveRoomCode = liveRoom.RoomId,
-                    };
-                    await BroadcastNotificationAsync(liveRoom.RoomId, new List<string> { deviceCode }, message);
+                        LiveRoomCode = liveRoom.LiveRoomCode
+                    });
                 }
             }
             return true;
@@ -1248,18 +1262,17 @@ namespace WingDeviceService.Service
         public async Task<bool> ReportLiveViewStateAsync(ReportLiveViewStateRequest request)
         {
             var userInfo = await _authenticationService.GetTokenAsync(request);
-            var rtcRoomId = request.RoomNo;
-            var liveRooms = await _rtcService.GetLiveRoomsByRtcRoomIdAsync(new GetLiveRoomsByRtcRoomIdRequest
+            var deviceCode = request.DeviceCode;
+            var liveRoom = await _rtcService.GetInitiatingRoomByDeviceCodeAsync(new GetInitiatingRoomByDeviceCodeRequest
             {
-                RtcRoomId = rtcRoomId
+                DeviceCode = deviceCode
             });
-            var liveRoom = liveRooms?.FirstOrDefault(x => x.Status == LiveRoomStatus.Initiating);
             if (liveRoom != null)
             {
                 //添加观众
                 var addOrUpdateViewerResult = await _rtcService.SaveViewerAsync(new SaveViewerRequest
                 {
-                    LiveRoomCode = liveRoom.RoomId,
+                    LiveRoomCode = liveRoom.LiveRoomCode,
                     UserCode = userInfo.ClientId,
                     UserName = userInfo.AccountName,
                 });
@@ -1288,12 +1301,10 @@ namespace WingDeviceService.Service
             }
             if (request.LiveState == DeviceLiveStateEnum.Pushing || request.LiveState == DeviceLiveStateEnum.Closed)
             {
-                var rtcRoomId = request.RoomNo;
-                var liveRooms = await _rtcService.GetLiveRoomsByRtcRoomIdAsync(new GetLiveRoomsByRtcRoomIdRequest
+                var liveRoom = await _rtcService.GetInitiatingRoomByDeviceCodeAsync(new GetInitiatingRoomByDeviceCodeRequest
                 {
-                    RtcRoomId = rtcRoomId
+                    DeviceCode = deviceCode
                 });
-                var liveRoom = liveRooms?.FirstOrDefault(x => x.Status == LiveRoomStatus.Initiating);
                 if (liveRoom != null)
                 {
                     var expireTime = DateTime.UtcNow.AddSeconds(_reportStateTimeout * -1);
@@ -1304,18 +1315,16 @@ namespace WingDeviceService.Service
                         //关闭直播 to users
                         var message = new DeviceLiveFinishedNotification
                         {
-                            LiveRoomCode = liveRoom.RoomId,
+                            LiveRoomCode = liveRoom.LiveRoomCode,
                         };
-                        await BroadcastNotificationAsync(liveRoom.RoomId, validViewers.Select(x => x.UserCode).ToList(), message);
+                        await BroadcastNotificationAsync(liveRoom.LiveRoomCode, validViewers.Select(x => x.UserCode).ToList(), message);
                     }
                     if (request.LiveState == DeviceLiveStateEnum.Pushing && !validViewers.Any())
                     {
-                        //关闭直播 to device
-                        var message = new CloseLiveToDeviceNotification
+                        await _rtcService.CloseAsync(new CloseRequest
                         {
-                            LiveRoomCode = liveRoom.RoomId,
-                        };
-                        await BroadcastNotificationAsync(liveRoom.RoomId, new List<string> { deviceCode }, message);
+                            LiveRoomCode = liveRoom.LiveRoomCode
+                        });
                     }
                 }
             }
@@ -1336,13 +1345,13 @@ namespace WingDeviceService.Service
             {
                 UserId = userCode,
             };
-            var getUserSignResult = await _rtcService.GetUserSignAsync(getUserSignRequest);
+            var getUserSignResult = await _wingRtcService.GetUserSignAsync(getUserSignRequest);
             var userSign = getUserSignResult.UserSign;
             var getRoomIdRequest = new GetRoomIdRequest
             {
                 UniqueId = userCode,
             };
-            var getRoomIdResult = await _rtcService.GetRoomIdAsync(getRoomIdRequest);
+            var getRoomIdResult = await _wingRtcService.GetRoomIdAsync(getRoomIdRequest);
             var intRoomNo = (int)getRoomIdResult.RoomId;
             Logger.WriteLineInfo($"DeviceService CreateLiveRoomInfoAsync, DeviceUniqueCode:{request.DeviceUniqueCode}, UserCode:{userCode}, roomNo:{intRoomNo}");
             return new CreateLiveRoomInfoResult
@@ -1356,9 +1365,8 @@ namespace WingDeviceService.Service
         }
         private async Task<bool> BroadcastNotificationAsync(string roomId, IList<string> clientIds, NotificationDTO message)
         {
-            var broadcastNotificationRequest = new BroadcastRoomNotificationRequest
+            var broadcastNotificationRequest = new BroadcastNotificationRequest
             {
-                RoomId = roomId,
                 ClientIds = clientIds,
                 Message = message,
                 TransactionType = TransactionTypeEnum.Live,
@@ -1366,7 +1374,7 @@ namespace WingDeviceService.Service
                 ReceiverType = ApplicantTypeEnum.Client,
                 WSConnectType = WSConnectTypeEnum.Default
             };
-            return await _rtcService.BroadcastRoomNotificationAsync(broadcastNotificationRequest);
+            return await _notificationService.BroadcastMessageAsync(broadcastNotificationRequest);
         }
 
         /// <summary>