CPLErr RasdamanDataset::IRasterIO( GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize, int nYSize, void * pData, int nBufXSize, int nBufYSize, GDALDataType eBufType, int nBandCount, int *panBandMap, GSpacing nPixelSpace, GSpacing nLineSpace, GSpacing nBandSpace, GDALRasterIOExtraArg* psExtraArg) { if (eRWFlag != GF_Read) { CPLError(CE_Failure, CPLE_NoWriteAccess, "Write support is not implemented."); return CE_Failure; } transaction.begin(r_Transaction::read_only); /* TODO: Setup database access/transaction */ int dummyX, dummyY; /* Cache the whole image region */ CPLDebug("rasdaman", "Pre-caching region (%d, %d, %d, %d).", nXOff, nXOff + nXSize, nYOff, nYOff + nYSize); request_array(nXOff, nXOff + nXSize, nYOff, nYOff + nYSize, dummyX, dummyY); CPLErr ret = GDALDataset::IRasterIO(eRWFlag, nXOff, nYOff, nXSize, nYSize, pData, nBufXSize, nBufYSize, eBufType, nBandCount, panBandMap, nPixelSpace, nLineSpace, nBandSpace, psExtraArg); transaction.commit(); /* Clear the cache */ clear_array_cache(); return ret; }
QVariant RequestManager::processMessage(QString buffered_message) { // Parse function method and parameters buffered_message.chop(1); buffered_message.remove(0,1); // First turn string into QJSonDocument QJsonParseError error; QJsonDocument document( QJsonDocument::fromJson(buffered_message.toLocal8Bit(),&error)); // Check if there was an error if(error.error != QJsonParseError::NoError) { qDebug() << "Error Parsing incoming Json Message:" << error.errorString() << "\nMessage Recieved: " << buffered_message; return QVariant(); } // Begin Parsing Arguments QJsonArray request_array (document.array()); QVariant parameter; QJsonObject func = request_array.first().toObject(); int param_count = request_array.size()-1; if(param_count > 1) { QVariantList params; for(int i = 1; i < param_count+1; ++i) { params.append(request_array.at(i).toObject()); } parameter.setValue(params); } else if( param_count == 1) { parameter = QVariant::fromValue(request_array.at(param_count).toObject()); } else { parameter = QVariant(); } QString functionname(func["FuncName"].toString()); QTcpSocket * caller(qobject_cast<QTcpSocket*>(sender())); QVariant return_val = processRequest(functionname,caller,parameter); if(!return_val.isNull()) { QJsonObject obj = return_val.value<QJsonObject>(); QJsonDocument doc; doc.setObject(obj); QByteArray message(doc.toJson()); return_val = QVariant::fromValue(doc); message.push_front("\001"); message.push_back("\004"); emit returnMessageReady(caller,message); } return return_val; }
r_Ref<r_GMarray>& RasdamanDataset::request_array(int x_lo, int x_hi, int y_lo, int y_hi, int& offsetX, int& offsetY) { return request_array(Subset(x_lo, x_hi, y_lo, y_hi), offsetX, offsetY); };