text: /*
   * Copyright (c) 2017-2018, The Nirvana Developers.
   * Portions Copyright (c) 2012-2017, The CryptoNote Developers, The Bytecoin Developers.
   *
   * This file is part of Nirvana.
   *
   * This file is subject to the terms and conditions defined in the
   * file 'LICENSE', which is part of this source code package.
   */
  
  #pragma once
  
  #include "ConfigurationManager.h"
  #include "PaymentServiceConfiguration.h"
  
  #include "Logging/ConsoleLogger.h"
  #include "Logging/LoggerGroup.h"
  #include "Logging/StreamLogger.h"
  
  #include "PaymentGate/NodeFactory.h"
  #include "PaymentGate/WalletService.h"
  
  class PaymentGateService {
  public:
    PaymentGateService();
  
    bool init(int argc, char** argv);
  
    const PaymentService::ConfigurationManager& getConfig() const { return config; }
    PaymentService::WalletConfiguration getWalletConfig() const;
    const CryptoNote::Currency getCurrency();
  
    void run();
    void stop();
  
    Logging::ILogger& getLogger() { return logger; }
  
  private:
  
    void runInProcess(Logging::LoggerRef& log);
    void runRpcProxy(Logging::LoggerRef& log);
  
    void runWalletService(const CryptoNote::Currency& currency, CryptoNote::INode& node);
  
    System::Dispatcher* dispatcher;
    System::Event* stopEvent;
    PaymentService::ConfigurationManager config;
    PaymentService::WalletService* service;
    CryptoNote::CurrencyBuilder currencyBuilder;
  
    Logging::LoggerGroup logger;
    std::ofstream fileStream;
    Logging::StreamLogger fileLogger;
    Logging::ConsoleLogger consoleLogger;
  };
  