protected void Recognize(IBuffer content, IPEndPoint endpoint)
        {
            if (_log.IsInfoEnabled)
            {
                _log.Info("Enter Recognize.");
            }

            while (content.HasRemaining)
            {
                try
                {
                    IBuffer buffer   = content.AsReadOnlyBuffer().Slice();
                    int     position = buffer.Position;

                    if (_session == null || _session.PacketDecoder == null)
                    {
                        break;
                    }

                    object obj = _session.PacketDecoder.Decode(
                        _session, new DefaultPacket(buffer, endpoint));

                    if (obj == null)
                    {
                        if (_log.IsDebugEnabled)
                        {
                            _log.Debug("Decode failed.");
                        }
                        break;
                    }

                    if (position == buffer.Position)
                    {
                        throw new Exception("PacketDecoder should change the packet position.");
                    }

                    content.Skip(buffer.Position);

                    if (_log.IsInfoEnabled)
                    {
                        _log.Info(obj.ToString());
                    }

                    _session.GetSessionFilterChain(FilterChainMode.Receive).ObjectReceived(obj);
                    continue;
                }
                catch (Exception exception)
                {
                    if (_log.IsWarnEnabled)
                    {
                        _log.Warn("Recognize failed.", exception);
                    }
                    break;
                }
            }

            if (_log.IsInfoEnabled)
            {
                _log.Info("Exit Recognize.");
            }
        }