//TODO: handleSMFollowerRequest
        public async Task <AddSMFollowerResponse> AddSMFollower(
            AddSMFollowerRequest ptr, CancellationToken cancellationToken)
        {
            AddSMFollowerResponse ptrResp = null;

            m_ptrLogger.LogOk("START");

            if (ptr._dataTransMode == DT_TRANS_ADD)
            {
                await _followerService.InsertSMFollower(ptr._smfollower, cancellationToken);

                bool ret = true;
                ptrResp                = new AddSMFollowerResponse(); // MT_AddSMFollowerResponse_ID
                ptrResp._retCode       = ret == true ? RC_OK : RC_ERROR;
                ptrResp._dataTransMode = ptr._dataTransMode;
                CppHelper.memcpy(ref ptrResp._smfollower, ptr._smfollower);
                //SentDataUsingSocketID(ptrResp, MT_AddSMFollowerResponse_ID, ptr._header._socketID);
                if (ret)
                {
                    //await AddFollowerAsync(ptr._smfollower._smMT4Login, ptr._smfollower._followerMT4Login,
                    //    ptr._smfollower._followerMT4ServerIndex, cancellationToken);
                    //await AddFollowerVolumeAsync(ptr._smfollower._smSignalIndex, ptr._smfollower._followerMT4ServerIndex,
                    //    ptr._smfollower._followerMT4Login, ptr._smfollower._followervolume, cancellationToken);

                    m_ptrLogger.LogInfo(
                        "SM follower added Follower master login: %d SM master login : %d SignalIndex: %d",
                        ptr._smfollower._followerMasterLogin, ptr._smfollower._smMasterLogin, ptr._smfollower._smSignalIndex);
                }
                else
                {
                    m_ptrLogger.LogError(
                        "Unable to add SM follower added Follower master login: %d SM master login : %d SignalIndex: %d",
                        ptr._smfollower._followerMasterLogin, ptr._smfollower._smMasterLogin, ptr._smfollower._smSignalIndex);
                }
            }
            else if (ptr._dataTransMode == DT_TRANS_MODIFY)
            {
                await _followerService.ModifySMFollower(ptr._smfollower, cancellationToken);

                bool ret = true;
                ptrResp                = new AddSMFollowerResponse(); //MT_AddSMFollowerResponse_ID
                ptrResp._retCode       = ret == true ? RC_OK : RC_ERROR;
                ptrResp._dataTransMode = ptr._dataTransMode;
                CppHelper.memcpy(ref ptrResp._smfollower, ptr._smfollower);
                //SentDataUsingSocketID(ptrResp, MT_AddSMFollowerResponse_ID, ptr._header._socketID);
                if (ret)
                {
                    //await  UpdateFollowerVolumeAsync(ptr._smfollower._smSignalIndex,
                    //    ptr._smfollower._followerMT4ServerIndex, ptr._smfollower._followerMT4Login,
                    //    ptr._smfollower._followervolume, cancellationToken);
                    m_ptrLogger.LogInfo(
                        "SM follower modified. Follower master login: %d SM master login : %d SignalIndex: %d",
                        ptr._smfollower._followerMasterLogin, ptr._smfollower._smMasterLogin, ptr._smfollower._smSignalIndex);
                }
                else
                {
                    m_ptrLogger.LogError(
                        "Unable to modify SM follower. Follower master login: %d SM master login : %d SignalIndex: %d",
                        ptr._smfollower._followerMasterLogin, ptr._smfollower._smMasterLogin, ptr._smfollower._smSignalIndex);
                }
            }
            else if (ptr._dataTransMode == DT_TRANS_DELETE)
            {
                await _followerService.DeleteSMFollower(ptr._smfollower, cancellationToken);

                bool ret = true;
                ptrResp                = new AddSMFollowerResponse(); //MT_AddSMFollowerResponse_ID
                ptrResp._retCode       = ret == true ? RC_OK : RC_ERROR;
                ptrResp._dataTransMode = ptr._dataTransMode;
                CppHelper.memcpy(ref ptrResp._smfollower, ptr._smfollower);
                //SentDataUsingSocketID(ptrResp, MT_AddSMFollowerResponse_ID, ptr._header._socketID);
                if (ret)
                {
                    //await RemoveFollowerAsync(ptr._smfollower._smMT4Login, ptr._smfollower._followerMT4Login,
                    //    ptr._smfollower._followerMT4ServerIndex, cancellationToken);
                    //await RemoveFollowerVolumeAsync(ptr._smfollower._smSignalIndex,
                    //    ptr._smfollower._followerMT4ServerIndex, ptr._smfollower._followerMT4Login,
                    //    ptr._smfollower._followervolume, cancellationToken);

                    m_ptrLogger.LogInfo(
                        "SM follower deleted Follower master login: %d SM master login : %d SignalIndex: %d",
                        ptr._smfollower._followerMasterLogin, ptr._smfollower._smMasterLogin, ptr._smfollower._smSignalIndex);
                }
                else
                {
                    m_ptrLogger.LogError(
                        "Unable to delete SM follower added Follower master login: %d SM master login : %d SignalIndex: %d",
                        ptr._smfollower._followerMasterLogin, ptr._smfollower._smMasterLogin, ptr._smfollower._smSignalIndex);
                }
            }

            m_ptrLogger.LogOk("END");
            return(ptrResp);
        }