Skip to content
Snippets Groups Projects
Commit 72737e56 authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Auto reconnect known hosts

parent b88adbfa
No related branches found
No related tags found
1 merge request!316Resolves #343 GUI and Frame Refactor
......@@ -236,6 +236,7 @@ class Universe : public ftl::Configurable {
std::vector<ftl::net::Listener*> listeners_;
std::vector<ftl::net::Peer*> peers_;
std::unordered_map<std::string, ftl::net::Peer*> peer_by_uri_;
//std::map<std::string, std::vector<ftl::UUID>> subscribers_;
//std::unordered_set<std::string> owned_;
std::map<ftl::UUID, ftl::net::Peer*> peer_ids_;
......
......@@ -149,12 +149,21 @@ bool Universe::listen(const string &addr) {
}
Peer *Universe::connect(const string &addr) {
// Check if already connected
{
UNIQUE_LOCK(net_mutex_,lk);
if (peer_by_uri_.find(addr) != peer_by_uri_.end()) {
return peer_by_uri_[addr];
}
}
auto p = new Peer(addr.c_str(), this, &disp_);
if (!p) return nullptr;
if (p->status() != Peer::kInvalid) {
UNIQUE_LOCK(net_mutex_,lk);
peers_.push_back(p);
peer_by_uri_[addr] = p;
}
_installBindings(p);
......
......@@ -141,6 +141,8 @@ public:
Filter* filter(const std::unordered_set<ftl::codecs::Channel> &channels);
void removeFilter(Filter* filter);
void autoConnect();
};
}
......
......@@ -63,7 +63,8 @@ Feed::Feed(nlohmann::json &config, ftl::net::Universe*net) :
//feed_config = ftl::loadJSON(FTL_LOCAL_CONFIG_ROOT "/feed.json");
restore(ftl::Configurable::getID(), {
"recent_files"
"recent_files",
"known_hosts"
});
pool_ = std::make_unique<ftl::data::Pool>(3,5);
......@@ -158,6 +159,8 @@ Feed::Feed(nlohmann::json &config, ftl::net::Universe*net) :
});
stream_->begin();
autoConnect();
}
Feed::~Feed() {
......@@ -350,6 +353,16 @@ std::vector<std::string> Feed::availableDeviceSources() {
return {};
}
void Feed::autoConnect() {
ftl::pool.push([this](int id) {
auto &known_hosts = getConfig()["known_hosts"];
for (auto &h : known_hosts.items()) {
net_->connect(h.key());
}
});
}
bool Feed::sourceAvailable(const std::string &uri) {
return false;
}
......@@ -483,6 +496,10 @@ uint32_t Feed::add(const std::string &path) {
// TODO: do not connect same uri twice
// TODO: write unit test
auto &known_hosts = getConfig()["known_hosts"];
auto &host_details = known_hosts[uri.getBaseURI()];
host_details["last_open"] = ftl::timer::get_time();
net_->connect(path)->waitConnection();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment