示例#1
0
        public override async Task OnActivateAsync()
        {
            _keyData                = new ConnectionGrainKey(this.GetPrimaryKeyString());
            _streamProvider         = GetStreamProvider(Constants.STREAM_PROVIDER);
            _clientDisconnectStream = _streamProvider.GetStream <string>(Constants.CLIENT_DISCONNECT_STREAM_ID, _keyData.Id);

            if (_clientState.State.ServerId == Guid.Empty)
            {
                return;
            }

            _serverStream             = _streamProvider.GetStream <ClientMessage>(_clientState.State.ServerId, Constants.SERVERS_STREAM);
            _serverDisconnectedStream = _streamProvider.GetStream <Guid>(_clientState.State.ServerId, Constants.SERVER_DISCONNECTED);
            var subscriptions = await _serverDisconnectedStream.GetAllSubscriptionHandles();

            var subscriptionTasks = ArrayPool <Task> .Shared.Rent(subscriptions.Count);

            for (int i = 0; i < subscriptions.Count; i++)
            {
                var subscription = subscriptions[i];
                subscriptionTasks[i] = subscription.ResumeAsync((serverId, _) => OnDisconnect("server-disconnected"));
            }

            await Task.WhenAll(subscriptionTasks);

            ArrayPool <Task> .Shared.Return(subscriptionTasks);
        }
示例#2
0
        public override Task OnActivateAsync()
        {
            _keyData                = new ConnectionGrainKey(this.GetPrimaryKeyString());
            _streamProvider         = GetStreamProvider(Constants.STREAM_PROVIDER);
            _clientDisconnectStream = _streamProvider.GetStream <string>(Constants.CLIENT_DISCONNECT_STREAM_ID, _keyData.Id);

            if (State.ServerId == Guid.Empty)
            {
                return(Task.CompletedTask);
            }

            _serverStream = _streamProvider.GetStream <ClientMessage>(State.ServerId, Constants.SERVERS_STREAM);
            return(Task.CompletedTask);
        }
示例#3
0
        public override async Task OnActivateAsync()
        {
            _keyData        = new ConnectionGrainKey(this.GetPrimaryKeyString());
            _streamProvider = GetStreamProvider(Constants.STREAM_PROVIDER);

            if (State.ServerId == Guid.Empty)
            {
                return;
            }

            SetupStreams();

            await _serverDisconnectedStream.ResumeAllSubscriptionHandlers(
                async (serverId, _) => await OnDisconnect(ClientDisconnectReasons.ServerDisconnected)
                );
        }
示例#4
0
        public override async Task OnActivateAsync()
        {
            _keyData                = new ConnectionGrainKey(this.GetPrimaryKeyString());
            _streamProvider         = GetStreamProvider(Constants.STREAM_PROVIDER);
            _clientDisconnectStream = _streamProvider.GetStream <string>(Constants.CLIENT_DISCONNECT_STREAM_ID, _keyData.Id);

            if (State.ServerId == Guid.Empty)
            {
                return;
            }

            _serverStream             = _streamProvider.GetStream <ClientMessage>(State.ServerId, Constants.SERVERS_STREAM);
            _serverDisconnectedStream = _streamProvider.GetStream <Guid>(State.ServerId, Constants.SERVER_DISCONNECTED);
            var subscriptions = await _serverDisconnectedStream.GetAllSubscriptionHandles();

            var subscriptionTasks = new List <Task>();

            foreach (var subscription in subscriptions)
            {
                subscriptionTasks.Add(subscription.ResumeAsync(async(serverId, _) => await OnDisconnect("server-disconnected")));
            }
            await Task.WhenAll(subscriptionTasks);
        }
示例#5
0
 internal static IUserGrain GetUserGrain(this IGrainFactory factory, string hubName, string userId)
 => factory.GetGrain <IUserGrain>(ConnectionGrainKey.Build(hubName, userId));
示例#6
0
 internal static IGroupGrain GetGroupGrain(this IGrainFactory factory, string hubName, string groupName)
 => factory.GetGrain <IGroupGrain>(ConnectionGrainKey.Build(hubName, groupName));
示例#7
0
 internal static IClientGrain GetClientGrain(this IGrainFactory factory, string hubName, string connectionId)
 => factory.GetGrain <IClientGrain>(ConnectionGrainKey.Build(hubName, connectionId));