void handleOp(zmq::socket_t &socket, int opCode) { std::string s_req, trace, line; std::cout<<"Trace: "; std::getline(std::cin, trace); Request req; Id id; Person person; Request_Header_Type type; switch (opCode) { case 1: type = Request_Header_Type_LOOKUP; std::cout<<"id: "; line.clear(); std::getline(std::cin, line); id = makeId(fromString<int>(line)); req = makeRequest(type, id, person, false, trace); break; case 3: type = Request_Header_Type_REMOVE; std::cout<<"id: "; line.clear(); std::getline(std::cin, line); id = makeId(fromString<int>(line)); req = makeRequest(type, id, person, false, trace); break; case 2: { type = Request_Header_Type_INSERT; std::cout<<"id: "; line.clear(); std::getline(std::cin, line); id = makeId(fromString<int>(line)); line.clear(); std::cout<<"Name: "; std::getline(std::cin, line); std::string ph, ovr; std::cout<<"Phone: "; std::getline(std::cin, ph); std::cout<<"Overwrite: (y/n) "; std::getline(std::cin, ovr); person = makePerson(line, ph); req = makeRequest(type, id, person, ovr.compare("y") == 0, trace); break; } }; std::cout<<"Request: "<<requestToString(req); TRACE(std::cout, ""); req.SerializeToString(&s_req); zmq::message_t z_req(s_req.size()); memcpy(z_req.data(), (void *)s_req.data(), s_req.size()); socket.send(z_req); zmq::message_t z_resp; socket.recv(&z_resp); std::string s_resp((char *)z_resp.data(), z_resp.size()); Response resp; resp.ParseFromString(s_resp); std::cout<<"Response = "<<responseToString(resp); }
void TcpClient::OnPackage(const char *buf, size_t len) { if (buf == NULL || len <= 0) return; TopMessage msg; if(!msg.ParseFromArray(buf, len)) return; __int64 seq = msg.seq(); switch (msg.msg_type()) { default: break; case RESPONSE: { switch (msg.sub_msg_type()) { default: break; case LOGIN: { /*Response *pLoginResponse = new Response; if (!pLoginResponse->ParseFromString(msg.data())) { delete pLoginResponse; return; } ResultNetData *pResultNetData = new ResultNetData; pResultNetData->nSeq = seq; pResultNetData->pResponse = pLoginResponse; lock_guard<mutex> lg(G.m_netQueueMutex); G.m_listNetQueue.push_back(pResultNetData); G.m_nServerDate = msg.timestamp();*/ Response loginResponse; if (!loginResponse.ParseFromString(msg.data())) { return; } G.m_nServerDate = msg.timestamp(); if (loginResponse.response_code() == OK) { G.m_nServerDate = msg.timestamp(); G.m_nStatus = STATUS_AUTHED; for (int idx = 0; idx < loginResponse.data_size(); idx++) { Data crdata = loginResponse.data(idx); ProtobufResponseData pbrd; if (idx == 0) { if(crdata.type() == PROTOBUF) { if (!pbrd.ParseFromString(crdata.value())) continue; } else continue; for(int i = 0; i < pbrd.rowvalue_size(); i++) { RowValue rowValue = pbrd.rowvalue(i); for(int j = 0; j < rowValue.columnvalue_size(); j++) { RowValue_ColumnValue columnValue = rowValue.columnvalue(j); if (pbrd.columninfo(j).name() == "money") { } else if (pbrd.columninfo(j).name() == "username") { // G.m_strUserName = columnValue.stringvalue(); } else if (pbrd.columninfo(j).name() == "userid") { G.m_strUserId = columnValue.stringvalue(); } } } } } cocos2d::Director::getInstance()->getScheduler()->performFunctionInCocosThread([] { //G.m_mapReserveData.find(nSeq); auto scene = CardScene::createScene(); cocos2d::Director::getInstance()->replaceScene(scene); } ); } else if (loginResponse.response_code() == NOT_FOUND) { } } break; case POST: { Response *pResponse = new Response; if (!pResponse->ParseFromString(msg.data())) { delete pResponse; return; } ResultNetData *pResultNetData = new ResultNetData; pResultNetData->nSeq = seq; pResultNetData->pResponse = pResponse; lock_guard<mutex> lg(G.m_netQueueMutex); G.m_listNetQueue.push_back(pResultNetData); G.m_nServerDate = msg.timestamp(); } break; } } break; } }
Response kConnection::receive_response() { Response r; auto s = readmessage(); r.ParseFromString(s); return r; }