From 3bc8ee1de171f0bd8e226542d75c842c5b2e7175 Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 24 Apr 2022 15:22:05 +0800 Subject: ... --- BackEnd/Timeline/SignalRHub/ITimelineClient.cs | 5 +++- BackEnd/Timeline/SignalRHub/TimelineHub.cs | 38 ++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) (limited to 'BackEnd/Timeline/SignalRHub') diff --git a/BackEnd/Timeline/SignalRHub/ITimelineClient.cs b/BackEnd/Timeline/SignalRHub/ITimelineClient.cs index 0d1be093..675643aa 100644 --- a/BackEnd/Timeline/SignalRHub/ITimelineClient.cs +++ b/BackEnd/Timeline/SignalRHub/ITimelineClient.cs @@ -1,9 +1,12 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; namespace Timeline.SignalRHub { public interface ITimelineClient { + [Obsolete("Use v2.")] Task OnTimelinePostChanged(string timelineName); + Task OnTimelinePostChangedV2(string owner, string timeline); } } diff --git a/BackEnd/Timeline/SignalRHub/TimelineHub.cs b/BackEnd/Timeline/SignalRHub/TimelineHub.cs index 0bfda84c..1925a992 100644 --- a/BackEnd/Timeline/SignalRHub/TimelineHub.cs +++ b/BackEnd/Timeline/SignalRHub/TimelineHub.cs @@ -20,11 +20,18 @@ namespace Timeline.SignalRHub _timelineService = timelineService; } + [Obsolete("Use overload with owner.")] public static string GenerateTimelinePostChangeListeningGroupName(string timelineName) { return $"timeline-post-change-{timelineName}"; + } + + public static string GenerateTimelinePostChangeListeningGroupName(string owner, string timeline) + { + return $"v2-timeline-post-change-{owner}/{timeline}"; } + [Obsolete("Use v2.")] public async Task SubscribeTimelinePostChange(string timelineName) { try @@ -48,11 +55,42 @@ namespace Timeline.SignalRHub } } + public async Task SubscribeTimelinePostChangeV2(string owner, string timeline) + { + try + { + var timelineId = await _timelineService.GetTimelineIdAsync(owner, timeline); + var user = Context.User; + if (!user.HasPermission(UserPermission.AllTimelineManagement) && !await _timelineService.HasReadPermissionAsync(timelineId, user.GetOptionalUserId())) + throw new HubException(Resource.MessageForbidden); + + var group = GenerateTimelinePostChangeListeningGroupName(owner, timeline); + await Groups.AddToGroupAsync(Context.ConnectionId, group); + _logger.LogInformation(Resource.LogSubscribeTimelinePostChange, Context.ConnectionId, group); + } + catch (ArgumentException) + { + throw new HubException(Resource.MessageTimelineNameInvalid); + } + catch (EntityNotExistException) + { + throw new HubException(Resource.MessageTimelineNotExist); + } + } + + [Obsolete("Use v2.")] public async Task UnsubscribeTimelinePostChange(string timelineName) { var group = GenerateTimelinePostChangeListeningGroupName(timelineName); await Groups.RemoveFromGroupAsync(Context.ConnectionId, group); _logger.LogInformation(Resource.LogUnsubscribeTimelinePostChange, Context.ConnectionId, group); + } + + public async Task UnsubscribeTimelinePostChangeV2(string owner, string timeline) + { + var group = GenerateTimelinePostChangeListeningGroupName(owner, timeline); + await Groups.RemoveFromGroupAsync(Context.ConnectionId, group); + _logger.LogInformation(Resource.LogUnsubscribeTimelinePostChange, Context.ConnectionId, group); } } } -- cgit v1.2.3