public override async Task OnActivateAsync()
        {
            KeyData         = new ConnectionGrainKey(this.GetPrimaryKeyString());
            _streamProvider = GetStreamProvider(Constants.STREAM_PROVIDER);
            var subscriptionTasks = new List <Task>();

            foreach (var connection in State.Connections)
            {
                var clientDisconnectStream = _streamProvider.GetStream <string>(Constants.CLIENT_DISCONNECT_STREAM_ID, connection.Key);
                var subscriptions          = await clientDisconnectStream.GetAllSubscriptionHandles();

                foreach (var subscription in subscriptions)
                {
                    subscriptionTasks.Add(subscription.ResumeAsync(async(connectionId, _) => await Remove(connectionId)));
                }
            }
            await Task.WhenAll(subscriptionTasks);
        }
Example #2
0
        public override async Task OnActivateAsync()
        {
            KeyData = new ConnectionGrainKey(this.GetPrimaryKeyString());
            _logger.Info("Activate {hubName} ({groupId})", KeyData.HubName, KeyData.Id);
            _streamProvider = GetStreamProvider(Constants.STREAM_PROVIDER);

            _cleanupTimer = RegisterTimer(
                _ => CleanupStreams(),
                State,
                _cleanupPeriod,
                _cleanupPeriod);

            if (State.Connections.Count == 0)
            {
                return;
            }

            foreach (var connection in State.Connections)
            {
                var clientDisconnectStream = GetClientDisconnectStream(connection);
                await clientDisconnectStream.ResumeAllSubscriptionHandlers(async (connectionId, _) => await Remove(connectionId));
            }
        }