#pragma once
#include <onepiece/models/AccountModel.h>
#include <onepiece/traderctp/TraderCTP.h>
#include <onepiece/marketctp/MarketCTP.h>
#include <onepiece/templates/ITraderApi.h>
#include <onepiece/templates/IMarketApi.h>
#include <onepiece/templates/ICoreListener.h>
#include <onepiece/templates/IPluginContext.h>
#include <memory>
#include <unordered_map>
#include <boost/asio.hpp>
#include <rapidjson/document.h>
using namespace rapidjson;
using namespace std;
class OnePieceCore: public ICoreListener {
public:
OnePieceCore() = delete;
OnePieceCore(string configPath);
virtual ~OnePieceCore();
public:
virtual void OnTraderReady(StatusInfoFieldSPtr statusInfoFieldSPtr);
virtual void OnMarketReady(StatusInfoFieldSPtr statusInfoFieldSPtr);
virtual void OnTickReceived(TickSPtr tickSPtr);
virtual void OnOrderReceived(OrderSPtr orderSPtr);
virtual void OnErrorOrderReceived(OrderSPtr orderSPtr);
virtual void OnTradeReceived(TradeSPtr tradeSPtr);
virtual void Run();
virtual const shared_ptr<vector<string>> SysInstruments();
private:
virtual bool InsertOrder(const OrderSPtr orderSPtr);
virtual string GetOrderStatusString(OPOrderStatus orderStatus);
virtual OrderSPtr SyncContextsPosAndRealPos(ContractSPtr contractSPtr, TickSPtr tickSPtr, int contractContextsPos);
virtual OrderSPtr SyncStockIndexContextsPosAndRealPos(ContractSPtr contractSPtr, TickSPtr tickSPtr, int contractContextsPos);
virtual bool LoadExchangeSettingJson(const string& exchangeSettingJson);
virtual bool LoadTradingTimeJson(const string& tradingTimeJson);
virtual bool LoadSessionsTimeJson(const string& sessionsTimeJson);
virtual bool LoadStrategiesSettingJson(const string& strategiesSettingJson);
virtual bool InitExchangeRiskControl(ContractSPtr contractSPtr);
virtual bool InitTradingTime(ContractSPtr contractSPtr);
virtual bool InitSessionsTime(ContractSPtr contractSPtr);
virtual bool InitContexts(ContractSPtr contractSPtr);
virtual bool InitCoreDetailLogger();
virtual bool WakeUpSysContractSPtrContexts();
private:
AccountSPtr m_accountPtr;
shared_ptr<unordered_map<string, OrderSPtr>> m_contractOrderSPtrMap; // <- eg: {"SHFE.rb2310": OrderSPtr(), "DCE.i2309": OrderSPtr()}
shared_ptr<vector<string>> m_sysInstruments; // <- ["rb2310", "i2309"], make with config file in one piece core.
shared_ptr<thread> m_traderThread;
Document m_strategiesSettingDocument;
Document m_exchangeSettingDocument;
Document m_tradingTimeDocument;
Document m_contextsSettingDocument;
Document m_sessionsTimeDocument;
};