internal static async Task <OrleansClientConnection> Initialize(IGrainFactory grainFactory, Guid connectionId) { var stream = GrainClient.GetStreamProvider(StreamConstants.ProviderName) .GetStream <IClientEvent>(connectionId, StreamConstants.ClientNamespace); var existingHandles = await stream.GetAllSubscriptionHandles(); var connection = new OrleansClientConnection(connectionId, grainFactory); var handle = existingHandles.Count > 0 ? existingHandles[0] : await stream.SubscribeAsync(connection.OnNext, connection.OnError, connection.OnCompleted); if (existingHandles.Count > 0) { await handle.ResumeAsync(connection.OnNext, connection.OnError, connection.OnCompleted); } connection._stream = handle; return(connection); }
public async Task <IClientConnection> Connect(Guid connectionId) { EnsureIsNotDisposed(); return(await OrleansClientConnection.Initialize(_factory, connectionId)); }