| 291 | } |
| 292 | |
| 293 | bool wait_recv_task_result(std::string& recv_msg, const std::string &task_id) |
| 294 | { |
| 295 | PTraceInfo("recv_msg:" << recv_msg); |
| 296 | m_recv_buf = std::make_unique<char []> (MAX_BUF_SIZE);//TCPMsg::_make_arry_shared<char>(MAX_BUF_SIZE); |
| 297 | |
| 298 | try |
| 299 | { |
| 300 | int recv_msg_body_size = 0; |
| 301 | while (true) |
| 302 | { |
| 303 | memset(m_recv_buf.get(), 0, MAX_BUF_SIZE); |
| 304 | recv_msg_body_size = full_recv(m_socket_id, m_recv_buf.get(), MAX_BUF_SIZE - 1, 0); |
| 305 | if (recv_msg_body_size) |
| 306 | { |
| 307 | JsonMsg::JsonParser parser; |
| 308 | if (parser.load_json(m_recv_buf.get()) && parser.has_member_string("taskId") && (parser.get_string("taskId") != task_id)) |
| 309 | { |
| 310 | PTraceInfo("Wrong taskId: " << parser.get_string("taskId")); |
| 311 | return false; |
| 312 | } |
| 313 | } |
| 314 | PTraceInfo("tmp recv " << recv_msg_body_size << " B"); |
| 315 | |
| 316 | if (recv_msg_body_size > 0) |
| 317 | { |
| 318 | TCPMsg::TcpMsgHead* p_msg_head = (TCPMsg::TcpMsgHead*)m_recv_buf.get(); |
| 319 | char* p_msg_body = (char*)(m_recv_buf.get()) + sizeof(TCPMsg::TcpMsgHead); |
| 320 | |
| 321 | /* check msg type */ |
| 322 | switch ((TCPMsg::TcpMsgType)p_msg_head->m_type) |
| 323 | { |
| 324 | case TCPMsg::TcpMsgType::STATE_MSG: |
| 325 | { |
| 326 | m_task_status = string(p_msg_body, recv_msg_body_size); |
| 327 | PTraceInfo("tcp recv status: " << m_task_status << ", for task:" << m_task_id); |
| 328 | const uint32_t status = std::stoul(m_task_status); |
| 329 | if ((status == ((uint32_t)(PilotQVM::TaskStatus::FAILED))) |
| 330 | || (status == ((uint32_t)(PilotQVM::TaskStatus::CANCELLED)))) |
| 331 | { |
| 332 | PTraceError("Error: the status for task " << m_task_id << " is " << status); |
| 333 | //return false; /* 不退出循环,以接收具体错误信息 */ |
| 334 | } |
| 335 | continue; |
| 336 | } |
| 337 | break; |
| 338 | |
| 339 | case TCPMsg::TcpMsgType::RESULT_MSG: |
| 340 | { |
| 341 | stop_heart_thread(); |
| 342 | recv_msg.append(string(p_msg_body, recv_msg_body_size)); |
| 343 | PTraceInfo(" tmp recv result size:" << recv_msg_body_size); |
| 344 | } |
| 345 | break; |
| 346 | |
| 347 | default: |
| 348 | PTraceError("Error: Undef msg type:" << p_msg_head->m_type); |
| 349 | return false; |
| 350 | } |
no test coverage detected