/// <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); } }
/// <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); }
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(); }
/// <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); }