Exemplo n.º 1
0
        public async Task Startup(CancellationToken cancellationToken)
        {
            using (_remoteStream = _tcpClient.GetStream())
            {
                _clientboundPacketObserverRef = await _grainFactory.CreateObjectReference <IClientboundPacketObserver>(_outcomingPacketObserver);

                await _grainFactory.GetGrain <IClientboundPacketSink>(_sessionId).Subscribe(_clientboundPacketObserverRef);

                try
                {
                    while (!cancellationToken.IsCancellationRequested &&
                           !_outcomingPacketDispatcher.Completion.IsCompleted)
                    {
                        await DispatchIncomingPacket();
                    }
                }
                catch (EndOfStreamException)
                {
                    var router = _grainFactory.GetGrain <IPacketRouter>(_sessionId);
                    await router.Close();

                    await _outcomingPacketDispatcher.Completion;
                }
            }
        }
Exemplo n.º 2
0
        public async Task Startup(CancellationToken cancellationToken)
        {
            using (_remoteStream = _tcpClient.GetStream())
            {
                // subscribe observer to get packet from server
                _clientboundPacketObserverRef = await _grainFactory.CreateObjectReference <IClientboundPacketObserver>(_outcomingPacketObserver);

                await _grainFactory.GetGrain <IClientboundPacketSink>(_sessionId).Subscribe(_clientboundPacketObserverRef);

                try
                {
                    DateTime expiredTime = DateTime.Now + TimeSpan.FromSeconds(10);
                    while (!cancellationToken.IsCancellationRequested &&
                           !_outcomingPacketDispatcher.Completion.IsCompleted)
                    {
                        await DispatchIncomingPacket();

                        // renew subscribe, 10 sec
                        if (DateTime.Now > expiredTime)
                        {
                            await _grainFactory.GetGrain <IClientboundPacketSink>(_sessionId).Subscribe(_clientboundPacketObserverRef);

                            expiredTime = DateTime.Now + TimeSpan.FromSeconds(10);
                        }
                    }
                }
                catch (EndOfStreamException)
                {
                    var router = _grainFactory.GetGrain <IPacketRouter>(_sessionId);
                    await router.Close();

                    await _outcomingPacketDispatcher.Completion;
                }
            }
        }
Exemplo n.º 3
0
 // Also clients use this to unsubscribe themselves to no longer receive the messages.
 public Task UnSubscribe(IClientboundPacketObserver observer)
 {
     _subsManager.Unsubscribe(observer);
     return(Task.CompletedTask);
 }