コード例 #1
0
ファイル: AutoReconnector.cs プロジェクト: jmptrader/griffin
 /// <summary>
 /// Process data that was received from the channel.
 /// </summary>
 /// <param name="ctx">Context which is used for the currently processed channel</param>
 /// <param name="e">Event being processed.</param>
 public void HandleUpstream(IChannelHandlerContext ctx, IChannelEvent e)
 {
     if (e is ClosedEvent)
     {
         _timer = new Timer(OnTryReconnect, ctx, _interval, TimeSpan.Zero);
         ctx.SendUpstream(e);
     }
     else if (e is ConnectedEvent)
     {
         _timer.Dispose();
         _timer = null;
         ctx.SendUpstream(e);
     }
 }
コード例 #2
0
ファイル: Decoder.cs プロジェクト: jmptrader/griffin
        /// <summary>
        /// Process data that was received from the channel.
        /// </summary>
        /// <param name="ctx">Context which is used for the currently processed channel</param>
        /// <param name="e">Event being processed.</param>
        public void HandleUpstream(IChannelHandlerContext ctx, IChannelEvent e)
        {
            if (e is ConnectedEvent)
            {
                ctx.State = new Context();
            }
            if (e is ClosedEvent)
            {
                Reset();
            }
            else if (e is MessageEvent)
            {
                _context = ctx.State.As<Context>();
                _context._buffer = e.As<MessageEvent>().Message.As<BufferSlice>();
                _context._reader.Assign(_context._buffer);
                while (_context._parserMethod()) ;

                if (_context._isComplete)
                {
                    e.As<MessageEvent>().Message = _context._message;
                    OnComplete(ctx, e);
                }
                return;
            }

            ctx.SendUpstream(e);
        }
コード例 #3
0
ファイル: Decoder.cs プロジェクト: jmptrader/griffin
        public void HandleUpstream(IChannelHandlerContext ctx, IChannelEvent e)
        {
            if (e is ConnectedEvent)
            {
                ctx.State = new DecoderContext
                                {
                                    ParserMethod = ParseBeforeHeader
                                };
            }
            else if (e is ClosedEvent)
            {
                ctx.State = null;
            }
            if (!(e is MessageEvent))
            {
                ctx.SendUpstream(e);
                return;
            }

            var evt = e.As<MessageEvent>();
            _context = ctx.State.As<DecoderContext>();

            var buffer = evt.Message.As<BufferSlice>();
            _context.Reader.Assign(buffer);

            try
            {
                while (_context.ParserMethod()) ;
            }
            catch (Exception err)
            {
                ctx.SendUpstream(new ExceptionEvent(err));
                return;
            }

            if (!_context.IsComplete)
                return; // no more processing

            evt.Message = _context.Message;
            _context.ParserMethod = ParseBeforeHeader;
            ctx.SendUpstream(evt);
            _context.Message.Reset();
        }
コード例 #4
0
ファイル: Decoder.cs プロジェクト: jmptrader/griffin
 /// <summary>
 /// Called when a message has been parsed successfully.
 /// </summary>
 /// <param name="ctx"></param>
 /// <param name="channelEvent"></param>
 protected virtual void OnComplete(IChannelHandlerContext ctx, IChannelEvent channelEvent)
 {
     ctx.SendUpstream(channelEvent);
 }