#pragma once #include #include #include #include #include #include #include #pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "tacopie.lib") #pragma comment(lib, "cpp_redis.lib") #include struct position_context { UINT32 level; UINT64 position_id; UINT64 cur_ord; INT64 volume; // 正表示buy,负表示sell }; class CPluginInstance : public IMTServerPlugin , public IMTConPluginSink , public IMTOrderSink , public IMTDealSink { public: CPluginInstance(); virtual ~CPluginInstance(); virtual void Release(); virtual MTAPIRES Start(IMTServerAPI* server); virtual MTAPIRES Stop(); virtual void OnPluginUpdate(const IMTConPlugin* plugin); //virtual void OnOrderAdd(const IMTOrder* order); //virtual void OnOrderUpdate(const IMTOrder* order); virtual void OnOrderDelete(const IMTOrder* order); //virtual void OnOrderClean(const UINT64 login); //virtual void OnDealAdd(const IMTDeal* deal); //virtual void OnDealUpdate(const IMTDeal* deal); //virtual void OnDealDelete(const IMTDeal* deal); //virtual void OnDealClean(const UINT64 login); virtual void OnDealPerform(const IMTDeal* deal, IMTAccount* account, IMTPosition* position); protected: virtual MTAPIRES LoadParam(); private: IMTServerAPI* m_api; IMTConPlugin* m_config; MTServerInfo m_info; std::mutex m_lock; bool m_enable; MTAPIRES LoadLogins(); std::vector m_followers; std::shared_ptr m_redis_client; bool m_redis_conn; bool start_redis(); void stop_redis(); void keep_alive(); bool m_redis_error_notified; std::thread m_work_thread; std::string m_redis_server; //std::string m_redis_user; std::string m_redis_password; int m_redis_port; wchar_t m_groups[1024]; //std::wstring m_logins; UINT64 m_trader; int m_step; int m_tolerance; };