Bläddra i källkod

新增功能代码

KarsusNeko 6 år sedan
förälder
incheckning
41bcb3858f
2 ändrade filer med 31 tillägg och 2 borttagningar
  1. 30 0
      MT5MonkPAMM/PluginInstance.cpp
  2. 1 2
      MT5MonkPAMM/PluginInstance.h

+ 30 - 0
MT5MonkPAMM/PluginInstance.cpp

@@ -2,11 +2,13 @@
 #include "PluginInstance.h"
 
 CPluginInstance::CPluginInstance()
+	: m_enable(false)
 {
 }
 
 CPluginInstance::~CPluginInstance()
 {
+	Stop();
 }
 
 void CPluginInstance::Release()
@@ -76,10 +78,28 @@ MTAPIRES CPluginInstance::Stop()
 			SMTFormat::FormatError(ret), ret);
 
 	m_api = nullptr;
+	m_enable = false;
 
 	return MT_RET_OK;
 }
 
+void CPluginInstance::OnPluginUpdate(const IMTConPlugin * plugin)
+{
+	LoadParam();
+}
+
+void CPluginInstance::OnDealPerform(const IMTDeal * deal, IMTAccount * account, IMTPosition * position)
+{
+	// positionΪnullptrʱ£¬
+	if (position == nullptr
+		|| deal == nullptr
+		|| account == nullptr)
+		return;
+
+	std::lock_guard<decltype(m_lock)> lk(m_lock);
+	if (m_enable)	return;
+}
+
 MTAPIRES CPluginInstance::LoadParam()
 {
 	MTAPIRES res = MT_RET_OK;
@@ -101,6 +121,12 @@ MTAPIRES CPluginInstance::LoadParam()
 		return MT_RET_ERR_MEM;
 	}
 
+	ScopeGuard param_release([param]()
+	{
+		param->Release();
+	});
+	std::lock_guard<decltype(m_lock)> lk(m_lock);
+
 	if ((res = m_config->ParameterGet(L"Trader", param)) != MT_RET_OK || param->Type() != IMTConParam::TYPE_INT)
 	{
 		return(MT_RET_ERR_PARAMS);
@@ -126,4 +152,8 @@ MTAPIRES CPluginInstance::LoadParam()
 		return(MT_RET_ERR_PARAMS);
 	}
 	m_logins = param->ValueString();
+
+	m_enable = true;
+
+	return MT_RET_OK;
 }

+ 1 - 2
MT5MonkPAMM/PluginInstance.h

@@ -2,6 +2,7 @@
 
 #include <string>
 #include <mutex>
+#include <ScopeGuard.hpp>
 
 class CPluginInstance
 	: public IMTServerPlugin
@@ -23,13 +24,11 @@ public:
 	virtual void OnOrderUpdate(const IMTOrder* order);
 	virtual void OnOrderDelete(const IMTOrder* order);
 	virtual void OnOrderClean(const UINT64 login);
-	virtual void OnOrderSync();
 
 	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 OnDealSync(void);
 	virtual void OnDealPerform(const IMTDeal* deal, IMTAccount* account, IMTPosition* position);
 
 protected: