//--------------------------------------------------------------------- Task IGFClientSession.SubClient(IGFClientObserver sub) { Logger.Info("SubClient() GrainId={0}", this.GetPrimaryKey().ToString()); Subscribers.Subscribe(sub); return TaskDone.Done; }
//--------------------------------------------------------------------- Task IGFClientSession.UnsubClient(IGFClientObserver sub) { bool is_sub = Subscribers.IsSubscribed(sub); if (is_sub) { Subscribers.Unsubscribe(sub); DeactivateOnIdle(); } Logger.Info("UnsubClient() GrainId={0}", this.GetPrimaryKey().ToString()); return TaskDone.Done; }
//--------------------------------------------------------------------- public async void ChannelInactive(IChannelHandlerContext context) { var task = await Task.Factory.StartNew<Task>(async () => { var grain_clientsession = GrainClient.GrainFactory.GetGrain<IGFClientSession>(this.clientGuid); await grain_clientsession.UnsubClient(this.clientObserverWeak); this.context = null; this.clientObserver = null; this.clientObserverWeak = null; Console.WriteLine("GatewaySession.ChannelInactive() Name=" + context.Name); }); }
//--------------------------------------------------------------------- public async void ChannelActive(IChannelHandlerContext context) { this.context = context; Console.WriteLine("GatewaySession.ChannelActive() Name=" + context.Name); var task = await Task.Factory.StartNew<Task>(async () => { this.clientObserver = new GatewayClientObserver(this); this.clientObserverWeak = await GrainClient.GrainFactory.CreateObjectReference<IGFClientObserver>(this.clientObserver); this.clientGuid = Guid.NewGuid(); var grain_clientsession = GrainClient.GrainFactory.GetGrain<IGFClientSession>(this.clientGuid); await grain_clientsession.SubClient(this.clientObserverWeak); }); }