Example #1
0
static void
handle_request(struct bufferevent* bev, void* arg)
{
	size_t len;
	paxos_msg msg;
	struct evproposer* p = arg;
	struct evbuffer* in = bufferevent_get_input(bev);
	
	while ((len = evbuffer_get_length(in)) > sizeof(paxos_msg)) {         //如果buffer中的数据数量大于一定,开始处理
		evbuffer_copyout(in, &msg, sizeof(paxos_msg));             //判断一下,如果大小还小于消息大小,说明未传输完成,返回,否则处理消息
		if (len < PAXOS_MSG_SIZE((&msg)))
			return;
		proposer_handle_msg(p, bev);
	}
}
Example #2
0
static void handle_request(struct bufferevent* bev, void* arg)
{
	size_t len;
	paxos_msg msg;
	struct evproposer* p = (struct evproposer*)arg;

	struct evbuffer* in = bufferevent_get_input(bev);

	/*读取触发的消息,循环读取,防止粘包*/
	while ((len = evbuffer_get_length(in)) > sizeof(paxos_msg)){
		evbuffer_copyout(in, &msg, sizeof(paxos_msg));
		
		if(len >= PAXOS_MSG_SIZE((&msg))){
			proposer_handle_msg(p, bev);
		}
	}
}
Example #3
0
static void on_read(struct bufferevent* bev, void* arg)
{
	size_t len;
	paxos_msg msg;
	struct evbuffer* in;
	struct tcp_receiver* r = (struct tcp_receiver *)arg;

	/*读取paxos msg,可能是多个*/
	in = bufferevent_get_input(bev);

	while((len = evbuffer_get_length(in)) > sizeof(paxos_msg)){
		evbuffer_copyout(in, &msg, sizeof(paxos_msg));
		if (len < PAXOS_MSG_SIZE((&msg)))
			return;

		r->callback(bev, r->arg);
	}
}