int32 handle_service_request(const std::string& resp){ int32 ret = 0; ServiceRequest svreq; std::string outpayload; ++total_recv_req; if(!svreq.ParseFromString(resp)){ LOG_OUT << "cid:" << m_cid << " handle_service_request ParseFromString fail\n"; return -1; } if(svreq.to_sessid() != m_sessid){ LOG_OUT << "cid:" << m_cid << " handle_service_request,ret sessid:" << svreq.from_sessid() << " != m_sessid:" << m_sessid << std::endl; ret = -200; } switch(svreq.from_type()){ case 200: ret = handle_peer_request(svreq.sn(), svreq.payload(), outpayload); break; default: LOG_OUT << "cid:" << m_cid << ", handleServiceRequest:" << svreq.payload() << std::endl; } exit: ServiceResponse svresp; svresp.set_sn(svreq.sn()); svresp.set_from_sessid(m_sessid); svresp.set_to_sessid(svreq.from_sessid()); svresp.set_from_type(0); svresp.set_to_type(svreq.from_type()); svresp.set_status(ret); svresp.set_payload(outpayload); std::string msg; std::string body; svresp.SerializeToString(&body); ret = send_req(201, body); if(ret == 0) ++recv_req_success_count; m_status = CLIENT_STATUS_INIT; return ret; }
int32 run(){ int32 ret = 0; int32 cnt = 0; while(1){ ++cnt; std::string resp; ret = recv_resp(resp); if(ret < 0){ std::cout << "recv_resp fail!" << std::endl; return -1; } ServiceRequest svreq; parse_service_req(resp, svreq); ServiceResponse svresp; svresp.set_from_sessid(m_sessid); svresp.set_to_sessid(svreq.from_sessid()); svresp.set_svtype(svreq.svtype()); svresp.set_sn(svreq.sn()); svresp.set_status(0); svresp.set_payload(svreq.payload()); std::string req; const_service_resp(svresp, req); ret = send_req(SERVICE_RESP, req); if(ret < 0){ std::cout << "send_req fail, sessid:" << svreq.from_sessid() << ", sn:" << svreq.sn() << std::endl; return -1; }else{ std::cout << "handle request, sessid:" << svreq.from_sessid() << ", sn:" << svreq.sn() << " ,send ret:" << ret << std::endl; } } return ret; }