tgstation-server 6.19.0
The /tg/station 13 server suite
Loading...
Searching...
No Matches
Subscription.cs
Go to the documentation of this file.
1using System;
2using System.Threading;
3using System.Threading.Tasks;
4
5using HotChocolate;
6using HotChocolate.Authorization;
7using HotChocolate.Execution;
8using HotChocolate.Subscriptions;
9using HotChocolate.Types;
10
13
15{
20 [Authorize(ApplyPolicy.Validation)] // See https://github.com/ChilliCream/graphql-platform/issues/6259
21 [GraphQLDescription(GraphQLDescription)]
22 public sealed class Subscription
23 {
27 public const string GraphQLDescription = "Root Subscription type. Note that subscriptions are performed over Server Sent events.";
28
34 public static string SessionInvalidatedTopic(IAuthenticationContext authenticationContext)
35 {
36 ArgumentNullException.ThrowIfNull(authenticationContext);
37 return $"SessionInvalidated.{authenticationContext.SessionId}";
38 }
39
48 public ValueTask<ISourceStream<SessionInvalidationReason>> SessionInvalidatedStream(
49 [Service] HotChocolate.Subscriptions.ITopicEventReceiver receiver, // Intentionally not using our override here, topic callers are built to explicitly handle cases of server shutdown
50 [Service] ISessionInvalidationTracker invalidationTracker,
51 [Service] IAuthenticationContext authenticationContext,
52 CancellationToken cancellationToken)
53 {
54 ArgumentNullException.ThrowIfNull(receiver);
55 ArgumentNullException.ThrowIfNull(invalidationTracker);
56
57 var subscription = receiver.SubscribeAsync<SessionInvalidationReason>(SessionInvalidatedTopic(authenticationContext), cancellationToken);
58 invalidationTracker.TrackSession(authenticationContext);
59 return subscription;
60 }
61
67 [Subscribe(With = nameof(SessionInvalidatedStream))]
68 public SessionInvalidationReason SessionInvalidated([EventMessage] SessionInvalidationReason sessionInvalidationReason)
69 => sessionInvalidationReason;
70 }
71}
Root type for GraphQL subscriptions.
const string GraphQLDescription
Description to show on the Subscription type.
ValueTask< ISourceStream< SessionInvalidationReason > > SessionInvalidatedStream([Service] HotChocolate.Subscriptions.ITopicEventReceiver receiver, [Service] ISessionInvalidationTracker invalidationTracker, [Service] IAuthenticationContext authenticationContext, CancellationToken cancellationToken)
ISourceStream for SessionInvalidated(SessionInvalidationReason).
static string SessionInvalidatedTopic(IAuthenticationContext authenticationContext)
Gets the topic name for the login session represented by a given authenticationContext .
SessionInvalidationReason SessionInvalidated([EventMessage] SessionInvalidationReason sessionInvalidationReason)
Receive a SessionInvalidationReason immediately before the current login session is invalidated.
For creating and accessing authentication contexts.
SessionInvalidationReason
Reasons TGS may invalidate a user's login session.