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); }
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); }
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) ); }
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); }
internal static IUserGrain GetUserGrain(this IGrainFactory factory, string hubName, string userId) => factory.GetGrain <IUserGrain>(ConnectionGrainKey.Build(hubName, userId));
internal static IGroupGrain GetGroupGrain(this IGrainFactory factory, string hubName, string groupName) => factory.GetGrain <IGroupGrain>(ConnectionGrainKey.Build(hubName, groupName));
internal static IClientGrain GetClientGrain(this IGrainFactory factory, string hubName, string connectionId) => factory.GetGrain <IClientGrain>(ConnectionGrainKey.Build(hubName, connectionId));