Example #1
0
int32 CliCon::handlePushResponse(const head& h, 
		const string& req){
	TimeRecorder t("SrvCon::handlePushResponse");
	int32 ret = 0;
	int32 conid = 0;
	string id; 
	PushResponse svresp;
	EventLoop* l = NULL;
	SendMsgOp* op = NULL;

	if(!svresp.ParseFromArray(req.data(), req.size())){
		ret = INPUT_FORMAT_ERROR;	
		goto exit;
	}


	if(!svresp.has_to_sessid() || !svresp.to_sessid().size()){
		ret = MISS_TO_SESSION_ID;
		goto exit;
	}

	//cout << "RESP_TO_SESSID:" << svresp.to_sessid() << endl;

	ret = getConFromSessid(svresp.to_sessid(), l, conid, id);
	if(ret < 0){
		goto exit;
	}
	//???
	op = new SendMsgOp(conid, PUSH_RESP, req);
	ret = l->addAsynOperator(op);
	if(ret < 0){
		svresp.set_status(ret);
		ret = 0;
		goto exit;
	}

	ef::atomicIncrement64(&req_cnt);
exit:
	ALogError("ConnectServer")  
		<< "<action:service_response> <sessid:"
		<< m_sess.sessid() << "> <from_sessid:" 
		<< svresp.from_sessid() << "> <to_sessid:"
		<< svresp.to_sessid() << "> <sn:"
		<< svresp.sn() << "> <status:" << svresp.status() 
		<< "> <errstr:" << getErrStr(ret) << ">";
	if(ret != INPUT_FORMAT_ERROR)
		ret = 0;
	return ret;
}
Example #2
0
int CliCon::handlePushRequest(const head& h, const string& req, 
	string& resp){
	TimeRecorder t("CliCon::handlePushRequest");

	int ret = 0;
	int conid = 0;

	EventLoop* l = NULL;
	NetOperator* op = NULL;

	PushResponse svresp;
	PushRequest svreq;
	string id;

	svresp.set_from_sessid("NULL");
	svresp.set_to_sessid("NULL");
	svresp.set_sn("null");

	if(!svreq.ParseFromArray(req.data(), req.size())){
		ret = INPUT_FORMAT_ERROR;
		goto exit;
	}

	svresp.set_sn(svreq.sn());
	svresp.set_status(0);

	if(type() < 0){
		ret = INVALID_TYPE;	
		goto exit;
	}

	svresp.set_to_sessid(svreq.from_sessid());

	ret = getConFromSessid(svreq.to_sessid(), l, conid, id);
	if(ret < 0){
		ret = INVALID_SESSION_ID;
		goto exit;
	}

	op = new SendMsgOp(conid, PUSH_REQ, req);	
	ret = l->addAsynOperator(op);
	if(ret < 0){
		svresp.set_status(ret);
		ret = 0;
		goto exit;
	}

	ef::atomicIncrement64(&req_cnt);

exit:
	if(ret < 0){
		svresp.set_status(ret);
	}

	if(svresp.status()){
		svresp.SerializeToString(&resp);
	}

	ALogError("ConnectServer") << "<action:service_request> <id:" 
		<< m_sess.id() << "> <version:" << m_sess.version() 
		<< "> <sessid:" << m_sess.sessid() << "> <from_sessid:"
		<< svreq.from_sessid() << "> <sn:" << svresp.sn()
		<< "> <to_sessid:" << svreq.to_sessid()
		<< "> <conid:" << conid << "> <status:" 
		<< svresp.status() << "> <errstr:"
		<< getErrStr(svresp.status()) << ">";
	return ret;
}