/// <summary> /// this function only add accounts based on user request /// </summary> public async Task <NewAccountResponse> SetAccountsByUser( IReadOnlyList <NewAccountDetails> accountDetails, MasterUser user, CancellationToken cancellationToken) { m_ptrLogger.LogOk("START"); Debug.Assert(user != null); NewAccountResponse response = new NewAccountResponse() { _usrDetails = user, _retCode = RC_OK }; foreach (NewAccountDetails details in accountDetails) { MT4Request ptrMT4Req = (MT4Request) new MT4Request(); ptrMT4Req.accType = eAccountType.ACC_TYPE_STANDARD_DEMO; ptrMT4Req.group = details.Group; ptrMT4Req.leverage = details.Leverage; ptrMT4Req.deposit = details.Deposit; ptrMT4Req.masterLogin = user._login; ptrMT4Req.reqType = MT4REQ.MT4REQ_NEW_ACCOUNT; ptrMT4Req.requestMode = MT4REQMODE.NEW_ACCOUNT; ptrMT4Req.status = ORD_STAT_RECVD; ptrMT4Req.serverTransID = TransactionService.NewTransactionId(); ptrMT4Req.ptrData = user; _mt4Manager.Demo.insertMT4Request(ptrMT4Req); response.MT4Requests.Add(ptrMT4Req); } m_ptrLogger.LogOk("END"); Debug.Assert(response._usrDetails._login > 0); return(response); }
void IMT4ServerConnectorHost.OnResponse( ReturnCode errorcode, string errormessage, eMT4ServerType serverIndex, MT4REQ reqType, eOrderStatus trans_status, int masterLogin, /*int orderOrLogin,*/ Guid server_trans_id, eAccountType accType, MT4REQMODE reqMode, MT4Request request) { try { OnResponseAsync( errorcode, errormessage, serverIndex, reqType, trans_status, masterLogin, /*orderOrLogin,*/ server_trans_id, accType, reqMode, request, CancellationToken.None).Wait(); } catch (Exception exception) { m_ptrLogger.LogException(exception); } }
//TODO: handleSMAccountRequest public async Task <SMSignalCreateResponse> CreateSMAccount( SMSignalCreateRequest ptr, CancellationToken cancellationToken) { var ptrResp = new SMSignalCreateResponse(); m_ptrLogger.LogOk("START"); var m_masterUserSetting = await _masterSettingsService.GetMasterSetting(cancellationToken); if (ptr._isSignalCreated) { if (await _signalService.GetSSPCountForSMSignal(ptr._smSignal._smMasterLogin, ptr._smSignal._signalIndex, cancellationToken) >= m_masterUserSetting._maxSSPInSM) { m_ptrLogger.LogInfo("Max SSP Signal reached for SM signal index %d. Ignoring SM request", ptr._smSignal._signalIndex); return(null); } //Alexey: additional code var signalOfSM = await _signalService.GetSignal(ptr._smSignal._signalIndex, cancellationToken); Debug.Assert(signalOfSM != null); SMSignal smSig = new SMSignal(); //memset(&smSig, 0, sizeof(SMSignal)); smSig._signalIndex = ptr._smSignal._signalIndex; smSig._smMasterLogin = ptr._smSignal._smMasterLogin; smSig._smMT4Login = ptr._smSignal._smMT4Login; Debug.Assert(signalOfSM.AccountTransId != Guid.Empty); smSig.SmAccountTransId = signalOfSM.AccountTransId; smSig._smMT4ServerIndex = SRV_TYPE_DEMO; smSig._sspMasterLogin = ptr._smSignal._sspMasterLogin; smSig._sspMT4Login = ptr._smSignal._sspMT4Login; smSig._sspMT4ServerIndex = ptr._smSignal._sspMT4ServerIndex; smSig._sspSignalIndex = ptr._smSignal._sspSignalIndex; await _signalService.InsertSMSignal(smSig, cancellationToken); bool res = true; if (res) { //ptrResp = new SMSignalCreateResponse(); //MT_SMSignalCreateResponse_ID //ptrResp._header._loginID = ptr._header._loginID; //ptrResp._header._socketID = ptr._header._socketID; ptrResp._retCode = RC_OK; //memcpy(ref ptrResp._smSignal, smSig); ptrResp._smSignal = smSig; //SentDataUsingSocketID(ptrResp, MT_SSPSignalCreateResponse_ID, ptrResp._header._socketID); //addFollower(smSig._sspMT4Login, smSig._smMT4Login, smSig._smMT4ServerIndex); //addFollowerVolume(smSig._sspSignalIndex, smSig._smMT4ServerIndex, smSig._smMT4Login, m_masterUserSetting._signalTradeVolume); } else { m_ptrLogger.LogError("Unable to insert SMSignal for signal Index: %d master login: %d MT4 Login: %d", smSig._signalIndex, ptr._smSignal._smMasterLogin, smSig._smMT4Login); } } else { if (await _signalService.GetSMSignalCount(ptr._smSignal._smMasterLogin, cancellationToken) >= m_masterUserSetting._maxSMAccount) { m_ptrLogger.LogWarning("Max SM Signal reached. Ignoring SM request"); return(null); } if (await _signalService.IsSignalNameExist(ptr._signalName, cancellationToken)) { m_ptrLogger.LogWarning("Signal name already exist.... %s", ptr._signalName); return(null); } MasterUser ptrUser = await _masterUserService.GetMasterAccount(ptr._smSignal._smMasterLogin, cancellationToken); if (ptrUser != null) { Signal sig = new Signal(); sig._isSSP = false; sig._masterLogin = ptr._smSignal._smMasterLogin; COPY_STR_S(out sig._signalName, ptr._signalName); sig._signalIndex = -1; sig._mt4ServerIndex = SRV_TYPE_DEMO; sig._mt4Login = -1; MT4Request ptrMT4Req2 = (MT4Request) new MT4Request(); //memset(ptrMT4Req2, 0, sizeof(MT4Request)); ptrMT4Req2.accType = ACC_TYPE_SM; ptrMT4Req2.masterLogin = ptr._smSignal._smMasterLogin; ptrMT4Req2.reqType = MT4REQ.MT4REQ_NEW_ACCOUNT; //ptrMT4Req2.socketID = ptr._header._socketID; ptrMT4Req2.status = ORD_STAT_RECVD; ptrMT4Req2.serverTransID = TransactionService.NewTransactionId(); ptrMT4Req2.ptrData = (MasterUser) new MasterUser(); memcpy(ref ptrMT4Req2.ptrData, ptrUser); sig.AccountTransId = ptrMT4Req2.serverTransID; sig._rebateAmount = m_masterUserSetting._rebate_SM; sig._sspPercentage = m_masterUserSetting._ssp_per; m_ptrLogger.LogInfo("Inserting SM signal in DB Signal: %s MasterLogin: %d Dummy MT4 Login: %d", ptr._signalName, ptr._smSignal._smMasterLogin, sig._mt4Login); await _signalService.InsertSignal(sig, cancellationToken); ptrResp.Signal = sig; bool res2 = true; if (res2) { if (ptr._smSignal._sspMT4Login != 0) { SMSignal smSig = new SMSignal(); //memset(&smSig, 0, sizeof(SMSignal)); smSig._signalIndex = sig._signalIndex; smSig._smMasterLogin = sig._masterLogin; Debug.Assert(sig.AccountTransId != Guid.Empty); smSig.SmAccountTransId = sig.AccountTransId; smSig._smMT4Login = sig._mt4Login; smSig._smMT4ServerIndex = SRV_TYPE_DEMO; smSig._sspMasterLogin = ptr._smSignal._sspMasterLogin; smSig._sspMT4Login = ptr._smSignal._sspMT4Login; smSig._sspMT4ServerIndex = ptr._smSignal._sspMT4ServerIndex; smSig._sspSignalIndex = ptr._smSignal._sspSignalIndex; await _signalService.InsertSMSignal(smSig, cancellationToken); bool res3 = true; if (res3) { //ptrResp = new SMSignalCreateResponse(); //MT_SMSignalCreateResponse_ID //ptrResp._header._loginID = ptr._header._loginID; //ptrResp._header._socketID = ptr._header._socketID; ptrResp._retCode = RC_OK; //memcpy(ref ptrResp._smSignal, smSig); ptrResp._smSignal = smSig; ptrResp.Signal = sig; //SentDataUsingSocketID(ptrResp, MT_SSPSignalCreateResponse_ID, ptrResp._header._socketID); //addFollower(smSig._sspMT4Login, smSig._smMasterLogin, smSig._smMT4ServerIndex); //addFollowerVolume(smSig._sspSignalIndex, smSig._smMT4ServerIndex, smSig._smMasterLogin, m_masterUserSetting._signalTradeVolume); } else { m_ptrLogger.LogError("Unable to insert SMSignal for signal Index: %d master login: %d MT4 Login: %d", smSig._signalIndex, ptr._smSignal._smMasterLogin, sig._mt4Login); } } } else { m_ptrLogger.LogError("Unable to insert SM signal in DB Signal: %s MasterLogin: %d Dummy MT4 Login: %d", ptr._signalName, ptr._smSignal._smMasterLogin, sig._mt4Login); } m_ptrLogger.LogOk("Sending request to connector for opening SM MT4 account"); m_ptrDemoMT4Manager.insertMT4Request(ptrMT4Req2); //if (ptrResp == null) //{ // ptrResp = new SMSignalCreateResponse(); // { _header = new MessageHeader { _loginID = ptr._header._loginID } }; //} ptrResp.MT4Request = ptrMT4Req2; CppHelper.free(ptrUser); ptrUser = null; } } m_ptrLogger.LogOk("END"); return(ptrResp); }
/// <summary> /// handleNewAccountRequest; used only by WitFX; old name was CreateAccount /// </summary> public async Task <NewAccountResponse> SetAccountsByProduct( NewAccountRequest ptr, CancellationToken cancellationToken) { m_ptrLogger.LogOk("START"); Debug.Assert(ptr._usrDetails != null); await _masterUserService.InsertMasterAccount(ptr._usrDetails, cancellationToken); bool ret = true; NewAccountResponse response; if (ret) { NewAccountResponse ptrResp = new NewAccountResponse(); //MT_NewAccountResponse_ID ptrResp._usrDetails = ptr._usrDetails; ptrResp._retCode = RC_OK; response = ptrResp; //m_connectionMgr.SendResponseToQueue(ptr._header._socketID, ptrResp, MT_NewAccountResponse_ID); var ptrproductDetails = await _productService.GetProductDetails(ptr._productid, cancellationToken); var cnt = ptrproductDetails.Count; for (int it = 0; it < cnt; it++) { MT4Request ptrMT4Req = (MT4Request) new MT4Request(); //memset(ptrMT4Req, 0, sizeof(MT4Request)); ptrMT4Req.accType = ptrproductDetails[it]._accounttype; ptrMT4Req.group = ptrproductDetails[it]._group; ptrMT4Req.deposit = ptrproductDetails[it]._deposit; ptrMT4Req.leverage = ptr._leverage; ptrMT4Req.masterLogin = ptr._usrDetails._login; ptrMT4Req.reqType = MT4REQ.MT4REQ_NEW_ACCOUNT; ptrMT4Req.requestMode = MT4REQMODE.NEW_ACCOUNT; //ptrMT4Req.socketID = ptr._header._socketID; ptrMT4Req.status = ORD_STAT_RECVD; ptrMT4Req.serverTransID = TransactionService.NewTransactionId(); //ptrMT4Req.ptrData = new MasterUser(); ptrMT4Req.ptrData = ptr._usrDetails; if (ptrproductDetails[it]._serverid == SRV_TYPE_DEMO) { _mt4Manager.Demo.insertMT4Request(ptrMT4Req); } else { _mt4Manager.Live.insertMT4Request(ptrMT4Req); } ptrResp.MT4Requests.Add(ptrMT4Req); } /*MT4Request ptrMT4Req1 = (MT4Request)new MT4Request(); * //memset(ptrMT4Req1, 0, sizeof(MT4Request)); * ptrMT4Req1.accType = ACC_TYPE_FOLLOWER_DEMO; * ptrMT4Req1.masterLogin = ptr._usrDetails._login; * ptrMT4Req1.reqType = MT4REQ_NEW_ACCOUNT; * ptrMT4Req1.requestMode = MT4REQMODE.NEW_ACCOUNT; * ptrMT4Req1.socketID = ptr._header._socketID; * ptrMT4Req1.status = ORD_STAT_RECVD; * ptrMT4Req1.serverTransID = getUniqueRequestID(); * ptrMT4Req1.ptrData = new MasterUser(); * memcpy(out ptrMT4Req1.ptrData, &ptr._usrDetails, sizeof(MasterUser)); * m_ptrDemoMT4Manager.insertMT4Request(ptrMT4Req1); * * MT4Request ptrMT4Req2 = (MT4Request)new MT4Request(); * //memset(ptrMT4Req2, 0, sizeof(MT4Request)); * ptrMT4Req2.accType = ACC_TYPE_FOLLOWER_LIVE; * ptrMT4Req2.masterLogin = ptr._usrDetails._login; * ptrMT4Req2.reqType = MT4REQ_NEW_ACCOUNT; * ptrMT4Req2.requestMode = MT4REQMODE.NEW_ACCOUNT; * ptrMT4Req2.socketID = ptr._header._socketID; * ptrMT4Req2.status = ORD_STAT_RECVD; * ptrMT4Req2.serverTransID = getUniqueRequestID(); * ptrMT4Req2.ptrData = new MasterUser(); * memcpy(out ptrMT4Req2.ptrData, &ptr._usrDetails, sizeof(MasterUser)); * m_ptrLiveMT4Manager.insertMT4Request(ptrMT4Req2); * * MT4Request ptrMT4Req3 = (MT4Request)new MT4Request(); * //memset(ptrMT4Req3, 0, sizeof(MT4Request)); * ptrMT4Req3.accType = ACC_TYPE_REBATE; * ptrMT4Req3.masterLogin = ptr._usrDetails._login; * ptrMT4Req3.reqType = MT4REQ_NEW_ACCOUNT; * ptrMT4Req3.requestMode = MT4REQMODE.NEW_ACCOUNT; * ptrMT4Req3.socketID = ptr._header._socketID; * ptrMT4Req3.status = ORD_STAT_RECVD; * ptrMT4Req3.serverTransID = getUniqueRequestID(); * ptrMT4Req3.ptrData = new MasterUser(); * memcpy(out ptrMT4Req3.ptrData, &ptr._usrDetails, sizeof(MasterUser)); * m_ptrDemoMT4Manager.insertMT4Request(ptrMT4Req3); */ }//if (ret) else { NewAccountResponse ptrResp = new NewAccountResponse(); // MT_NewAccountResponse_ID //memcpy(ref ptrResp._usrDetails, ptr._usrDetails); ptrResp._usrDetails = ptr._usrDetails; ptrResp._retCode = RC_ERROR; response = ptrResp; // m_connectionMgr.SendResponseToQueue(ptr._header._socketID, ptrResp, MT_NewAccountResponse_ID); }//else of if (ret) m_ptrLogger.LogOk("END"); Debug.Assert(response._usrDetails._login > 0); //TODO: insertDBTransmitData(response._usrDetails._login, FDMT_MasterUser_ID); //send email to user //sendRegistrationEmail(ptr->_usrDetails._login, ptr->_usrDetails._password, ptr- return(response); }
/// <summary> /// WitFXMT4ServerBL.onMT4Response /// </summary> private async Task OnResponseAsync( ReturnCode errorcode, string errormessage, eMT4ServerType serverIndex, MT4REQ reqType, eOrderStatus trans_status, int masterLogin, /*int orderOrLogin,*/ Guid server_trans_id, eAccountType accType, MT4REQMODE reqMode, MT4Request request, CancellationToken cancellationToken) { Debug.Assert(masterLogin > 0); //m_ptrMySqlWrapper.insertLog(Utilities.LOG_INFO,masterLogin,orderOrLogin,"X",) if (reqType == MT4REQ.MT4REQ_NEW_ACCOUNT) { var mt4Login = request.User?.login ?? 0; if (trans_status == eOrderStatus.ORD_STAT_EXECUTED) { Debug.Assert(mt4Login > 0); m_ptrLogger.LogInfo($"EXECUTED : MT4 Account {mt4Login}, master Login {masterLogin}, AccountType: {accType}"); MT4Account acc = new MT4Account(); //memset(&acc, 0, sizeof(MT4Account)); acc._accountType = accType; acc._masterLogin = masterLogin; acc._mt4Login = mt4Login; acc._mt4ServerIndex = serverIndex; //if (serverIndex == SRV_TYPE_DEMO) //{ // Demo.insertMT4Account(orderOrLogin); //} //else //{ // Live.insertMT4Account(orderOrLogin); //} lock (_mt4LoginsByServerIndex) AddMt4LoginNoLock(serverIndex, mt4Login); await _mt4AccountService.InsertMT4Account(acc, cancellationToken); //if (!) //{ // m_ptrLogger.LogError("Unable to insert MT4 account for masterlogin: %d MT4 Login: %d in database", masterLogin, orderOrLogin); //} //else //{ #region Rebate //TODO: Claudia: rebate //if (accType == ACC_TYPE_REBATE) //{ // Dictionary<int, int>.iterator it2; // //lock (m_SyncMapMt4Master) // //{ // it2 = m_mapMasterRebateAcc.find(masterLogin); // if (it2 == m_mapMasterRebateAcc.end()) // { // m_mapMasterRebateAcc.insert(new ValueTuple<int, int>(masterLogin, orderOrLogin)); // } // //} //} #endregion ////else //if (accType != ACC_TYPE_REBATE) ////{ //Dictionary<bool, Dictionary<int, int>>.iterator it1; ////Dictionary<int, int>.iterator it2; ////lock (m_SyncMapMt4Master) ////{ //bool isDemoServer = serverIndex == SRV_TYPE_DEMO ? true : false; //it1 = m_mapMT4MasterLogin.find(isDemoServer); //if (it1 == m_mapMT4MasterLogin.end()) //{ // Dictionary<int, int> mp2 = new Dictionary<int, int>(); // m_mapMT4MasterLogin.insert(new ValueTuple<bool, Dictionary<int, int>>(isDemoServer, mp2)); // it1 = m_mapMT4MasterLogin.find(isDemoServer); //} //it1.second.insert(new ValueTuple<int, int>(orderOrLogin, masterLogin)); ////} ////} ////} if (accType == eAccountType.ACC_TYPE_SSP) { await _signalService.UpdateSignalMT4Login(server_trans_id, mt4Login, cancellationToken); await _signalService.UpdateSSPSignalMT4Login(server_trans_id, mt4Login, cancellationToken); //fetchAllSignal(); //fetchAllSSPSignal(); //fetchAllSMSignal(); //insertDBTransmitData(masterLogin, FDMT_Signal_ID); //insertDBTransmitData(masterLogin, FDMT_SSPSignal_ID); } else if (accType == eAccountType.ACC_TYPE_SM) { await _signalService.UpdateSignalMT4Login(server_trans_id, mt4Login, cancellationToken); await _signalService.UpdateSMSignalMT4Login(server_trans_id, mt4Login, cancellationToken); //fetchAllSignal(); //fetchAllSSPSignal(); //fetchAllSMSignal(); //insertDBTransmitData(masterLogin, FDMT_Signal_ID); //insertDBTransmitData(masterLogin, FDMT_SMSignal_ID); } var m_masterUserSetting = await _masterSettingsService.GetCachedMasterSettingsAsync(cancellationToken); if (accType == eAccountType.ACC_TYPE_FOLLOWER_DEMO || accType == eAccountType.ACC_TYPE_SSP || accType == eAccountType.ACC_TYPE_SM) { MT4Request ptrMT4Req4 = (MT4Request) new MT4Request(); //memset(ptrMT4Req4, 0, sizeof(MT4Request)); //ptrMT4Req4.newLoginOrOrderID = orderOrLogin; // Alexey ptrMT4Req4.masterLogin = masterLogin; ptrMT4Req4.reqType = MT4REQ.MT4REQ_BALANCE; //ptrMT4Req4.socketID = socketID; ptrMT4Req4.status = eOrderStatus.ORD_STAT_RECVD; ptrMT4Req4.serverTransID = TransactionService.NewTransactionId(); ptrMT4Req4.ptrData = new MT4OrderInfo(); //memset(ptrMT4Req4.ptrData, 0, sizeof(MT4OrderInfo)); MT4OrderInfo ptrOrd = (MT4OrderInfo)ptrMT4Req4.ptrData; ptrOrd._accountType = accType; ptrOrd._masterLogin = masterLogin; ptrOrd._mt4Login = mt4Login; ptrOrd._mt4ServerIndex = serverIndex; ptrOrd._orderTransMode = eMT4OrderTransMode.ORD_TRANS_CLOSE; ptrOrd._orderType = eMT4OrderType.ORD_TYPE_BALANCE; ptrOrd._price = request.deposit; if (ptrOrd._price == 0) { if (accType == eAccountType.ACC_TYPE_FOLLOWER_DEMO) { ptrOrd._price = m_masterUserSetting._deposit_followerDemo; } else if (accType == eAccountType.ACC_TYPE_SSP) { ptrOrd._price = m_masterUserSetting._deposit_SSP; } else if (accType == eAccountType.ACC_TYPE_SM) { ptrOrd._price = m_masterUserSetting._deposit_SM; } } Demo.insertMT4Request(ptrMT4Req4); } else if (accType == eAccountType.ACC_TYPE_FOLLOWER_LIVE) { MT4Request ptrMT4Req4 = (MT4Request) new MT4Request(); //memset(ptrMT4Req4, 0, sizeof(MT4Request)); //ptrMT4Req4.newLoginOrOrderID = orderOrLogin; // Alexey ptrMT4Req4.masterLogin = masterLogin; ptrMT4Req4.reqType = MT4REQ.MT4REQ_BALANCE; //ptrMT4Req4.socketID = socketID; ptrMT4Req4.status = eOrderStatus.ORD_STAT_RECVD; ptrMT4Req4.serverTransID = TransactionService.NewTransactionId(); ptrMT4Req4.ptrData = new MT4OrderInfo(); //memset(ptrMT4Req4.ptrData, 0, sizeof(MT4OrderInfo)); MT4OrderInfo ptrOrd = (MT4OrderInfo)ptrMT4Req4.ptrData; ptrOrd._accountType = accType; ptrOrd._masterLogin = masterLogin; ptrOrd._mt4Login = mt4Login; ptrOrd._mt4ServerIndex = serverIndex; ptrOrd._orderTransMode = eMT4OrderTransMode.ORD_TRANS_CLOSE; ptrOrd._orderType = eMT4OrderType.ORD_TYPE_BALANCE; ptrOrd._price = request.deposit; if (ptrOrd._price == 0) { ptrOrd._price = m_masterUserSetting._deposit_followerLive; } Live.insertMT4Request(ptrMT4Req4); } var ptrResp = new MT4AccountResponse(); //MT_MT4AccountResponse_ID CppHelper.memcpy(ref ptrResp._account, acc); _connectionMgr.SentDataUsingLoginID(ptrResp, MessageTypeID.MT_MT4AccountResponse_ID, masterLogin); } else if (trans_status == eOrderStatus.ORD_STAT_PROCESSING) { // Claudia: it's normal that orderOrLogin parameter is 0, because MT4 is still processing the request Debug.Assert(masterLogin > 0); m_ptrLogger.LogInfo("PROCESSING : MT4 Account %d master Login %d AccountType: %d", mt4Login, masterLogin, accType); var ptrResp = new SocialOrderResponse(); //MT_SocialOrderResponse_ID ptrResp._serverTransID = server_trans_id; ptrResp._requestMode = reqMode; ptrResp._retCode = (eReturnCode)trans_status; //SentDataUsingSocketID(ptrResp, MT_SocialOrderResponse_ID, socketID); _connectionMgr.SentDataUsingLoginID(ptrResp, MessageTypeID.MT_SocialOrderResponse_ID, masterLogin); } else if (trans_status == eOrderStatus.ORD_STAT_REJECTED) { // Claudia: it's normal that orderOrLogin parameter is 0, because MT4 is still processing the request Debug.Assert(masterLogin > 0); m_ptrLogger.LogInfo("REJECTED : MT4 Account %d master Login %d AccountType: %d", mt4Login, masterLogin, accType); if (accType == eAccountType.ACC_TYPE_SSP) { await _signalService.UpdateSignalMT4Login(server_trans_id, mt4Login, cancellationToken, isRemove : true); await _signalService.UpdateSSPSignalMT4Login(server_trans_id, mt4Login, cancellationToken, isRemove : true); } if (accType == eAccountType.ACC_TYPE_SM) { await _signalService.UpdateSignalMT4Login(server_trans_id, mt4Login, cancellationToken, isRemove : true); await _signalService.UpdateSMSignalMT4Login(server_trans_id, mt4Login, cancellationToken, isRemove : true); } var ptrResp = new SocialOrderResponse(); //MT_SocialOrderResponse_ID ptrResp._serverTransID = server_trans_id; ptrResp._requestMode = reqMode; ptrResp._retCode = (eReturnCode)trans_status; ptrResp._mt4errorcode = errorcode; CppHelper.strcpy(out ptrResp._mt4errormessage, errormessage); //SentDataUsingSocketID(ptrResp, MT_SocialOrderResponse_ID, socketID); _connectionMgr.SentDataUsingLoginID(ptrResp, MessageTypeID.MT_SocialOrderResponse_ID, masterLogin); } //insertDBTransmitData(masterLogin, FDMT_MasterUser_ID); //insertDBTransmitData(masterLogin, FDMT_MT4Account_ID); //insertDBTransmitData(masterLogin, FDMT_SSPSignal_ID); //insertDBTransmitData(masterLogin, FDMT_SSPSignal_ID); } else { var orderId = request.OrderInfo?._orderID ?? 0; if (trans_status == eOrderStatus.ORD_STAT_PROCESSING) { // Alexey: it's normal that orderOrLogin parameter is 0, because MT4 is still processing the request Debug.Assert(masterLogin > 0 && server_trans_id != Guid.Empty); m_ptrLogger.LogInfo($"PROCESSING : Order {orderId}, master Login {masterLogin}, UID: {server_trans_id}"); var ptrResp = new SocialOrderResponse(); //MT_SocialOrderResponse_ID ptrResp._serverTransID = server_trans_id; ptrResp._requestMode = reqMode; ptrResp._retCode = (eReturnCode)trans_status; //SentDataUsingSocketID(ptrResp, MT_SocialOrderResponse_ID, socketID); _connectionMgr.SentDataUsingLoginID(ptrResp, MessageTypeID.MT_SocialOrderResponse_ID, masterLogin); } else if (trans_status == eOrderStatus.ORD_STAT_REJECTED) { // Alexey: it's normal that orderOrLogin parameter is 0, because MT4 is still processing the request Debug.Assert(masterLogin > 0 && server_trans_id != Guid.Empty); m_ptrLogger.LogInfo($"REJECTED : Order {orderId}, master Login {masterLogin}, UID: {server_trans_id}"); var ptrResp = new SocialOrderResponse(); //MT_SocialOrderResponse_ID ptrResp._serverTransID = server_trans_id; ptrResp._requestMode = reqMode; ptrResp._retCode = (eReturnCode)trans_status; ptrResp._mt4errorcode = errorcode; CppHelper.strcpy(out ptrResp._mt4errormessage, errormessage); //SentDataUsingSocketID(ptrResp, MT_SocialOrderResponse_ID, socketID); _connectionMgr.SentDataUsingLoginID(ptrResp, MessageTypeID.MT_SocialOrderResponse_ID, masterLogin); } else if (trans_status == eOrderStatus.ORD_STAT_EXECUTED) { if (reqMode == MT4REQMODE.OPEN_TRADE) { Debug.Assert(server_trans_id != Guid.Empty && orderId > 0 && request.Order != null && request.Order.OrderId == 0); request.Order.OrderId = orderId; await _orderService.InsertAsync(request.Order, cancellationToken); // updateTransLinking(server_trans_id, orderOrLogin); } //if (reqMode == MT4REQMODE.CLOSE_TRADE || reqMode == MT4REQMODE.DELETE_TRADE) //{ // removeTransLinking(server_trans_id); //} Debug.Assert(masterLogin > 0 && server_trans_id != Guid.Empty); m_ptrLogger.LogInfo($"EXECUTED : Order {orderId}, master Login {masterLogin}, UID: {server_trans_id}"); var ptrResp = new SocialOrderResponse(); //MT_SocialOrderResponse_ID ptrResp._serverTransID = server_trans_id; ptrResp._requestMode = reqMode; ptrResp._retCode = (eReturnCode)trans_status; //SentDataUsingSocketID(ptrResp, MT_SocialOrderResponse_ID, socketID); _connectionMgr.SentDataUsingLoginID(ptrResp, MessageTypeID.MT_SocialOrderResponse_ID, masterLogin); } } }