Parcourir la source

修改cache结构;dealersend时加入position id;使用manager作为dealer login

KarsusNeko il y a 6 ans
Parent
commit
e74814aba6
2 fichiers modifiés avec 20 ajouts et 4 suppressions
  1. 17 3
      MT5MonkMAM/ManagerExtension.cpp
  2. 3 1
      MT5MonkMAM/ManagerExtension.h

+ 17 - 3
MT5MonkMAM/ManagerExtension.cpp

@@ -186,6 +186,8 @@ bool CManagerExtension::Connect(const CMTStr & server, const UINT64 login, const
 
 	if(!m_work_thread.joinable())
 		m_work_thread = std::thread(&CManagerExtension::keep_alive, this);
+
+	m_dealer_login = login;
 	//--- ok
 	return true;
 }
@@ -256,7 +258,7 @@ void CManagerExtension::OnOrderDelete(const IMTOrder * order)
 
 			request->Clear();
 			request->Login(login);
-			request->SourceLogin(1005);
+			request->SourceLogin(m_dealer_login);
 			request->Action(IMTRequest::TA_DEALER_POS_EXECUTE);
 			request->Type(order->Type());
 			request->Symbol(order->Symbol());
@@ -290,6 +292,7 @@ void CManagerExtension::OnOrderDelete(const IMTOrder * order)
 	{
 		for (auto login : m_logins)
 		{
+			// 获取跟单持仓的上下文
 			sprintf(login_buf, "%lld", login);
 			auto fut = m_redis_client->hget(order_buf, login_buf);
 			m_redis_client->sync_commit();
@@ -300,7 +303,11 @@ void CManagerExtension::OnOrderDelete(const IMTOrder * order)
 			// 如果不存在,忽略
 			if (reply.ko())	continue;
 			if (reply.is_null())	continue;
-			MTAPIRES res = MT_RET_OK;
+			MTAPIRES res = MT_RET_OK;
+
+			// 读取跟单持仓
+			position_context context;
+			memcpy(&context, reply.as_string().c_str(), sizeof(position_context));
 
 			if (m_manager->UserAccountGet(login, account) != MT_RET_OK)
 			{
@@ -313,12 +320,14 @@ void CManagerExtension::OnOrderDelete(const IMTOrder * order)
 
 			request->Clear();
 			request->Login(login);
-			request->SourceLogin(1005);
+			request->SourceLogin(m_dealer_login);
 			request->Action(IMTRequest::TA_DEALER_POS_EXECUTE);
 			request->Type(order->Type());
 			request->Symbol(order->Symbol());
 			request->PriceOrder(order->PriceOrder());
 			request->Volume(volume);
+			// 加入position id
+			request->Position(context.position_id);
 
 			UINT request_id = 0;
 			res = m_manager->DealerSend(request, this, request_id);
@@ -326,6 +335,7 @@ void CManagerExtension::OnOrderDelete(const IMTOrder * order)
 			request_cache cache;
 			cache.request = request_id;
 			cache.orig_position = orig_position;
+			//cache.dest_position = context.position_id;
 			cache.login = login;
 			int direction = 1;
 			if (order->Type() == IMTOrder::OP_SELL)
@@ -341,6 +351,8 @@ void CManagerExtension::OnOrderDelete(const IMTOrder * order)
 			});
 		}
 	}
+
+	m_redis_client->commit();
 }
 
 void CManagerExtension::OnConnect()
@@ -389,6 +401,8 @@ void CManagerExtension::OnDealPerform(const IMTDeal * deal, IMTAccount * account
 			}
 		}
 	});
+
+	m_redis_client->commit();
 }
 
 void CManagerExtension::SetTrader(const UINT64 trader)

+ 3 - 1
MT5MonkMAM/ManagerExtension.h

@@ -30,7 +30,7 @@ struct request_cache
 {
 	UINT	request;
 	UINT64	orig_position;
-	UINT64	dest_position;
+	//UINT64	dest_position;
 	UINT64	login;
 };
 
@@ -102,4 +102,6 @@ private:
 
 	std::vector<UINT64>	m_logins;
 	MTAPIRES		LoadLogins();
+
+	UINT64			m_dealer_login;
 };