예제 #1
0
        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);
        }
예제 #2
0
 public async Task <IClientConnection> Connect(Guid connectionId)
 {
     EnsureIsNotDisposed();
     return(await OrleansClientConnection.Initialize(_factory, connectionId));
 }