create migration plan
This commit is contained in:
54
src/rpc.h
54
src/rpc.h
@@ -46,6 +46,55 @@ public:
|
||||
void newZaddr (bool sapling, const std::function<void(json)>& cb);
|
||||
void newTaddr (const std::function<void(json)>& cb);
|
||||
|
||||
// Batch method. Note: Because of the template, it has to be in the header file.
|
||||
template<class T>
|
||||
void getBatchRPC(const QList<T>& payloads,
|
||||
std::function<json(T)> payloadGenerator,
|
||||
std::function<void(QMap<T, json>*)> cb) {
|
||||
auto responses = new QMap<T, json>(); // zAddr -> list of responses for each call.
|
||||
int totalSize = payloads.size();
|
||||
|
||||
for (auto item: payloads) {
|
||||
json payload = payloadGenerator(item);
|
||||
|
||||
QNetworkReply *reply = restclient->post(request, QByteArray::fromStdString(payload.dump()));
|
||||
|
||||
QObject::connect(reply, &QNetworkReply::finished, [=] {
|
||||
reply->deleteLater();
|
||||
|
||||
auto all = reply->readAll();
|
||||
auto parsed = json::parse(all.toStdString(), nullptr, false);
|
||||
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
qDebug() << QString::fromStdString(parsed.dump());
|
||||
qDebug() << reply->errorString();
|
||||
|
||||
(*responses)[item] = json::object(); // Empty object
|
||||
} else {
|
||||
if (parsed.is_discarded()) {
|
||||
(*responses)[item] = json::object(); // Empty object
|
||||
} else {
|
||||
(*responses)[item] = parsed["result"];
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
auto waitTimer = new QTimer(main);
|
||||
QObject::connect(waitTimer, &QTimer::timeout, [=]() {
|
||||
if (responses->size() == totalSize) {
|
||||
waitTimer->stop();
|
||||
|
||||
cb(responses);
|
||||
|
||||
waitTimer->deleteLater();
|
||||
}
|
||||
});
|
||||
waitTimer->start(100);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private:
|
||||
void doRPC (const json& payload, const std::function<void(json)>& cb);
|
||||
void doSendRPC (const json& payload, const std::function<void(json)>& cb);
|
||||
@@ -71,11 +120,6 @@ private:
|
||||
void handleConnectionError (const QString& error);
|
||||
void handleTxError (const QString& error);
|
||||
|
||||
// Batch
|
||||
void getBatchRPC(const QList<QString>& payloads,
|
||||
std::function<json(QString)> payloadGenerator,
|
||||
std::function<void(QMap<QString, json>*)> cb);
|
||||
|
||||
QNetworkAccessManager* restclient;
|
||||
QNetworkRequest request;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user