Ejemplo n.º 1
0
        private async Task <bool> RegisterSubscriptionOrRespond(ISubscription <TSchema> subscription)
        {
            var registrationComplete = false;

            if (!subscription.IsValid)
            {
                if (subscription.Messages.Count == 1)
                {
                    await subscription.Client.SendMessage(
                        new ApolloServerErrorMessage(
                            subscription.Messages[0],
                            clientProvidedId : subscription.Id))
                    .ConfigureAwait(false);
                }
                else
                {
                    var response = GraphOperationRequest.FromMessages(subscription.Messages, subscription.QueryData);
                    await subscription.Client
                    .SendMessage(new ApolloServerDataMessage(subscription.Id, response))
                    .ConfigureAwait(false);
                }

                await subscription.Client
                .SendMessage(new ApolloServerCompleteMessage(subscription.Id))
                .ConfigureAwait(false);
            }
            else
            {
                var totalTracked = _subscriptions.Add(subscription);
                if (totalTracked == 1)
                {
                    this.SubscriptionRouteAdded?.Invoke(this, new ApolloSubscriptionFieldEventArgs(subscription.Field));
                }

                _logger?.SubscriptionCreated(subscription);
                registrationComplete = true;
            }

            return(registrationComplete);
        }