danicoin/src/JsonRpcServer/JsonRpcServer.h
2016-01-18 15:33:29 +00:00

58 lines
1.6 KiB
C++
Executable file

// 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 <system_error>
#include <System/Dispatcher.h>
#include <System/Event.h>
#include "Logging/ILogger.h"
#include "Logging/LoggerRef.h"
#include "Rpc/HttpServer.h"
namespace CryptoNote {
class HttpResponse;
class HttpRequest;
}
namespace Common {
class JsonValue;
}
namespace System {
class TcpConnection;
}
namespace CryptoNote {
class JsonRpcServer : HttpServer {
public:
JsonRpcServer(System::Dispatcher& sys, System::Event& stopEvent, Logging::ILogger& loggerGroup);
JsonRpcServer(const JsonRpcServer&) = delete;
void start(const std::string& bindAddress, uint16_t bindPort);
protected:
static void makeErrorResponse(const std::error_code& ec, Common::JsonValue& resp);
static void makeMethodNotFoundResponse(Common::JsonValue& resp);
static void makeGenericErrorReponse(Common::JsonValue& resp, const char* what, int errorCode = -32001);
static void fillJsonResponse(const Common::JsonValue& v, Common::JsonValue& resp);
static void prepareJsonResponse(const Common::JsonValue& req, Common::JsonValue& resp);
static void makeJsonParsingErrorResponse(Common::JsonValue& resp);
virtual void processJsonRpcRequest(const Common::JsonValue& req, Common::JsonValue& resp) = 0;
private:
// HttpServer
virtual void processRequest(const CryptoNote::HttpRequest& request, CryptoNote::HttpResponse& response) override;
System::Dispatcher& system;
System::Event& stopEvent;
Logging::LoggerRef logger;
};
} //namespace CryptoNote