Ejemplo n.º 1
0
        private async void InitializeUserGrain()
        {
            var connectionGrain = GrainClient.GrainFactory.GetGrain <IUserConnectionGrain>(_userId);
            await connectionGrain.Disconnect(new DisconnectCause
            {
                Message = "new connection"
            });

            var observer = await GrainClient.GrainFactory.CreateObjectReference <IUserConnectionObserver>(this);

            await connectionGrain.Subscribe(observer);

            bool disposed;

            lock (_sync)
            {
                _userConnectionGrain = connectionGrain;
                _observer            = observer;
                disposed             = _disposed;
            }
            if (disposed)
            {
                DisposeUserGrain(connectionGrain, observer);
            }
        }
Ejemplo n.º 2
0
 public void Dispose()
 {
     lock (_sync)
     {
         _disposed = true;
         if (_userConnectionGrain != null)
         {
             var grain    = _userConnectionGrain;
             var observer = _observer;
             _userConnectionGrain = null;
             _observer            = null;
             DisposeUserGrain(grain, observer);
         }
     }
 }
Ejemplo n.º 3
0
        private async void DisposeUserGrain(IUserConnectionGrain grain, IUserConnectionObserver observer)
        {
            await grain.Unsubscribe(observer);

            await GrainClient.GrainFactory.DeleteObjectReference <IUserConnectionObserver>(observer);
        }