communication::ListTasksResponse task_manager::list_tasks() { communication::ListTasksResponse list_resp; list_resp.set_status(communication::Status::OK); std::unique_lock<std::mutex> list_lock(task_mutex_); for (int i = 0; i < tasks.size(); ++i) { list_resp.mutable_tasks()->Add(); int64_t task_id = i; auto tmp_i = list_resp.mutable_tasks(task_id); tmp_i->set_taskid(task_id); tmp_i->set_clientid(tasks[task_id].get_client_id()); tmp_i->mutable_task()->mutable_a()->set_value(tasks[task_id].get_a()); tmp_i->mutable_task()->mutable_b()->set_value(tasks[task_id].get_b()); tmp_i->mutable_task()->mutable_p()->set_value(tasks[task_id].get_p()); tmp_i->mutable_task()->mutable_m()->set_value(tasks[task_id].get_m()); tmp_i->mutable_task()->set_n(tasks[task_id].get_n()); auto res = tasks[task_id].get_result(); if (res >= 0) { tmp_i->set_result(res); } } return list_resp; }
void NetConnection::AsyncReadHandler(const boost::system::error_code& err, size_t byte_transferred) { if (!err) { Decrypt(m_readBuff, byte_transferred); auto spMsg = std::make_shared<RawMessage>(); // TODO: // 1. 如果protobuf有字段为0,接收到的数据中会有'\0'存在, // 而在C/C++的字符数组中'\0'表示结尾,导致ParseFromString没有读取到所 // 有的数据 // 2. ParseFromString是如何处理内存的。 if (spMsg->ParsePartialFromArray(m_readBuff, byte_transferred)) { spMsg->set_clientid(GetConnId()); m_spConnMgr->PutInRecvQueue(m_connId, spMsg); } Start(); } else if (boost::asio::error::eof == err) { // 对方关闭了连接 Close(); } else { std::cout << err << std::endl; Close(); } }
void UserLogin::MergeFrom(const UserLogin& from) { GOOGLE_CHECK_NE(&from, this); if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) { if (from.has_clienttype()) { set_clienttype(from.clienttype()); } if (from.has_clientid()) { set_clientid(from.clientid()); } if (from.has_clientsecret()) { set_clientsecret(from.clientsecret()); } if (from.has_sessionid()) { set_sessionid(from.sessionid()); } } mutable_unknown_fields()->append(from.unknown_fields()); }