Пример #1
0
void TcpConnection::handleRead(Timestamp receiveTime)
{
    LOG_DEBUG("TcpConnection::handleRead fd = %d, state = %s", socket_->fd(), getState(state_));
    loop_->assertInLoopThread();
    std::string data;
    size_t n = socket_->recv(data);
    inputBuffer_.write(data);
    if (n > 0)
    {
        messageCallback_(shared_from_this(), &inputBuffer_, receiveTime);
    }
    else if (n == 0)
    {
        handleClose();
    }
    else
    {
        handleError();
    }
}
Пример #2
0
void ProtobufCodec::onMessage(netlib::connectionPtr conn,netlib::Buffer *buf)
{
    while(buf->readableSize() >= (kMinMessageLen))  //类型为空,名字只占一个字母还有'/0'
    {
        printf("readableSize = %d\n",buf->readableSize());
        int len = buf->peekInt32();
        buf->moveReadIndex(sizeof(int32_t));

        assert(len < kMaxMessageLen && len >= kMinMessageLen);
        
        if(buf->readableSize() >= static_cast<size_t>(len))
        {
            MessagePtr message = parse(buf->getReadPeek(),len);
            //完整消息时才触发回调
            messageCallback_(conn,message);
            buf->moveReadIndex(len);
            printf("111\n");
        }
        printf("222\n");
    }
}
Пример #3
0
void Tcp_Session::handle_read(const boost::system::error_code& e, uint32_t bytes_transferred)
{
	if (!e)
	{
		// TODO: you could do some message processing here, like breaking it up
		// into smaller parts, rejecting unknown messages or handling the message protocol
		std::string message(boost::asio::buffer_cast<const char*>(m_buffer.data()), bytes_transferred);

		//std::cout <<"Tcp_Session::handle_read : "<< message << std::endl;
		m_buffer.consume(bytes_transferred);
		// create function to notify listeners
		messageCallback_(shared_from_this(), message);

		// wait for the next message
		read();
	}
	else if (e != boost::asio::error::operation_aborted)
	{
		DisconnectedCallback_(shared_from_this());
	}
}
Пример #4
0
void ProtobufCodec::onMessage(const TSessionPtr& connection, const std::string& strmessage)
{
	//message length
	const uint32_t len = PeekUInt32(strmessage.c_str());//after ntohl 
	if (kMinMessageLen < len && len < kMaxMessageLen)
	{
		if (len == strmessage.size() - kHeaderLen - 2)//checksum and "\r\n"
		{			
			shared_ptr_Msg message = Decode(strmessage.c_str() + kHeaderLen, len);
			//handle message callback
			messageCallback_(connection, message);
		}
		else
		{
			//invaild message
		}
	}
	else
	{
		//Invalid length
		//errorCallback_
	}

}