diff --git a/include/opendht/dhtrunner.h b/include/opendht/dhtrunner.h index 4b9657d7..afc69a57 100644 --- a/include/opendht/dhtrunner.h +++ b/include/opendht/dhtrunner.h @@ -99,7 +99,34 @@ public: T::getFilter()); } - std::future listen(InfoHash hash, Dht::GetCallback vcb, Value::Filter f = Value::AllFilter()); + std::future>> get(InfoHash key, Value::Filter f = Value::AllFilter()) { + auto p = std::make_shared>>>(); + auto values = std::make_shared>>(); + + get(key, [=](const std::vector>& vlist) { + values->insert(values->end(), vlist.begin(), vlist.end()); + return true; + }, [=](bool) { + p->set_value(std::move(*values)); + }, f); + return p->get_future(); + } + + template + std::future> get(InfoHash key) { + auto p = std::make_shared>>>(); + auto values = std::make_shared>(); + + get(key, [=](T&& v) { + values->emplace_back(std::move(v)); + return true; + }, [=](bool) { + p->set_value(std::move(*values)); + }); + return p->get_future(); + } + + std::future listen(InfoHash key, Dht::GetCallback vcb, Value::Filter f = Value::AllFilter()); std::future listen(const std::string& key, Dht::GetCallback vcb, Value::Filter f = Value::AllFilter()); std::future listen(InfoHash key, Dht::GetCallbackSimple cb, Value::Filter f = Value::AllFilter()) { return listen(key, Dht::bindGetCb(cb), f);