Just Wonder
5 years ago
8 changed files with 138 additions and 12 deletions
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
// Copyright (c) 2018 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <zmq/zmqrpc.h> |
||||
|
||||
#include <rpc/server.h> |
||||
#include <zmq/zmqabstractnotifier.h> |
||||
#include <zmq/zmqnotificationinterface.h> |
||||
|
||||
#include <univalue.h> |
||||
|
||||
namespace { |
||||
|
||||
UniValue getzmqnotifications(const JSONRPCRequest& request) |
||||
{ |
||||
if (request.fHelp || request.params.size() != 0) { |
||||
throw std::runtime_error( |
||||
"getzmqnotifications\n" |
||||
"\nReturns information about the active ZeroMQ notifications.\n" |
||||
"\nResult:\n" |
||||
"[\n" |
||||
" { (json object)\n" |
||||
" \"type\": \"pubhashtx\", (string) Type of notification\n" |
||||
" \"address\": \"...\" (string) Address of the publisher\n" |
||||
" },\n" |
||||
" ...\n" |
||||
"]\n" |
||||
"\nExamples:\n" |
||||
+ HelpExampleCli("getzmqnotifications", "") |
||||
+ HelpExampleRpc("getzmqnotifications", "") |
||||
); |
||||
} |
||||
|
||||
UniValue result(UniValue::VARR); |
||||
if (g_zmq_notification_interface != nullptr) { |
||||
for (const auto* n : g_zmq_notification_interface->GetActiveNotifiers()) { |
||||
UniValue obj(UniValue::VOBJ); |
||||
obj.pushKV("type", n->GetType()); |
||||
obj.pushKV("address", n->GetAddress()); |
||||
result.push_back(obj); |
||||
} |
||||
} |
||||
|
||||
return result; |
||||
} |
||||
|
||||
const CRPCCommand commands[] = |
||||
{ // category name actor (function) argNames
|
||||
// ----------------- ------------------------ ----------------------- ----------
|
||||
{ "zmq", "getzmqnotifications", &getzmqnotifications, {} }, |
||||
}; |
||||
|
||||
} // anonymous namespace
|
||||
|
||||
void RegisterZMQRPCCommands(CRPCTable& t) |
||||
{ |
||||
for (const auto& c : commands) { |
||||
t.appendCommand(c.name, &c); |
||||
} |
||||
} |
@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
|
||||
// Copyright (c) 2018 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef BITCOIN_ZMQ_ZMQRPC_H |
||||
#define BITCOIN_ZMQ_ZMQRPC_H |
||||
|
||||
class CRPCTable; |
||||
|
||||
void RegisterZMQRPCCommands(CRPCTable& t); |
||||
|
||||
#endif // BITCOIN_ZMQ_ZMRRPC_H
|
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python3 |
||||
# Copyright (c) 2018 The Bitcoin Core developers |
||||
# Distributed under the MIT software license, see the accompanying |
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. |
||||
"""Test for the ZMQ RPC methods.""" |
||||
|
||||
from test_framework.test_framework import BitcoinTestFramework |
||||
from test_framework.util import assert_equal |
||||
|
||||
|
||||
class RPCZMQTest(BitcoinTestFramework): |
||||
|
||||
address = "tcp://127.0.0.1:28332" |
||||
|
||||
def set_test_params(self): |
||||
self.num_nodes = 1 |
||||
self.setup_clean_chain = True |
||||
|
||||
def run_test(self): |
||||
self._test_getzmqnotifications() |
||||
|
||||
def _test_getzmqnotifications(self): |
||||
self.restart_node(0, extra_args=[]) |
||||
assert_equal(self.nodes[0].getzmqnotifications(), []) |
||||
|
||||
self.restart_node(0, extra_args=["-zmqpubhashtx=%s" % self.address]) |
||||
assert_equal(self.nodes[0].getzmqnotifications(), [ |
||||
{"type": "pubhashtx", "address": self.address}, |
||||
]) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
RPCZMQTest().main() |
||||
|
Loading…
Reference in new issue