Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- try
- {
- boost::asio::io_service ioService;
- boost::asio::ip::udp::endpoint serverEndpoint;
- boost::asio::ip::udp::socket socket(ioService);
- boost::asio::ip::udp::resolver resolver(ioService);
- boost::asio::streambuf sb;
- std::ostream os(&sb);
- std::istream is(&sb);
- MSG_T CITE_REQUEST_MSG;
- initVariables(serverEndpoint, socket, resolver, CITE_REQUEST_MSG);
- os.write((char*)&CITE_REQUEST_MSG, sizeof(CITE_REQUEST_MSG));
- size_t sentBytes = socket.send_to(sb.data(), serverEndpoint);
- sb.consume(sentBytes);
- uint8_t msgType;
- uint16_t quotePartsNumber = -1;
- CITE_MSG_T replyMsg;
- replyMsg.text.data = NULL;
- boost::asio::streambuf::mutable_buffers_type mutableBuf =
- sb.prepare(sizeof(replyMsg) + MAX_PART_SIZE);
- do
- {
- timed_wait_on_socket(socket, (quotePartsNumber > 0),
- boost::bind(&QaSProtocolClient::timeoutHandler, this, _1, _2));
- size_t receivedBytes = socket.receive_from(mutableBuf,
- serverEndpoint);
- sb.commit(receivedBytes);
- is.read((char*)&msgType, sizeof(msgType));
- // sb.consume(is.gcount());
- if (msgType == 0)
- {
- uint8_t errno_;
- is.read((char*)errno_, sizeof(errno_));
- sb.consume(receivedBytes);
- errno = __builtin_bswap64(errno_);
- throw QaSProtocolClientException("Server returned error");
- }
- replyMsg.msg_id = msgType;
- is.read((char*)&replyMsg.key, sizeof(replyMsg.key));
- is.read((char*)&replyMsg.index, sizeof(replyMsg.index));
- is.read((char*)&replyMsg.parts, sizeof(replyMsg.parts));
- is.read((char*)&replyMsg.text.data_length,
- sizeof(replyMsg.text.data_length));
- if (replyMsg.text.data != NULL)
- {
- delete[] replyMsg.text.data;
- }
- replyMsg.text.data = new char[replyMsg.text.data_length];
- is.read(replyMsg.text.data, htons(replyMsg.text.data_length));
- sb.consume(receivedBytes);
- qDebug() << msgType << " " << replyMsg.index << " " << replyMsg.parts << " " << replyMsg.text.data_length << " "<< replyMsg.text.data;
- processReply(replyMsg, quotePartsNumber);
- }
- while(--quotePartsNumber > 0);
- delete[] replyMsg.text.data;
- aggregate_result(result);
- quoteParts.clear();
- quotePartsNumber = -1;
- }
- catch(std::exception& e)
- {
- throw QaSProtocolClientException(e.what());
- }
- return result;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement