diff --git a/src/NetworkOPs.h b/src/NetworkOPs.h index cd2e8bede..2e20d0a93 100644 --- a/src/NetworkOPs.h +++ b/src/NetworkOPs.h @@ -78,6 +78,7 @@ protected: boost::unordered_set mSubLedger; // ledger accepteds boost::unordered_set mSubLedgerAccounts; // ledger accepteds + affected accounts boost::unordered_set mSubTransaction; // all transactions + boost::unordered_set mSubTxMeta; // all transaction meta // subInfoMapType mSubTransactionAccounts; void setMode(OperatingMode); diff --git a/src/RPCServer.cpp b/src/RPCServer.cpp index 46a59852e..ee7b05c14 100644 --- a/src/RPCServer.cpp +++ b/src/RPCServer.cpp @@ -1813,6 +1813,12 @@ Json::Value RPCServer::doRippleLinesGet(const Json::Value ¶ms) return ret; } +// submit any transaction to the network +Json::Value RPCServer::doSubmit(const Json::Value& params) +{ + +} + // send regular_seed paying_account account_id amount [currency] [issuer] [send_max] [send_currency] [send_issuer] Json::Value RPCServer::doSend(const Json::Value& params) { diff --git a/src/RPCServer.h b/src/RPCServer.h index 0513091de..f0d64f01e 100644 --- a/src/RPCServer.h +++ b/src/RPCServer.h @@ -160,6 +160,8 @@ private: Json::Value doTransitSet(const Json::Value& params); Json::Value doTx(const Json::Value& params); Json::Value doTxHistory(const Json::Value& params); + Json::Value doSubmit(const Json::Value& params); + Json::Value doUnlAdd(const Json::Value& params); Json::Value doUnlDelete(const Json::Value& params); @@ -186,6 +188,9 @@ private: Json::Value doLogin(const Json::Value& params); + // deprecated + + public: static pointer create(boost::asio::io_service& io_service, NetworkOPs* mNetOps) { diff --git a/src/WSDoor.cpp b/src/WSDoor.cpp index da00ea400..167f8194b 100644 --- a/src/WSDoor.cpp +++ b/src/WSDoor.cpp @@ -89,6 +89,11 @@ public: void doTransactionEntry(Json::Value& jvResult, const Json::Value& jvRequest); // Streaming Commands + void doSubscribe(Json::Value& jvResult, const Json::Value& jvRequest); + void doUnsubscribe(Json::Value& jvResult, const Json::Value& jvRequest); + + + // deprecated void doAccountInfoSubscribe(Json::Value& jvResult, const Json::Value& jvRequest); void doAccountInfoUnsubscribe(Json::Value& jvResult, const Json::Value& jvRequest); void doAccountTransactionSubscribe(Json::Value& jvResult, const Json::Value& jvRequest); @@ -313,18 +318,8 @@ Json::Value WSConnection::invokeCommand(const Json::Value& jvRequest) { "ledger_entry", &WSConnection::doLedgerEntry }, { "submit", &WSConnection::doSubmit }, { "transaction_entry", &WSConnection::doTransactionEntry }, - - // Streaming commands: - { "account_info_subscribe", &WSConnection::doAccountInfoSubscribe }, - { "account_info_unsubscribe", &WSConnection::doAccountInfoUnsubscribe }, - { "account_transaction_subscribe", &WSConnection::doAccountTransactionSubscribe }, - { "account_transaction_unsubscribe", &WSConnection::doAccountTransactionUnsubscribe }, - { "ledger_accounts_subscribe", &WSConnection::doLedgerAccountsSubcribe }, - { "ledger_accounts_unsubscribe", &WSConnection::doLedgerAccountsUnsubscribe }, - { "server_subscribe", &WSConnection::doServerSubscribe }, - { "server_unsubscribe", &WSConnection::doServerUnsubscribe }, - { "transaction_subscribe", &WSConnection::doTransactionSubcribe }, - { "transaction_unsubscribe", &WSConnection::doTransactionUnsubscribe }, + { "subscribe", &WSConnection::doSubscribe }, + { "unsubscribe", &WSConnection::doUnsubscribe }, }; if (!jvRequest.isMember("command")) @@ -403,6 +398,96 @@ boost::unordered_set WSConnection::parseAccountIds(const Json::V // Commands // +/* +server : Sends a message anytime the server status changes such as network connectivity. +ledger : Sends a message at every ledger close. +tx_meta : Sends the effects of all the transactions every time a ledger closes. +transactions : Sends a message for every transaction that makes it into a ledger. +rt_transactions +*/ + +void WSConnection::doSubscribe(Json::Value& jvResult, const Json::Value& jvRequest) +{ + if (jvRequest.isMember("streams")) + { + for (Json::Value::const_iterator it = jvRequest["streams"].begin(); it != jvRequest["streams"].end(); it++) + { + if ((*it).isString() ) + { + std::string streamName=(*it).asString(); + + if(streamName=="server") + { + mNetwork.subLedgerAccounts(this) + }else if(streamName=="ledger") + { + mNetwork.subLedgerAccounts(this) + }else if(streamName=="tx_meta") + { + + }else if(streamName=="transactions") + { + + }else if(streamName=="rt_transactions") + { + + }else + { + jvResult["error"] = str(boost::format("Unknown stream: %s") % streamName); + } + }else + { + jvResult["error"] = "malformedSteam"; + } + } + } + + if (jvRequest.isMember("rt_accounts")) + { + boost::unordered_set usnaAccoundIds = parseAccountIds(jvRequest["rt_accounts"]); + + if (usnaAccoundIds.empty()) + { + jvResult["error"] = "malformedAccount"; + }else + { + boost::mutex::scoped_lock sl(mLock); + + BOOST_FOREACH(const NewcoinAddress& naAccountID, usnaAccoundIds) + { + mSubAccountInfo.insert(naAccountID); + } + + mNetwork.subAccountInfo(this, usnaAccoundIds); + } + } + + if (jvRequest.isMember("accounts")) + { + boost::unordered_set usnaAccoundIds = parseAccountIds(jvRequest["accounts"]); + + if (usnaAccoundIds.empty()) + { + jvResult["error"] = "malformedAccount"; + }else + { + boost::mutex::scoped_lock sl(mLock); + + BOOST_FOREACH(const NewcoinAddress& naAccountID, usnaAccoundIds) + { + mSubAccountInfo.insert(naAccountID); + } + + mNetwork.subAccountInfo(this, usnaAccoundIds); + } + } +} + +void WSConnection::doUnsubscribe(Json::Value& jvResult, const Json::Value& jvRequest) +{ + +} + void WSConnection::doAccountInfoSubscribe(Json::Value& jvResult, const Json::Value& jvRequest) { if (!jvRequest.isMember("accounts")) @@ -417,21 +502,7 @@ void WSConnection::doAccountInfoSubscribe(Json::Value& jvResult, const Json::Val { boost::unordered_set usnaAccoundIds = parseAccountIds(jvRequest["accounts"]); - if (usnaAccoundIds.empty()) - { - jvResult["error"] = "malformedAccount"; - } - else - { - boost::mutex::scoped_lock sl(mLock); - - BOOST_FOREACH(const NewcoinAddress& naAccountID, usnaAccoundIds) - { - mSubAccountInfo.insert(naAccountID); - } - - mNetwork.subAccountInfo(this, usnaAccoundIds); - } + } }