83 lines
4.2 KiB
C++
83 lines
4.2 KiB
C++
// Copyright (c) 2011-2016 The Cryptonote developers
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#pragma once
|
|
|
|
#include <unordered_map>
|
|
|
|
#include "Common/JsonValue.h"
|
|
#include "JsonRpcServer/JsonRpcServer.h"
|
|
#include "PaymentServiceJsonRpcMessages.h"
|
|
#include "Serialization/JsonInputValueSerializer.h"
|
|
#include "Serialization/JsonOutputStreamSerializer.h"
|
|
|
|
namespace PaymentService {
|
|
|
|
class WalletService;
|
|
|
|
class PaymentServiceJsonRpcServer : public CryptoNote::JsonRpcServer {
|
|
public:
|
|
PaymentServiceJsonRpcServer(System::Dispatcher& sys, System::Event& stopEvent, WalletService& service, Logging::ILogger& loggerGroup);
|
|
PaymentServiceJsonRpcServer(const PaymentServiceJsonRpcServer&) = delete;
|
|
|
|
protected:
|
|
virtual void processJsonRpcRequest(const Common::JsonValue& req, Common::JsonValue& resp) override;
|
|
|
|
private:
|
|
WalletService& service;
|
|
Logging::LoggerRef logger;
|
|
|
|
typedef std::function<void (const Common::JsonValue& jsonRpcParams, Common::JsonValue& jsonResponse)> HandlerFunction;
|
|
|
|
template <typename RequestType, typename ResponseType, typename RequestHandler>
|
|
HandlerFunction jsonHandler(RequestHandler handler) {
|
|
return [handler] (const Common::JsonValue& jsonRpcParams, Common::JsonValue& jsonResponse) mutable {
|
|
RequestType request;
|
|
ResponseType response;
|
|
|
|
try {
|
|
CryptoNote::JsonInputValueSerializer inputSerializer(const_cast<Common::JsonValue&>(jsonRpcParams));
|
|
serialize(request, inputSerializer);
|
|
} catch (std::exception&) {
|
|
makeGenericErrorReponse(jsonResponse, "Invalid Request", -32600);
|
|
return;
|
|
}
|
|
|
|
std::error_code ec = handler(request, response);
|
|
if (ec) {
|
|
makeErrorResponse(ec, jsonResponse);
|
|
return;
|
|
}
|
|
|
|
CryptoNote::JsonOutputStreamSerializer outputSerializer;
|
|
serialize(response, outputSerializer);
|
|
fillJsonResponse(outputSerializer.getValue(), jsonResponse);
|
|
};
|
|
}
|
|
|
|
std::unordered_map<std::string, HandlerFunction> handlers;
|
|
|
|
std::error_code handleReset(const Reset::Request& request, Reset::Response& response);
|
|
std::error_code handleCreateAddress(const CreateAddress::Request& request, CreateAddress::Response& response);
|
|
std::error_code handleDeleteAddress(const DeleteAddress::Request& request, DeleteAddress::Response& response);
|
|
std::error_code handleGetSpendKeys(const GetSpendKeys::Request& request, GetSpendKeys::Response& response);
|
|
std::error_code handleGetBalance(const GetBalance::Request& request, GetBalance::Response& response);
|
|
std::error_code handleGetBlockHashes(const GetBlockHashes::Request& request, GetBlockHashes::Response& response);
|
|
std::error_code handleGetTransactionHashes(const GetTransactionHashes::Request& request, GetTransactionHashes::Response& response);
|
|
std::error_code handleGetTransactions(const GetTransactions::Request& request, GetTransactions::Response& response);
|
|
std::error_code handleGetUnconfirmedTransactionHashes(const GetUnconfirmedTransactionHashes::Request& request, GetUnconfirmedTransactionHashes::Response& response);
|
|
std::error_code handleGetTransaction(const GetTransaction::Request& request, GetTransaction::Response& response);
|
|
std::error_code handleSendTransaction(const SendTransaction::Request& request, SendTransaction::Response& response);
|
|
std::error_code handleCreateDelayedTransaction(const CreateDelayedTransaction::Request& request, CreateDelayedTransaction::Response& response);
|
|
std::error_code handleGetDelayedTransactionHashes(const GetDelayedTransactionHashes::Request& request, GetDelayedTransactionHashes::Response& response);
|
|
std::error_code handleDeleteDelayedTransaction(const DeleteDelayedTransaction::Request& request, DeleteDelayedTransaction::Response& response);
|
|
std::error_code handleSendDelayedTransaction(const SendDelayedTransaction::Request& request, SendDelayedTransaction::Response& response);
|
|
std::error_code handleGetViewKey(const GetViewKey::Request& request, GetViewKey::Response& response);
|
|
std::error_code handleGetStatus(const GetStatus::Request& request, GetStatus::Response& response);
|
|
std::error_code handleGetAddresses(const GetAddresses::Request& request, GetAddresses::Response& response);
|
|
|
|
};
|
|
|
|
}//namespace PaymentService
|