|
@@ -0,0 +1,68 @@
|
|
|
+using CallCenter.Caches;
|
|
|
+using CallCenter.Realtimes;
|
|
|
+using Microsoft.AspNetCore.SignalR;
|
|
|
+using XF.Domain.Dependency;
|
|
|
+using XF.Domain.Exceptions;
|
|
|
+
|
|
|
+namespace CallCenter.Api.Realtimes
|
|
|
+{
|
|
|
+ public class RealtimeService : IRealtimeService, IScopeDependency
|
|
|
+ {
|
|
|
+ private readonly IHubContext<CallCenterHub> _hubContext;
|
|
|
+ private readonly IUserCacheManager _userCacheManager;
|
|
|
+
|
|
|
+ public RealtimeService(IHubContext<CallCenterHub> hubContext,IUserCacheManager userCacheManager)
|
|
|
+ {
|
|
|
+ _hubContext= hubContext;
|
|
|
+ _userCacheManager= userCacheManager;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 振铃事件通知
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="userId"></param>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ /// <exception cref="NotImplementedException"></exception>
|
|
|
+ public async Task RingAsync(string userId, RingDto dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var work = _userCacheManager.GetWorkByUser(userId);
|
|
|
+ if (string.IsNullOrEmpty(work.SignalRId))
|
|
|
+ throw new UserFriendlyException("无效signalr.connectionId");
|
|
|
+ await _hubContext.Clients.Client(work.SignalRId).SendAsync(RealtimeMethods.Ring, dto, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 应答事件通知
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="userId"></param>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ /// <exception cref="NotImplementedException"></exception>
|
|
|
+ public async Task AnsweredAsync(string userId, AnseredDto dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var work = _userCacheManager.GetWorkByUser(userId);
|
|
|
+ if (string.IsNullOrEmpty(work.SignalRId))
|
|
|
+ throw new UserFriendlyException("无效signalr.connectionId");
|
|
|
+ await _hubContext.Clients.Client(work.SignalRId).SendAsync(RealtimeMethods.Answered, dto, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 电话挂断事件通知
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="userId"></param>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ /// <exception cref="NotImplementedException"></exception>
|
|
|
+ public async Task ByeAsync(string userId, ByeDto dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var work = _userCacheManager.GetWorkByUser(userId);
|
|
|
+ if (string.IsNullOrEmpty(work.SignalRId))
|
|
|
+ throw new UserFriendlyException("无效signalr.connectionId");
|
|
|
+ await _hubContext.Clients.Client(work.SignalRId).SendAsync(RealtimeMethods.Bye, dto, cancellationToken);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|