aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/odhtdb/Database.hpp8
-rw-r--r--include/odhtdb/DhtKey.hpp1
-rw-r--r--src/Database.cpp20
-rw-r--r--src/DhtKey.cpp6
4 files changed, 29 insertions, 6 deletions
diff --git a/include/odhtdb/Database.hpp b/include/odhtdb/Database.hpp
index 6874fe0..a5fcb60 100644
--- a/include/odhtdb/Database.hpp
+++ b/include/odhtdb/Database.hpp
@@ -196,10 +196,14 @@ namespace odhtdb
std::vector<OwnedByteArray> getUserGroups(const Hash &nodeHash, const Signature::PublicKey &userPublicKey) const;
- void receiveCustomMessage(const dht::InfoHash &requestKey, ReceiveCustomMessageCallbackFunc callbackFunc);
+ std::future<size_t> receiveCustomMessage(const dht::InfoHash &requestKey, ReceiveCustomMessageCallbackFunc callbackFunc);
+
+ void sendCustomMessage(const dht::InfoHash &key, std::vector<u8> &&data);
// Return true in @callbackFunc if you want to continue listening for responses, otherwise return false
- void sendCustomMessage(const dht::InfoHash &key, std::vector<u8> &&data, SendCustomMessageCallbackFunc callbackFunc);
+ std::future<size_t> sendCustomMessage(const dht::InfoHash &key, std::vector<u8> &&data, SendCustomMessageCallbackFunc callbackFunc);
+
+ void cancelNodeListener(const dht::InfoHash &infoHash, std::future<size_t> &nodeListener);
int clearCache();
diff --git a/include/odhtdb/DhtKey.hpp b/include/odhtdb/DhtKey.hpp
index c3398bf..959bb65 100644
--- a/include/odhtdb/DhtKey.hpp
+++ b/include/odhtdb/DhtKey.hpp
@@ -13,6 +13,7 @@ namespace odhtdb
dht::InfoHash getNewDataListenerKey();
dht::InfoHash getRequestOldDataKey();
+ dht::InfoHash getPingKey();
private:
dht::InfoHash infoHash;
unsigned char firstByteOriginalValue;
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()
diff --git a/src/DhtKey.cpp b/src/DhtKey.cpp
index 422b715..1508657 100644
--- a/src/DhtKey.cpp
+++ b/src/DhtKey.cpp
@@ -24,4 +24,10 @@ namespace odhtdb
infoHash[0] = firstByteOriginalValue + 1;
return infoHash;
}
+
+ dht::InfoHash DhtKey::getPingKey()
+ {
+ infoHash[0] = firstByteOriginalValue + 10;
+ return infoHash;
+ }
}