aboutsummaryrefslogtreecommitdiff
path: root/src/Database.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Database.cpp')
-rw-r--r--src/Database.cpp20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/Database.cpp b/src/Database.cpp
index 155e8f5..8d32240 100644
--- a/src/Database.cpp
+++ b/src/Database.cpp
@@ -715,12 +715,12 @@ namespace odhtdb
return databaseStorage.getUserGroups(nodeHash, userPublicKey);
}
- void Database::receiveCustomMessage(const dht::InfoHash &receiveMessageKey, ReceiveCustomMessageCallbackFunc callbackFunc)
+ std::future<size_t> Database::receiveCustomMessage(const dht::InfoHash &receiveMessageKey, ReceiveCustomMessageCallbackFunc callbackFunc)
{
dht::InfoHash responseKey = receiveMessageKey;
++responseKey[0];
- node.listen(receiveMessageKey, [callbackFunc, this, responseKey](const shared_ptr<Value> value)
+ return node.listen(receiveMessageKey, [callbackFunc, this, responseKey](const shared_ptr<Value> value)
{
sibs::SafeSerializer serializer = callbackFunc(value->data.data(), value->data.size());
if(!serializer.getBuffer().empty())
@@ -732,18 +732,30 @@ namespace odhtdb
});
}
- void Database::sendCustomMessage(const dht::InfoHash &requestKey, vector<u8> &&data, SendCustomMessageCallbackFunc callbackFunc)
+ void Database::sendCustomMessage(const dht::InfoHash &requestKey, vector<u8> &&data)
+ {
+ shared_ptr<Value> value = make_shared<Value>(move(data));
+ nodePutWithRetry(&node, requestKey, value);
+ }
+
+ std::future<size_t> Database::sendCustomMessage(const dht::InfoHash &requestKey, vector<u8> &&data, SendCustomMessageCallbackFunc callbackFunc)
{
dht::InfoHash responseKey = requestKey;
++responseKey[0];
- node.listen(responseKey, [callbackFunc](const shared_ptr<Value> value)
+ auto listener = node.listen(responseKey, [callbackFunc](const shared_ptr<Value> value)
{
return callbackFunc(true, value->data.data(), value->data.size());
});
shared_ptr<Value> value = make_shared<Value>(move(data));
nodePutWithRetry(&node, requestKey, value);
+ return listener;
+ }
+
+ void Database::cancelNodeListener(const dht::InfoHash &infoHash, std::future<size_t> &nodeListener)
+ {
+ node.cancelListen(infoHash, nodeListener.get());
}
int Database::clearCache()