void ServerConnection::onReceiveWriteDataRowsResponseHeader() { GenericReadResponseHeader responseHeader = *reinterpret_cast<GenericReadResponseHeader*>(_buffer); if(responseHeader.blockIdentifier != GenericReadResponseHeaderId || responseHeader.blockSize != sizeof(responseHeader)) { _onError(shared_from_this(), "Bad response from client upon write data rows request"); StopClient(); } else if(responseHeader.errorCode != NoError) { handleError(responseHeader); _onAwaitingCommand(shared_from_this()); } else if(responseHeader.dataSize != 0) { _onError(shared_from_this(), "Client sent unexpected data during write rows action"); StopClient(); } else { _onAwaitingCommand(shared_from_this()); } }
void AsyncTask::_error() { log::messageln("AsyncTask::_error %d - %s", getObjectID(), typeid(*this).name()); _status = status_failed; _onFinal(true); _finalize(true); _onError(); AsyncTaskEvent ev(ERROR, this); dispatchEvent(&ev); }
void ServerConnection::handleError(const GenericReadResponseHeader &header) { std::stringstream s; s << "Client reported \"" << ErrorStr::GetStr(header.errorCode) << '\"'; if(header.dataSize > 0) { std::vector<char> message(header.dataSize+1); boost::asio::read(_socket, boost::asio::buffer(&message[0], header.dataSize)); message[header.dataSize] = 0; s << " (detailed info: " << &message[0] << ')'; } _onError(shared_from_this(), s.str()); }
void ServerConnection::onReceiveReadDataRowsResponseHeader() { GenericReadResponseHeader responseHeader = *reinterpret_cast<GenericReadResponseHeader*>(_buffer); if(responseHeader.blockIdentifier != GenericReadResponseHeaderId || responseHeader.blockSize != sizeof(responseHeader)) { _onError(shared_from_this(), "Bad response from client upon read data rows request"); StopClient(); } else if(responseHeader.errorCode != NoError) { handleError(responseHeader); _onAwaitingCommand(shared_from_this()); } else { prepareBuffer(responseHeader.dataSize); boost::asio::async_read(_socket, boost::asio::buffer(_buffer, responseHeader.dataSize), boost::bind(&ServerConnection::onReceiveReadDataRowsResponseData, shared_from_this(), responseHeader.dataSize)); } }