2020-09-13 18:05:29 +08:00
|
|
|
#include"Boss/Mod/ListpeersAnalyzer.hpp"
|
|
|
|
|
#include"Boss/Msg/ListpeersAnalyzedResult.hpp"
|
|
|
|
|
#include"Boss/Msg/ListpeersResult.hpp"
|
|
|
|
|
#include"Ev/Io.hpp"
|
|
|
|
|
#include"Jsmn/Object.hpp"
|
|
|
|
|
#include"Json/Out.hpp"
|
|
|
|
|
#include"Ln/NodeId.hpp"
|
|
|
|
|
#include"S/Bus.hpp"
|
|
|
|
|
|
|
|
|
|
namespace Boss { namespace Mod {
|
|
|
|
|
|
|
|
|
|
ListpeersAnalyzer::ListpeersAnalyzer(S::Bus& bus) {
|
|
|
|
|
bus.subscribe< Msg::ListpeersResult
|
|
|
|
|
>([&bus](Msg::ListpeersResult const& l) {
|
|
|
|
|
auto ar = Msg::ListpeersAnalyzedResult();
|
|
|
|
|
ar.initial = l.initial;
|
|
|
|
|
|
2024-04-29 01:45:47 -05:00
|
|
|
for (auto peer : l.cpeers) {
|
2020-09-13 18:05:29 +08:00
|
|
|
|
2024-04-29 01:45:47 -05:00
|
|
|
auto id = peer.first;
|
|
|
|
|
auto connected = peer.second.connected;
|
2020-09-13 18:05:29 +08:00
|
|
|
|
|
|
|
|
auto has_chan = bool(false);
|
2024-04-29 01:45:47 -05:00
|
|
|
auto chans = peer.second.channels;
|
2020-11-18 16:32:49 +08:00
|
|
|
for (auto chan : chans) {
|
2020-09-13 18:05:29 +08:00
|
|
|
if (!chan.is_object() || !chan.has("state"))
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
auto state_j = chan["state"];
|
|
|
|
|
if (!state_j.is_string())
|
|
|
|
|
continue;
|
|
|
|
|
auto state = std::string(state_j);
|
|
|
|
|
auto prefix = std::string( state.begin()
|
|
|
|
|
, state.begin() + 8
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if ( prefix == "OPENINGD"
|
|
|
|
|
|| prefix == "CHANNELD"
|
|
|
|
|
) {
|
|
|
|
|
has_chan = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (connected) {
|
|
|
|
|
if (has_chan)
|
|
|
|
|
ar.connected_channeled.emplace(id);
|
|
|
|
|
else
|
|
|
|
|
ar.connected_unchanneled.emplace(id);
|
|
|
|
|
} else {
|
|
|
|
|
if (has_chan)
|
|
|
|
|
ar.disconnected_channeled.emplace(id);
|
|
|
|
|
else
|
|
|
|
|
ar.disconnected_unchanneled.emplace(id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return bus.raise(std::move(ar));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}}
|