mirror of
https://github.com/ZmnSCPxj/clboss.git
synced 2026-08-14 12:43:19 +02:00
46 lines
1.1 KiB
C++
46 lines
1.1 KiB
C++
|
|
#include"Boss/Mod/NewaddrHandler.hpp"
|
||
|
|
#include"Boss/Mod/Rpc.hpp"
|
||
|
|
#include"Boss/Msg/Init.hpp"
|
||
|
|
#include"Boss/Msg/RequestNewaddr.hpp"
|
||
|
|
#include"Boss/Msg/ResponseNewaddr.hpp"
|
||
|
|
#include"Boss/concurrent.hpp"
|
||
|
|
#include"Ev/Io.hpp"
|
||
|
|
#include"Ev/foreach.hpp"
|
||
|
|
#include"Jsmn/Object.hpp"
|
||
|
|
#include"Json/Out.hpp"
|
||
|
|
#include"S/Bus.hpp"
|
||
|
|
|
||
|
|
namespace Boss { namespace Mod {
|
||
|
|
|
||
|
|
void NewaddrHandler::start() {
|
||
|
|
bus.subscribe<Msg::Init
|
||
|
|
>([this](Msg::Init const& init) {
|
||
|
|
rpc = &init.rpc;
|
||
|
|
auto f = [this](void* r) { return newaddr(r); };
|
||
|
|
return Boss::concurrent(
|
||
|
|
Ev::foreach(f, std::move(pending))
|
||
|
|
);
|
||
|
|
});
|
||
|
|
bus.subscribe<Msg::RequestNewaddr
|
||
|
|
>([this](Msg::RequestNewaddr const& r) {
|
||
|
|
auto requester = r.requester;
|
||
|
|
if (!rpc) {
|
||
|
|
pending.push_back(requester);
|
||
|
|
return Ev::lift();
|
||
|
|
}
|
||
|
|
return Boss::concurrent(newaddr(requester));
|
||
|
|
});
|
||
|
|
}
|
||
|
|
Ev::Io<void> NewaddrHandler::newaddr(void* requester) {
|
||
|
|
return rpc->command( "newaddr"
|
||
|
|
, Json::Out::empty_object()
|
||
|
|
).then([this, requester](Jsmn::Object res) {
|
||
|
|
auto addr = std::string(res["bech32"]);
|
||
|
|
return bus.raise(Msg::ResponseNewaddr{
|
||
|
|
std::move(addr), requester
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
}}
|