text: // 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
  