/// <summary>
        /// 
        /// </summary>
        /// <param name="account"></param>
        /// <param name="historyCommand"></param>
        /// <param name="onlineCommand"></param>
        /// <param name="pendingorder"></param>
        /// <returns></returns>
        public string RendReport(Investor account,List<OpenTrade> historyCommand, List<OpenTrade> onlineCommand, List<OpenTrade> pendingorder)
        {
            this.account = account;
            this.strBuild.Clear();
            this.sumDeposite=0;
            this.sumProfit=0;
            this.sumCredit=0;
            this.sumSwap=0;
            this.sumCommission=0;
            this.onlineProfit=0;

            this.strBuild.Append("<table width='100%' cellpadding='1' cellspacing='1' style=font-size:11px;font-family:Arial;><tr>");
            this.strBuild.Append("<td>Account Code: <b>" + this.account.Code + "</b></td><td>Name: <b>" + this.account.NickName + "</b></td><td>" + DateTime.Now + "</td></tr></table>");
            if(historyCommand!=null)
            {
                this.strBuild.Append("<b>Closed Transactions:</>");
                this.RendHistoryReport(historyCommand);
            }

            if(onlineCommand!=null)
            {
                this.strBuild.Append("<b>Open Trade</b>");
                this.RendOlineCmdReport(onlineCommand);
            }

            if(pendingorder!=null)
            {
                this.strBuild.Append("<b>Pending Order</b>");
                this.RendPendingOrder(pendingorder);
            }

            this.RendSummaryTb();

            return this.strBuild.ToString();
        }
        //==================REND STATEMENT OF ACCOUNT=================================
        /// <summary>
        /// 
        /// </summary>
        /// <param name="account"></param>
        /// <param name="historyCommand"></param>
        /// <param name="onlineCommand"></param>
        /// <param name="pendingOrder"></param>
        /// <returns></returns>
        public string RendStatement(Business.Investor account, List<Business.OpenTrade> historyCommand, List<Business.OpenTrade> onlineCommand, List<Business.OpenTrade> pendingOrder)
        {
            this.strStatement.Clear();
            this.account = account;
            //this.RendStyleStatement();

            if (historyCommand != null)
            {
                this.RendHistoryStatement(historyCommand);
            }

            if (onlineCommand != null)
            {
                this.RendOpenStatement(onlineCommand);
            }

            if (pendingOrder != null)
            {
                this.RendLimitStop(pendingOrder);
            }

            if (account != null)
            {
                this.RendAccount(account);
            }

            return this.strStatement.ToString();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="investorID"></param>
        /// <param name="session"></param>
        /// <returns></returns>
        //private static Business.TypeLogin GetTypeLogin(int investorID, string loginKey)
        //{
        //    Business.TypeLogin result = new Business.TypeLogin();
        //    if (Business.Market.InvestorOnline != null)
        //    {
        //        int count = Business.Market.InvestorOnline.Count;
        //        for (int i = 0; i < count; i++)
        //        {
        //            if (Business.Market.InvestorOnline[i].SessionInstance != null)
        //            {
        //                if (Business.Market.InvestorOnline[i].InvestorID == investorID &&
        //                    Business.Market.InvestorOnline[i].LoginKey == loginKey)
        //                {
        //                    result = Business.Market.InvestorOnline[i].LoginType;
        //                    break;
        //                }
        //            }
        //        }
        //    }
        //    return result;
        //}
        /// <summary>
        /// 
        /// </summary>
        /// <param name="investorID"></param>
        /// <returns></returns>
        private static string GetWebTickOnInvestorOnline(int investorID)
        {
            string result = string.Empty;
            bool flagInvestor = false;

            #region GET TICK OF INVESTOR
            if (Business.Market.InvestorOnline != null)
            {
                int count = Business.Market.InvestorOnline.Count;
                for (int i = 0; i < count; i++)
                {
                    //if (Business.Market.InvestorOnline[i].InvestorID == investorID && Business.Market.InvestorOnline[i].LoginKey == key)
                    if (Business.Market.InvestorOnline[i].InvestorID == investorID)
                    {
                        #region COMMENT CODE
                        Business.Market.InvestorOnline[i].numTimeOut = 30;
                        if (Business.Market.InvestorOnline[i].TickInvestor != null && Business.Market.InvestorOnline[i].TickInvestor.Count > 0)
                        {
                            #region COMMENT
                            while (Business.Market.InvestorOnline[i].TickInvestor.Count > 0)
                            {
                                try
                                {
                                    if (Business.Market.InvestorOnline[i].TickInvestor[0] != null)
                                    {
                                        result += Business.Market.InvestorOnline[i].TickInvestor[0].Bid + "▼" +
                                            Business.Market.InvestorOnline[i].TickInvestor[0].HighInDay + "▼" +
                                            Business.Market.InvestorOnline[i].TickInvestor[0].LowInDay + "▼" +
                                            Business.Market.InvestorOnline[i].TickInvestor[0].Status + "▼" +
                                            Business.Market.InvestorOnline[i].TickInvestor[0].SymbolName + "▼" +
                                            Business.Market.InvestorOnline[i].TickInvestor[0].TickTime + "▼" +
                                            Business.Market.InvestorOnline[i].TickInvestor[0].Ask + "♦";

                                        Business.Market.InvestorOnline[i].TickInvestor.RemoveAt(0);
                                    }
                                    else
                                    {
                                        Business.Market.InvestorOnline[i].TickInvestor.RemoveAt(0);
                                    }
                                }
                                catch (Exception ex)
                                {

                                }
                            }
                            #endregion
                        }
                        #endregion

                        flagInvestor = true;
                        break;
                    }
                }
            }
            #endregion

            if (!flagInvestor)
            {
                if (Business.Market.InvestorList != null)
                {
                    int count = Business.Market.InvestorList.Count;
                    for (int i = 0; i < count; i++)
                    {
                        if (Business.Market.InvestorList[i].InvestorID == investorID)
                        {
                            Business.Investor newInvestor = new Business.Investor();
                            newInvestor.InvestorID = investorID;
                            newInvestor.LastConnectTime = DateTime.Now;
                            newInvestor.numTimeOut = 30;
                            newInvestor.TickInvestor = new List<Business.Tick>();
                            newInvestor.Code = Business.Market.InvestorList[i].Code;
                            newInvestor.IsLogout = false;
                            newInvestor.LoginKey = Model.ValidateCheck.RandomKeyLogin(8);
                            newInvestor.InvestorGroupInstance = Business.Market.InvestorList[i].InvestorGroupInstance;

                            Business.Market.InvestorOnline.Add(newInvestor);

                            //set islogout for investor list
                            Business.Market.InvestorList[i].IsLogout = false;

                            TradingServer.Facade.FacadeSendNotifyManagerRequest(1, newInvestor);

                            break;
                        }
                    }
                }
            }

            return result;
        }
 internal int AutoSendMailRegistration(Investor investor)
 {
     string content ="<Section xml:space=\"preserve\" HasTrailingParagraphBreakOnPaste=\"False\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">"
     + "<Paragraph><Run FontWeight=\"Bold\">Dear " + investor.NickName + ",Your demo account has been activated !</Run></Paragraph><Paragraph><Run>Please, keep your login credentials for future access :</Run>"
     + "</Paragraph><Paragraph><Run>Username : </Run><Run FontWeight=\"Bold\">"+ investor.Code + "</Run></Paragraph><Paragraph><Run>Password : </Run><Run FontWeight=\"Bold\">" + investor.PrimaryPwd + "</Run></Paragraph>"
     + "<Paragraph><Run>Access : http://et5.mpf.co.id</Run></Paragraph><Paragraph><Run FontWeight=\"Bold\">Best Regards,</Run></Paragraph><Paragraph><Run>Millennium Penata Futures Customer Service Customer Service</Run>"
     + "</Paragraph><Paragraph><Run>Contact us anytime: [email protected]</Run></Paragraph></Section>";
     Business.InternalMail newInternalMailMessage = new InternalMail();
     newInternalMailMessage.Content = content;
     newInternalMailMessage.From = "admin";
     newInternalMailMessage.FromName = "PT Millennium Penata Futures";
     newInternalMailMessage.Subject = "Registratation";
     newInternalMailMessage.Time = DateTime.Now;
     newInternalMailMessage.To = investor.Code;
     newInternalMailMessage.ToName = investor.NickName;
     newInternalMailMessage.IsNew = true;
     return this.AddNewInternalMail(newInternalMailMessage);
 }
        /// <summary>
        /// EXTRACT COMMAND AND CALL FUNCTION 
        /// </summary>
        /// <param name="Cmd"></param>
        /// <returns></returns>
        public string ExtractCommandServer(string Cmd, string ipAddress, string code)
        {
            string StringResult = string.Empty;
            string Command = string.Empty;
            string Value = string.Empty;
            if (!string.IsNullOrEmpty(Cmd))
            {
                string[] subValue = new string[2];

                int Position = -1;
                Position = Cmd.IndexOf('$');
                if (Position > 0)
                {
                    Command = Cmd.Substring(0, Position);
                    Value = Cmd.Substring(Position + 1);

                    subValue[0] = Command;
                    subValue[1] = Value;
                }
                else
                {
                    subValue[0] = Cmd;
                }

                if (subValue.Length > 0)
                {
                    switch (subValue[0])
                    {
                        //Command Add New
                        //
                        #region Add Investor Group(LOG)
                        case "AddInvestorGroup":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int ResultAddNew = -1;
                                    Business.InvestorGroup Result = new InvestorGroup();
                                    Result = this.ExtractInvestorGroup(subValue[1]);
                                    //Call Function Add New Investor Group
                                    ResultAddNew = TradingServer.Facade.FacadeAddNewInvestorGroup(Result);

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': group config added/changed ['test-duc']
                                    string status = "[Failed]";

                                    if (ResultAddNew > 0)
                                    {
                                        status = "[successs]";
                                        TradingServer.Facade.FacadeCheckUpdateGroupVirtualDealerOnline();
                                    }

                                    string content = "'" + code + "': group config added/changed ['" + Result.Name + "'] " + status;
                                    string comment = "[add new group]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    #endregion

                                    if (ResultAddNew > 0) TradingServer.Facade.FacadeSendNoticeManagerChangeGroup(3, ResultAddNew);
                                    StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Add Investor Group Config
                        case "AddInvestorGroupConfig":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int ResultAddNew = -1;
                                    List<Business.ParameterItem> Result = new List<ParameterItem>();
                                    Result = this.ExtractParameterItem(subValue[1]);
                                    //Call Function Add New Investor Group Config
                                    ResultAddNew = TradingServer.Facade.FacadeAddNewInvestorGroupConfig(Result);
                                    if (ResultAddNew > 0) Facade.FacadeSendNoticeManagerChangeGroup(2, Result[0].SecondParameterID);
                                    StringResult = subValue[0] + "$" + ResultAddNew.ToString();

                                    //SEND COMMAND TO AGENT SERVER
                                    string strAgent = "AddInvestorGroup$" + Result[0].SecondParameterID;
                                    Business.AgentNotify newAgentNotify = new AgentNotify();
                                    newAgentNotify.NotifyMessage = strAgent;
                                    TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify);
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Add New Security(LOG)
                        case "AddSecurity":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    if (!string.IsNullOrEmpty(subValue[1]))
                                    {
                                        int ResultAddNew = -1;
                                        int MarketAreaID = -1;
                                        string[] subParameter = subValue[1].Split(',');
                                        int.TryParse(subParameter[2], out MarketAreaID);
                                        if (subParameter.Length > 0)
                                        {
                                            ResultAddNew = TradingServer.Facade.FacadeAddSecurity(subParameter[0], subParameter[1], MarketAreaID);
                                        }

                                        #region INSERT SYSTEM LOG
                                        //INSERT SYSTEM LOG
                                        //'2222': security config added/changed ['test-duc']
                                        string status = "[Failed]";

                                        if (ResultAddNew > 0)
                                            status = "[Success]";

                                        string content = "'" + code + "': security config added/changed ['" + subParameter[0] + "'] " + status;
                                        string comment = "[add new security]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        #endregion

                                        StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Add New SecurityConfig
                        case "AddSecurityConfig":
                            {
                                int ResultAddNew = -1;
                                List<Business.ParameterItem> Result = new List<ParameterItem>();
                                Result = this.ExtractParameterItem(subValue[1]);
                                ResultAddNew = TradingServer.Facade.FacadeAddSecurityConfig(Result);
                                StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                            }
                            break;
                        #endregion

                        #region Add New Symbol(LOG)
                        case "AddNewSymbol":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    if (!string.IsNullOrEmpty(subValue[1]))
                                    {
                                        int ResultAddNew = -1;
                                        string[] subParameter = subValue[1].Split(',');
                                        if (subParameter.Length > 0)
                                        {
                                            int SecurityID = 0;
                                            int RefSymbolID = 0;
                                            int MarketAreaID = 0;

                                            int.TryParse(subParameter[0], out SecurityID);
                                            int.TryParse(subParameter[1], out RefSymbolID);
                                            int.TryParse(subParameter[2], out MarketAreaID);

                                            //Call Function Add New Symbol
                                            ResultAddNew = TradingServer.Facade.FacadeAddNewSymbol(SecurityID, RefSymbolID, MarketAreaID, subParameter[3]);

                                            #region INSERT SYSTEM LOG
                                            //INSERT SYSTEM LOG
                                            //'2222': symbol config added/changed ['XAUUSD']
                                            string status = "[Failed]";

                                            if (ResultAddNew > 0)
                                            {
                                                status = "[Success]";
                                                TradingServer.Facade.FacadeCheckUpdateGroupVirtualDealerOnline();
                                            }

                                            string content = "'" + code + "': symbol config added/changed ['" + subParameter[3] + "'] " + status;
                                            string comment = "[add new security]";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                            #endregion

                                            if (ResultAddNew > 0) Facade.FacadeSendNoticeManagerChangeSymbol(3, ResultAddNew);
                                            StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                        }
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Add New TradingConfig(SymbolConfig)
                        case "AddTradingConfig":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int ResultAddNew = -1;
                                    List<Business.ParameterItem> Result = new List<ParameterItem>();
                                    Result = this.ExtractParameterItem(subValue[1]);
                                    //Call Function Add New TradingConfig(SymbolConfig)
                                    ResultAddNew = TradingServer.Facade.FacadeAddNewTradingConfig(Result);
                                    if (ResultAddNew > 0) Facade.FacadeSendNoticeManagerChangeSymbol(2, Result[0].SecondParameterID);
                                    StringResult = subValue[0] + "$" + ResultAddNew.ToString();

                                    //SEND COMMAND TO AGENT SERVER
                                    string strAgent = "AddNewSymbol$" + Result[0].SecondParameterID;
                                    Business.AgentNotify newAgentNotify = new AgentNotify();
                                    newAgentNotify.NotifyMessage = strAgent;
                                    TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify);
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Add New Investor(LOG)
                        case "AddNewInvestor":
                            {
                                int ResultAddNew = -1;
                                Business.Investor Result = new Investor();
                                Result = this.ExtractionInvestor(subValue[1]);

                                //Check Email Add Send Mail Confirm Create Account Complete
                                bool checkEmail = Model.TradingCalculate.Instance.IsEmail(Result.Email);

                                if (checkEmail)
                                {
                                    bool CheckCode = false;
                                    CheckCode = TradingServer.Facade.FacadeGetInvestorByCode(Result.Code);
                                    if (CheckCode == true)
                                    {
                                        double balance = Result.Balance;
                                        Result.Balance = 0;
                                        bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                        if (checkip)
                                        {
                                            bool checkRule = Facade.FacadeCheckPermitAccountManagerAndAdmin(code);
                                            bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, Result.InvestorGroupInstance.InvestorGroupID);
                                            if (checkRule && checkGroup)
                                            {
                                                ResultAddNew = TradingServer.Facade.FacadeAddNewInvestor(Result);

                                                //Add Investor To Investor List
                                                if (ResultAddNew > 0)
                                                {
                                                    Result.InvestorID = ResultAddNew;
                                                    int resultProfileID = TradingServer.Facade.FacadeAddInvestorProfile(Result);
                                                    Result.InvestorProfileID = resultProfileID;
                                                    if (string.IsNullOrEmpty(Result.AgentID))
                                                        Result.AgentID = "0";

                                                    Business.Market.InvestorList.Add(Result);

                                                    //Deposit account
                                                    Result.Deposit(balance, ResultAddNew, "deposit");
                                                }

                                                StringResult = subValue[0] + "$" + ResultAddNew.ToString() + "," + Result.Code;

                                                #region INSERT SYSTEM LOG
                                                //INSERT SYSTEM LOG
                                                //'2222': new account '9942881' - ngthanhduc
                                                string status = "[Failed]";

                                                if (ResultAddNew > 0)
                                                    status = "[Success]";

                                                string content = "'" + code + "': new account '" + Result.Code + "' - " + Result.NickName + " " + status;
                                                string comment = "[add new account]";
                                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                                #endregion
                                            }
                                            else
                                            {
                                                StringResult = subValue[0] + "$MCM006";
                                                string content = "'" + code + "': new account '" + Result.Code + "' - " + Result.NickName + " failed(not enough rights)";
                                                string comment = "[add new account]";
                                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                            }
                                            //SEND NOTIFY TO MANAGER
                                            //TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Result);

                                            //TradingServer.Facade.FacadeAutoSendMailRegistration(Result);
                                        }
                                        else
                                        {
                                            StringResult = subValue[0] + "$MCM005";
                                            string content = "'" + code + "': new account '" + Result.Code + "' - " + Result.NickName + " failed(invalid ip)";
                                            string comment = "[add new account]";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$Account exist";
                                        string content = "'" + code + "': new account '" + Result.Code + "' - " + Result.NickName + " failed(account exist)";
                                        string comment = "[add new account]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$Invalid email";
                                    string content = "'" + code + "': new account '" + Result.Code + "' - " + Result.NickName + " failed(invalid email)";
                                    string comment = "[add new account]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                }
                            }
                            break;
                        #endregion

                        #region Add New Agent(LOG)
                        case "AddNewAgent":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string temp = "";
                                    if (!string.IsNullOrEmpty(subValue[1]))
                                    {
                                        Business.Agent result = new Agent();

                                        #region Create Agent
                                        string[] subParameter = subValue[1].Split('}');
                                        if (subParameter.Length > 0)
                                        {
                                            int agentGroupID = -1;
                                            bool isDisable = false;
                                            bool isIpFilter = false;

                                            int.TryParse(subParameter[0], out agentGroupID);
                                            result.Name = subParameter[1];
                                            result.Comment = subParameter[3];
                                            bool.TryParse(subParameter[4], out isDisable);
                                            bool.TryParse(subParameter[5], out isIpFilter);

                                            result.AgentGroupID = agentGroupID;
                                            result.IsDisable = isDisable;
                                            result.IsIpFilter = isIpFilter;
                                            result.IpForm = subParameter[6];
                                            result.IpTo = subParameter[7];
                                            result.Code = subParameter[8];
                                            result.Pwd = subParameter[9];
                                            result.GroupCondition = subParameter[10];
                                        }
                                        #endregion

                                        int isSpace = result.Code.IndexOf(' ');
                                        if (isSpace > 0)
                                        {
                                            temp = "invalid code login";

                                            string strContent = "'" + code + "': add new agent [Failed] (invalid code login)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, strContent, "[add agent]",ipAddress, code);
                                        }
                                        else
                                        {
                                            bool inves = Facade.FacadeGetInvestorByCode(result.Code);
                                            if (inves)
                                            {
                                                int ResultAddNew = TradingServer.Facade.FacadeAddNewAgent(result);

                                                #region INSERT SYSTEM LOG
                                                //INSERT SYSTEM LOG
                                                //'2222': manager config added/changed ['212121']
                                                string status = "[Failed]";

                                                if (ResultAddNew > 0)
                                                    status = "[Success]";

                                                string content = "'" + code + "': manager config added/changed ['" + subParameter[8] + "']" + status;
                                                string comment = "[add agent]";
                                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                                #endregion

                                                temp = ResultAddNew.ToString();
                                            }
                                            else temp = "Account is exist";
                                        }
                                    }
                                    StringResult = subValue[0] + "$" + temp;
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Add News
                        case "AddNews":
                            {
                                int ResultAddNew = -1;
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    string content = subValue[1];
                                    if (subValue.Length > 2)
                                    {
                                        for (int i = 2; i < subValue.Length; i++)
                                        {
                                            content += subValue[i];
                                        }
                                    }
                                    Business.News result = new News();

                                    #region Create News
                                    string[] subParameter = content.Split('█');
                                    if (subParameter.Length > 2)
                                    {
                                        string title = subParameter[0];
                                        string body = subParameter[1];
                                        string category = subParameter[2];
                                        ResultAddNew = Facade.FacadeAddNews(title, body, DateTime.Now, category);
                                    }
                                    #endregion
                                }
                                StringResult = subValue[0] + "$" + ResultAddNew;
                            }
                            break;
                        #endregion

                        #region Add New Alert
                        case "AddNewAlert":
                            {
                                int ResultAddNew = -1;
                                string timeCreate = "";
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    Business.PriceAlert result = new PriceAlert();

                                    #region Create Alert
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        result.TickOnline = new Tick();
                                        result.Symbol = subParameter[0];
                                        result.Email = subParameter[1];
                                        result.PhoneNumber = subParameter[2];
                                        result.Value = double.Parse(subParameter[3]);
                                        #region ConditionAlert & ActionAlert
                                        switch (subParameter[4])
                                        {
                                            case "LargerBid":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.LargerBid;
                                                    break;
                                                }
                                            case "LargerAsk":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.LargerAsk;
                                                    break;
                                                }
                                            case "LargerHighBid":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.LargerHighBid;
                                                    break;
                                                }
                                            case "LargerHighAsk":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.LargerHighAsk;
                                                    break;
                                                }
                                            case "SmallerBid":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.SmallerBid;
                                                    break;
                                                }
                                            case "SmallerAsk":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.SmallerAsk;
                                                    break;
                                                }
                                            case "SmallerLowBid":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.SmallerLowBid;
                                                    break;
                                                }
                                            case "SmallerLowAsk":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.SmallerLowAsk;
                                                    break;
                                                }
                                        }
                                        switch (subParameter[5])
                                        {
                                            case "Email":
                                                {
                                                    result.AlertAction = Business.ActionAlert.Email;
                                                    break;
                                                }
                                            case "SMS":
                                                {
                                                    result.AlertAction = Business.ActionAlert.SMS;
                                                    break;
                                                }
                                            case "Sound":
                                                {
                                                    result.AlertAction = Business.ActionAlert.Sound;
                                                    break;
                                                }
                                        }
                                        #endregion
                                        result.IsEnable = bool.Parse(subParameter[6]);
                                        result.InvestorID = int.Parse(subParameter[7]);
                                        result.Notification = subParameter[8];
                                        result.DateCreate = DateTime.Now;
                                        timeCreate = result.DateCreate.ToString();
                                        result.DateActive = result.DateCreate;
                                        ResultAddNew = TradingServer.Facade.FacadeAddNewAlert(result);
                                    }
                                    #endregion

                                }
                                StringResult = subValue[0] + "$" + ResultAddNew + "," + timeCreate;
                            }
                            break;

                        case "InsertNewAlert":
                            {
                                int ResultAddNew = -1;
                                string timeCreate = "";
                                Business.PriceAlert result = new PriceAlert();
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    #region Create Alert
                                    string[] subParameter = subValue[1].Split('{');
                                    if (subParameter.Length > 0)
                                    {
                                        result.TickOnline = new Tick();
                                        result.Symbol = subParameter[0];
                                        result.Email = subParameter[1];
                                        result.PhoneNumber = subParameter[2];
                                        result.Value = double.Parse(subParameter[3]);
                                        #region ConditionAlert & ActionAlert
                                        switch (subParameter[4])
                                        {
                                            case "LargerBid":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.LargerBid;
                                                    break;
                                                }
                                            case "LargerAsk":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.LargerAsk;
                                                    break;
                                                }
                                            case "LargerHighBid":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.LargerHighBid;
                                                    break;
                                                }
                                            case "LargerHighAsk":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.LargerHighAsk;
                                                    break;
                                                }
                                            case "SmallerBid":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.SmallerBid;
                                                    break;
                                                }
                                            case "SmallerAsk":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.SmallerAsk;
                                                    break;
                                                }
                                            case "SmallerLowBid":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.SmallerLowBid;
                                                    break;
                                                }
                                            case "SmallerLowAsk":
                                                {
                                                    result.AlertCondition = Business.ConditionAlert.SmallerLowAsk;
                                                    break;
                                                }
                                        }
                                        switch (subParameter[5])
                                        {
                                            case "Email":
                                                {
                                                    result.AlertAction = Business.ActionAlert.Email;
                                                    break;
                                                }
                                            case "SMS":
                                                {
                                                    result.AlertAction = Business.ActionAlert.SMS;
                                                    break;
                                                }
                                            case "Sound":
                                                {
                                                    result.AlertAction = Business.ActionAlert.Sound;
                                                    break;
                                                }
                                        }
                                        #endregion
                                        result.IsEnable = bool.Parse(subParameter[6]);
                                        result.InvestorID = int.Parse(subParameter[7]);
                                        result.Notification = subParameter[8];
                                        result.DateCreate = DateTime.Now;
                                        timeCreate = result.DateCreate.ToString();
                                        result.DateActive = result.DateCreate;
                                        ResultAddNew = TradingServer.Facade.FacadeAddNewAlert(result);
                                    }
                                    #endregion
                                }
                                StringResult = subValue[0] + "$" + ResultAddNew + "{" + result.Symbol + "{" + result.Email + "{" + result.PhoneNumber + "{" +
                                    result.Value + "{" + result.AlertCondition + "{" + result.AlertAction + "{" + result.IsEnable + "{" +
                                    timeCreate + "{" + result.DateActive + "{" + result.InvestorID + "{" + result.Notification;
                            }
                            break;
                        #endregion

                        #region Add New Permit
                        case "AddPermit":
                            {
                                int ResultAddNew = -1;
                                Business.Permit Result = new Permit();
                                Result = this.ExtractionPermit(subValue[1]);
                                ResultAddNew = TradingServer.Facade.FacadeAddNewPermit(Result.AgentGroupID, Result.AgentID, Result.Role.RoleID);
                                StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                            }
                            break;
                        #endregion

                        #region Add New IAgentSecurity
                        case "AddNewIAgentSecurity":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    int ResultAddNew = -1;
                                    int AgentID = -1;
                                    int SecurityID = -1;
                                    bool IsUse = false;
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        int.TryParse(subParameter[0], out AgentID);
                                        int.TryParse(subParameter[1], out SecurityID);
                                        bool.TryParse(subParameter[2], out IsUse);
                                        ResultAddNew = TradingServer.Facade.FacadeAddNewIAgentSecurity(AgentID, SecurityID, IsUse, subParameter[3], subParameter[4]);
                                        StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                    }
                                }
                            }
                            break;
                        case "AddListIAgentSecurity":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    int ResultAddNew = -1;
                                    List<Business.IAgentSecurity> Result = new List<IAgentSecurity>();
                                    Result = this.ExtractionIAgentSecurity(subValue[1]);
                                    ResultAddNew = TradingServer.Facade.FacadeAddListIAgentSecurity(Result);
                                    StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                }
                            }
                            break;
                        #endregion

                        #region Add New IAgentGroup
                        case "AddNewIAgentGroup":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    int ResultAddNew = -1;
                                    int AgentID = -1;
                                    int InvestorGroupID = -1;
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        int.TryParse(subParameter[0], out AgentID);
                                        int.TryParse(subParameter[1], out InvestorGroupID);
                                        ResultAddNew = TradingServer.Facade.FacadeAddNewIAgentGroup(AgentID, InvestorGroupID);
                                        StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region Add New Investor Profile
                        case "AddNewInvestorProfile":
                            {
                                int ResultAddNew = -1;
                                //Business.InvestorProfile Result = new InvestorProfile();
                                //Result = this.ExtractInvestorProfile(subValue[1]);
                                //ResultAddNew = TradingServer.Facade.FacadeAddNewInvestorProfile(Result);
                                StringResult = ResultAddNew.ToString();
                            }
                            break;
                        #endregion

                        #region Add New IGroupSecurityConfig
                        case "AddNewIGroupSecurityConfig":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int ResultAddNew = -1;
                                    List<Business.ParameterItem> Result = new List<ParameterItem>();
                                    Result = this.ExtractParameterItem(subValue[1]);
                                    //Call Function Add New TradingConfig(SymbolConfig)
                                    ResultAddNew = TradingServer.Facade.FacadeAddIGroupSecurityConfig(Result);
                                    StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Add New IGroupSymbolConfig
                        case "AddNewIGroupSymbolConfig":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int ResultAddNew = -1;
                                    List<Business.ParameterItem> Result = new List<ParameterItem>();
                                    Result = this.ExtractParameterItem(subValue[1]);
                                    //Call Function Add New TradingConfig(SymbolConfig)
                                    ResultAddNew = TradingServer.Facade.FacadeAddIGroupSymbolConfig(Result);
                                    StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Add Deposit, Add Credit, Withrawals
                        case "AddDeposit":
                            {
                                string[] Parameter = subValue[1].Split(',');
                                int InvestorID = 0;
                                double Money = 0;
                                if (Parameter.Length == 3)
                                {
                                    bool ResultDeposit = false;
                                    int.TryParse(Parameter[0], out InvestorID);

                                    Business.Investor tempInvestor = new Investor();
                                    tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(InvestorID);

                                    bool parseMoney = double.TryParse(Parameter[1], out Money);
                                    bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                    bool checkRule = Facade.FacadeCheckPermitAddMoney(code);
                                    bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempInvestor.InvestorGroupInstance.InvestorGroupID);
                                    if (parseMoney && checkip && checkRule && checkGroup)
                                    {
                                        ResultDeposit = TradingServer.Facade.FacadeAddDeposit(InvestorID, Money, Parameter[2]);
                                        StringResult = subValue[0] + "$" + ResultDeposit + "," + InvestorID + "," + Money;
                                        #region INSERT SYSTEM LOG
                                        //INSERT SYSTEM LOG
                                        //'2222': account '9789300' withdrawal: 100000.00
                                        string status = "[Success]";
                                        if (!ResultDeposit)
                                        {
                                            status = "[Failed]";
                                        }

                                        string tempMoney = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Money.ToString(), 2);
                                        string content = "'" + code + "': account '" + tempInvestor.Code + "' deposit: " + tempMoney + " " + status;
                                        string comment = "[deposit]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        #endregion
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false + "," + InvestorID + "," + Money;
                                        string comment = "[deposit]";
                                        string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Money.ToString(), 2);
                                        if (!checkip)
                                        {
                                            string content = "'" + code + "': account '" + tempInvestor.Code + "' deposit: " + tempCredit + " failed (invalid ip)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                        if (!checkRule || !checkGroup)
                                        {
                                            string content = "'" + code + "': account '" + tempInvestor.Code + "' deposit: " + tempCredit + " failed (not enough rights)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                        if (!parseMoney)
                                        {
                                            string content = "'" + code + "': account '" + tempInvestor.Code + "' deposit: " + tempCredit + " failed (invalid amount)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$" + false + "," + InvestorID + "," + Money;
                                }
                            }
                            break;

                        case "AddDepostAndCredit":
                            {
                                string[] Parameter = subValue[1].Split(',');
                                if (Parameter.Length == 3)
                                {
                                    bool ResultDeposit = false;
                                    int InvestorID = 0;
                                    int.TryParse(Parameter[0], out InvestorID);
                                    double Deposit = 0;
                                    bool parseDeposit = double.TryParse(Parameter[1], out Deposit);
                                    double Credit = 0;
                                    bool parseCredit = double.TryParse(Parameter[2], out Credit);

                                    if (parseDeposit && parseCredit)
                                    {
                                        ResultDeposit = TradingServer.Facade.FacadeUpdateBalanceAndCredit(InvestorID, Deposit, Credit);

                                        StringResult = subValue[0] + "$" + ResultDeposit + "," + InvestorID + "," + Deposit + "," + Credit;
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false + "," + InvestorID + "," + Deposit + "," + Credit;
                                    }
                                }
                            }
                            break;

                        case "AddCredit":
                            {
                                string[] Parameter = subValue[1].Split(',');
                                if (Parameter.Length == 3)
                                {
                                    bool ResultCredit = false;
                                    int InvestorID = 0;
                                    double Credit = 0;

                                    int.TryParse(Parameter[0], out InvestorID);
                                    bool parseCredit = double.TryParse(Parameter[1], out Credit);

                                    Business.Investor tempInvestor = new Investor();
                                    tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(InvestorID);
                                    bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                    bool checkRule = Facade.FacadeCheckPermitAddMoney(code);
                                    bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempInvestor.InvestorGroupInstance.InvestorGroupID);
                                    if (parseCredit && checkip && checkRule && checkGroup)
                                    {
                                        ResultCredit = TradingServer.Facade.FacadeAddCredit(InvestorID, Credit, Parameter[2]);

                                        StringResult = subValue[0] + "$" + ResultCredit + "," + InvestorID + "," + Credit;

                                        #region INSERT SYSTEM LOG
                                        //INSERT SYSTEM LOG
                                        //'2222': account '9789300' withdrawal: 100000.00
                                        string status = "[Success]";
                                        if (!ResultCredit)
                                            status = "[Failed]";

                                        string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Credit.ToString(), 2);
                                        string content = "'" + code + "': account '" + tempInvestor.Code + "' credit in: " + tempCredit + " " + status;
                                        string comment = "[credit in]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        #endregion
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false + "," + InvestorID + "," + Credit;
                                        string comment = "[credit in]";
                                        string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Credit.ToString(), 2);
                                        if (!checkip)
                                        {
                                            string content = "'" + code + "': account '" + tempInvestor.Code + "' credit in: " + tempCredit + " failed (invalid ip)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                        if (!checkRule || !checkGroup)
                                        {
                                            string content = "'" + code + "': account '" + tempInvestor.Code + "' credit in: " + tempCredit + " failed (not enough rights)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                        if (!parseCredit)
                                        {
                                            string content = "'" + code + "': account '" + tempInvestor.Code + "' credit in: " + tempCredit + " failed (invalid amount)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                    }
                                }
                            }
                            break;

                        case "SubCredit":
                            {
                                string[] Parameter = subValue[1].Split(',');
                                if (Parameter.Length == 3)
                                {
                                    bool ResultCredit = false;
                                    int InvestorID = 0;
                                    double Credit = 0;

                                    int.TryParse(Parameter[0], out InvestorID);
                                    bool parseCredit = double.TryParse(Parameter[1], out Credit);

                                    Business.Investor tempInvestor = new Investor();
                                    tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(InvestorID);

                                    bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                    bool checkRule = Facade.FacadeCheckPermitAddMoney(code);
                                    bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempInvestor.InvestorGroupInstance.InvestorGroupID);
                                    if (parseCredit && checkip && checkRule && checkGroup)
                                    {
                                        ResultCredit = TradingServer.Facade.FacadeSubCredit(InvestorID, Credit, Parameter[2]);
                                        StringResult = subValue[0] + "$" + ResultCredit + "," + InvestorID + "," + Credit;
                                        #region INSERT SYSTEM LOG
                                        //INSERT SYSTEM LOG
                                        //'2222': account '9789300' withdrawal: 100000.00
                                        string status = "[Success]";
                                        if (!ResultCredit)
                                            status = "[Failed]";

                                        string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Credit.ToString(), 2);
                                        string content = "'" + code + "': account '" + tempInvestor.Code + "' credit out: " + tempCredit + " " + status;
                                        string comment = "[credit out]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        #endregion
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false + "," + InvestorID + "," + Credit;
                                        string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Credit.ToString(), 2);
                                        string comment = "[credit out]";
                                        if (!checkip)
                                        {
                                            string content = "'" + code + "': account '" + tempInvestor.Code + "' credit out: " + tempCredit + " failed (invalid ip)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                        if (!checkRule || !checkGroup)
                                        {
                                            string content = "'" + code + "': account '" + tempInvestor.Code + "' credit out: " + tempCredit + " failed (not enough rights)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                        if (!parseCredit)
                                        {
                                            string content = "'" + code + "': account '" + tempInvestor.Code + "' credit out: " + tempCredit + " failed (invalid amount)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                    }
                                }
                            }
                            break;

                        case "WithRawals":
                            {
                                string[] Parameter = subValue[1].Split(',');
                                if (Parameter.Length == 3)
                                {
                                    bool ResultWithRawals = false;
                                    int InvestorID = 0;
                                    double Money = 0;
                                    int.TryParse(Parameter[0], out InvestorID);
                                    bool parseMoney = double.TryParse(Parameter[1], out Money);

                                    Business.Investor tempInvestor = new Investor();
                                    tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(InvestorID);
                                    bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                    bool checkRule = Facade.FacadeCheckPermitAddMoney(code);
                                    bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempInvestor.InvestorGroupInstance.InvestorGroupID);
                                    if (parseMoney && checkip && checkRule && checkGroup)
                                    {
                                        ResultWithRawals = TradingServer.Facade.FacadeWithRawals(InvestorID, Money, Parameter[2]);
                                        StringResult = subValue[0] + "$" + ResultWithRawals + "," + InvestorID + "," + Money;
                                        #region INSERT SYSTEM LOG
                                        //INSERT SYSTEM LOG
                                        //'2222': account '9789300' withdrawal: 100000.00
                                        string status = "[Success]";
                                        if (!ResultWithRawals)
                                            status = "[Failed]";

                                        string formatMoney = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Money.ToString(), 2);
                                        string content = "'" + code + "': account '" + tempInvestor.Code + "' withdrawal: " + formatMoney + " " + status;
                                        string comment = "[withdrawal]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        #endregion
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false + "," + InvestorID + "," + Money;
                                        string comment = "[withdrawal]";
                                        string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Money.ToString(), 2);
                                        if (!checkip)
                                        {
                                            string content = "'" + code + "': account '" + tempInvestor.Code + "' withdrawal: " + tempCredit + " failed (invalid ip)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                        if (!checkRule || !checkGroup)
                                        {
                                            string content = "'" + code + "': account '" + tempInvestor.Code + "' withdrawal: " + tempCredit + " failed (not enough rights)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                        if (!parseMoney)
                                        {
                                            string content = "'" + code + "': account '" + tempInvestor.Code + "' withdrawal: " + tempCredit + " failed (invalid amount)";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                    }

                                }
                            }
                            break;
                        #endregion

                        #region MAKE COMMAND BY MANAGER
                        case "AddCommandByManager":
                            {
                                bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                if (checkip)
                                {
                                    bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code);
                                    if (checkRule)
                                    {
                                        string[] subParameter = subValue[1].Split(',');
                                        if (subParameter.Length == 9)
                                        {
                                            #region Map Value
                                            int InvestorID = 0;
                                            double Size = 0;
                                            double StopLoss = 0;
                                            double TakeProfit = 0;
                                            double OpenPrice = 0;
                                            int CommandType = 0;
                                            string Symbol = string.Empty;
                                            DateTime ExpTime = DateTime.Now;

                                            int.TryParse(subParameter[0], out InvestorID);
                                            double.TryParse(subParameter[1], out Size);
                                            Symbol = subParameter[2];
                                            double.TryParse(subParameter[3], out StopLoss);
                                            double.TryParse(subParameter[4], out TakeProfit);
                                            double.TryParse(subParameter[5], out OpenPrice);
                                            int.TryParse(subParameter[6], out CommandType);
                                            DateTime.TryParse(subParameter[7], out ExpTime);
                                            #endregion
                                            if (Size > 0)
                                            {
                                                Business.OpenTrade newCommand = new OpenTrade();
                                                newCommand = TradingServer.Facade.FacadeFillInstanceOpenTrade(InvestorID, subParameter[2], CommandType);

                                                newCommand.Size = Size;
                                                newCommand.StopLoss = StopLoss;
                                                newCommand.TakeProfit = TakeProfit;
                                                newCommand.OpenPrice = OpenPrice;
                                                newCommand.ExpTime = ExpTime;
                                                newCommand.IsServer = true;
                                                newCommand.Comment = subParameter[8];

                                                //CALCULATION MARGIN
                                                //newCommand.CalculatorMarginCommand(newCommand);
                                                bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, newCommand.Investor.InvestorGroupInstance.InvestorGroupID);
                                                if (checkGroup)
                                                {
                                                    bool checkAccount = newCommand.CheckValidAccountInvestor(newCommand);

                                                    if (checkAccount)
                                                    {
                                                        bool IsTrade = false;
                                                        double Minimum = -1;
                                                        double Maximum = -1;
                                                        double Step = -1;
                                                        bool ResultCheckStepLots = false;

                                                        //CHECK MIN MAX LOTS COMMAND
                                                        #region Get Config IGroupSecurity
                                                        if (newCommand.IGroupSecurity.IGroupSecurityConfig != null)
                                                        {
                                                            int countIGroupSecurityConfig = newCommand.IGroupSecurity.IGroupSecurityConfig.Count;
                                                            for (int i = 0; i < countIGroupSecurityConfig; i++)
                                                            {
                                                                if (newCommand.IGroupSecurity.IGroupSecurityConfig[i].Code == "B01")
                                                                {
                                                                    if (newCommand.IGroupSecurity.IGroupSecurityConfig[i].BoolValue == 1)
                                                                        IsTrade = true;
                                                                }

                                                                if (newCommand.IGroupSecurity.IGroupSecurityConfig[i].Code == "B11")
                                                                {
                                                                    double.TryParse(newCommand.IGroupSecurity.IGroupSecurityConfig[i].NumValue, out Minimum);
                                                                }

                                                                if (newCommand.IGroupSecurity.IGroupSecurityConfig[i].Code == "B12")
                                                                {
                                                                    double.TryParse(newCommand.IGroupSecurity.IGroupSecurityConfig[i].NumValue, out Maximum);
                                                                }

                                                                if (newCommand.IGroupSecurity.IGroupSecurityConfig[i].Code == "B13")
                                                                {
                                                                    double.TryParse(newCommand.IGroupSecurity.IGroupSecurityConfig[i].NumValue, out Step);
                                                                }
                                                            }
                                                        }
                                                        #endregion

                                                        ResultCheckStepLots = newCommand.IGroupSecurity.CheckStepLots(Minimum, Maximum, Step, newCommand.Size);

                                                        if (ResultCheckStepLots)
                                                        {
                                                            newCommand.DealerCode = code;
                                                            newCommand.Symbol.MarketAreaRef.AddCommand(newCommand);
                                                            StringResult = subValue[0] + "$" + true + "," + "MCM001";
                                                        }
                                                        else
                                                        {
                                                            StringResult = subValue[0] + "$" + false + "," + "MCM003";
                                                        }
                                                    }
                                                    else
                                                    {
                                                        StringResult = subValue[0] + "$" + false + "," + "MCM002";
                                                    }
                                                }
                                                else
                                                {
                                                    StringResult = subValue[0] + "$" + false + "," + "MCM006";
                                                    string content = "'" + code + "': manager open command failed(not enough rights)";
                                                    string comment = "[manager open command]";
                                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                                }
                                            }
                                            else
                                            {
                                                StringResult = subValue[0] + "$" + false + "," + "MCM003";
                                            }
                                        }
                                        else
                                        {
                                            StringResult = subValue[0] + "$" + false + "," + "MCM004";
                                        }
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false + "," + "MCM006";
                                        string content = "'" + code + "': manager open command failed(not enough rights)";
                                        string comment = "[manager open command]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$" + false + "," + "MCM005";
                                    string content = "'" + code + "': manager open command failed(invalid ip)";
                                    string comment = "[manager open command]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                }
                            }
                            break;
                        #endregion

                        #region FUNCTION IN CANDLES(LOG)
                        case "AddNewCandles":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool Result = false;
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length == 8)
                                    {
                                        DateTime Time;
                                        double High = 0;
                                        double Low = 0;
                                        double Open = 0;
                                        double Close = 0;
                                        double openAsk = 0;
                                        double highAsk = 0;
                                        double lowAsk = 0;
                                        double closeAsk = 0;
                                        int Volume = 0;
                                        int TimeFrame = 0;

                                        DateTime.TryParse(subParameter[1], out Time);
                                        double.TryParse(subParameter[2], out High);
                                        double.TryParse(subParameter[3], out Low);
                                        double.TryParse(subParameter[4], out Open);
                                        double.TryParse(subParameter[5], out Close);
                                        int.TryParse(subParameter[6], out Volume);
                                        int.TryParse(subParameter[7], out TimeFrame);
                                        //double.TryParse(subParameter[8], out openAsk);
                                        //double.TryParse(subParameter[9], out highAsk);
                                        //double.TryParse(subParameter[10], out lowAsk);
                                        //double.TryParse(subParameter[11], out closeAsk);

                                        ProcessQuoteLibrary.Business.Candles objCandles = new ProcessQuoteLibrary.Business.Candles();
                                        objCandles.Close = Close;
                                        objCandles.CloseAsk = closeAsk;
                                        objCandles.High = High;
                                        objCandles.HighAsk = highAsk;
                                        objCandles.Low = Low;
                                        objCandles.LowAsk = lowAsk;
                                        objCandles.Name = subParameter[0];
                                        objCandles.Open = Open;
                                        objCandles.OpenAsk = openAsk;
                                        objCandles.Time = Time;
                                        objCandles.TimeFrame = TimeFrame;
                                        objCandles.Volume = Volume;

                                        int ResultAdd = ProcessQuoteLibrary.Business.QuoteProcess.AddCandles(objCandles);
                                        if (ResultAdd > 0)
                                            Result = true;

                                        #region INSERT SYSTEM LOG
                                        //INSERT SYSTEM LOG
                                        //'2222': XAUUSD 1 bars added
                                        string status = "[Failed]";

                                        if (ResultAdd > 0)
                                            status = "[Success]";

                                        string content = "'" + code + "': " + subParameter[0] + " 1 bars added";
                                        string comment = "[add new candles]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        #endregion

                                        StringResult = subValue[0] + "$" + Result + "," + ResultAdd;
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false + "," + -1;
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;

                        case "DeleteCandles":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool Result = false;
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length == 2)
                                    {
                                        int CandlesID = 0;
                                        int TimeFrame = 0;

                                        int.TryParse(subParameter[0], out CandlesID);
                                        int.TryParse(subParameter[1], out TimeFrame);

                                        Result = ProcessQuoteLibrary.Business.QuoteProcess.DeleteCandlesByID(CandlesID, TimeFrame);

                                        #region INSERT SYSTEM LOG
                                        //INSERT SYSTEM LOG
                                        //'2222': XAUUSD M1 1 bars deleted
                                        string status = "[Failed]";

                                        if (Result)
                                            status = "[Success]";

                                        string content = "'" + code + "': " + subParameter[0] + " 1 bars deleted";
                                        string comment = "[delete candles]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        #endregion

                                        StringResult = subValue[0] + "$" + Result;
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false;
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;

                        case "UpdateCandles":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool Result = false;
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length == 8)
                                    {
                                        int CandlesID = 0;
                                        DateTime Time;
                                        int Volume = 0;
                                        double Open = 0;
                                        double Close = 0;
                                        double High = 0;
                                        double Low = 0;
                                        double openAsk = 0;
                                        double highAsk = 0;
                                        double lowAsk = 0;
                                        double closeAsk = 0;
                                        int TimeFrame = 0;

                                        int.TryParse(subParameter[0], out CandlesID);
                                        DateTime.TryParse(subParameter[1], out Time);
                                        int.TryParse(subParameter[2], out Volume);
                                        double.TryParse(subParameter[3], out Open);
                                        double.TryParse(subParameter[4], out Close);
                                        double.TryParse(subParameter[5], out High);
                                        double.TryParse(subParameter[6], out Low);
                                        int.TryParse(subParameter[7], out TimeFrame);
                                        //double.TryParse(subParameter[8], out openAsk);
                                        //double.TryParse(subParameter[9], out highAsk);
                                        //double.TryParse(subParameter[10], out lowAsk);
                                        //double.TryParse(subParameter[11], out closeAsk);

                                        ProcessQuoteLibrary.Business.Candles objCandles = new ProcessQuoteLibrary.Business.Candles();
                                        objCandles.Open = Open;
                                        objCandles.High = High;
                                        objCandles.Low = Low;
                                        objCandles.Close = Close;

                                        //objCandles.OpenAsk = openAsk;
                                        //objCandles.HighAsk = highAsk;
                                        //objCandles.LowAsk = lowAsk;
                                        //objCandles.CloseAsk = closeAsk;

                                        objCandles.ID = CandlesID;
                                        objCandles.Time = Time;
                                        objCandles.TimeFrame = TimeFrame;
                                        objCandles.Volume = Volume;

                                        Result = ProcessQuoteLibrary.Business.QuoteProcess.UpdateCandleOnline(objCandles);

                                        StringResult = subValue[0] + "$" + Result;
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false;
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region FUNCTION IN JOURNAL
                        case "AddJournal":
                            {
                                string[] subParameter = subValue[1].Split(',');
                                if (subParameter.Length == 4)
                                {
                                    int typeID = 0;
                                    int.TryParse(subParameter[0], out typeID);
                                    bool resultAdd = TradingServer.Facade.FacadeAddNewSystemLog(typeID, subParameter[1], subParameter[2], ipAddress, code);

                                    StringResult = subValue[0] + "$" + resultAdd;
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$" + false;
                                }
                            }
                            break;
                        #endregion

                        #region REOPEN COMMAND(LOG)
                        case "ReOpenComamnd":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code);
                                    if (checkRule)
                                    {
                                        string[] subParameter = subValue[1].Split(',');
                                        bool resultRe = false;
                                        if (subParameter.Length == 16)
                                        {
                                            #region MAP VALUE
                                            Business.OpenTrade result = new OpenTrade();
                                            int commandHistoryID;
                                            int commandType;
                                            double lots;
                                            //string symbol;
                                            DateTime openTime;
                                            double openPrice;
                                            double stopLoss;
                                            DateTime closeTime;
                                            double closePrice;
                                            double takeProfit;
                                            double commission;
                                            double agentCommission;
                                            double swap;
                                            //string comment;
                                            double taxes;
                                            DateTime expTime;

                                            int.TryParse(subParameter[0], out commandHistoryID);
                                            int.TryParse(subParameter[1], out commandType);
                                            double.TryParse(subParameter[2], out lots);
                                            //Symbol subparameter[3]
                                            DateTime.TryParse(subParameter[4], out openTime);
                                            double.TryParse(subParameter[5], out openPrice);
                                            double.TryParse(subParameter[6], out stopLoss);
                                            DateTime.TryParse(subParameter[7], out closeTime);
                                            double.TryParse(subParameter[8], out closePrice);
                                            double.TryParse(subParameter[9], out takeProfit);
                                            double.TryParse(subParameter[10], out commission);
                                            double.TryParse(subParameter[11], out agentCommission);
                                            double.TryParse(subParameter[12], out swap);
                                            //subParameter[13], out comment
                                            double.TryParse(subParameter[14], out taxes);
                                            DateTime.TryParse(subParameter[15], out expTime);
                                            #endregion

                                            result = TradingServer.Facade.FacadeGetCommandHistoryByCommandID(commandHistoryID);

                                            if (result != null)
                                            {
                                                Business.OpenTrade tempOpenTrade = new OpenTrade();
                                                tempOpenTrade = TradingServer.ClientFacade.FillInstanceOpenTrade(subParameter[3], result.Investor.InvestorID, commandType);

                                                if (tempOpenTrade.Investor != null && tempOpenTrade.Symbol != null && tempOpenTrade.IGroupSecurity != null)
                                                {
                                                    #region VALID INVESTOR, SYMBOL, IGROUPSECURITY INSTANCE
                                                    //SET NEW DATA
                                                    tempOpenTrade.Size = lots;
                                                    tempOpenTrade.OpenTime = result.OpenTime;
                                                    tempOpenTrade.OpenPrice = openPrice;
                                                    tempOpenTrade.StopLoss = stopLoss;
                                                    tempOpenTrade.CloseTime = closeTime;
                                                    tempOpenTrade.ClosePrice = closePrice;
                                                    tempOpenTrade.TakeProfit = takeProfit;
                                                    tempOpenTrade.Commission = commission;
                                                    tempOpenTrade.AgentCommission = agentCommission;
                                                    tempOpenTrade.Swap = swap;
                                                    //tempOpenTrade.Swap = 0;
                                                    tempOpenTrade.Taxes = taxes;
                                                    tempOpenTrade.ExpTime = expTime;
                                                    tempOpenTrade.Comment = subParameter[13];
                                                    tempOpenTrade.CommandCode = result.CommandCode;
                                                    tempOpenTrade.IsServer = true;
                                                    tempOpenTrade.IsReOpen = true;
                                                    tempOpenTrade.DealerCode = code;
                                                    tempOpenTrade.IsActivePending = result.IsActivePending;
                                                    tempOpenTrade.IsStopLossAndTakeProfit = result.IsStopLossAndTakeProfit;

                                                    //CHECK IF PENDING ORDER THEN SET PROFIT = 0(BECAUSE, IF PENDING ORDER WITH PROFIT != 0 THEN WHEN STOP OUT
                                                    //SYSTEM WILL PLUS PROFIT TO BALANCE
                                                    bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(tempOpenTrade.Type.ID);
                                                    if (isPending)
                                                        tempOpenTrade.Profit = 0;

                                                    tempOpenTrade.Symbol.MarketAreaRef.AddCommand(tempOpenTrade);

                                                    //DELETE COMMAND HISTORY
                                                    resultRe = TradingServer.Facade.FacadeDeleteCommandHistory(commandHistoryID);

                                                    if (resultRe)
                                                    {
                                                        if (Business.Market.InvestorList != null)
                                                        {
                                                            int count = Business.Market.InvestorList.Count;
                                                            for (int j = 0; j < count; j++)
                                                            {
                                                                if (Business.Market.InvestorList[j].InvestorID == tempOpenTrade.Investor.InvestorID)
                                                                {
                                                                    #region UPDATE BALANCE ACCOUNT OF INVESTOR AFTER REOPEN COMMAND
                                                                    double totalProfit = result.Profit + result.Commission + result.Swap;
                                                                    //CHANGE FORMAT REOPEN COMMAND(DONT RETURN SWAP TO BALANCE)
                                                                    //double totalProfit = result.Profit + result.Commission;

                                                                    double totalBalance = Business.Market.InvestorList[j].Balance - totalProfit;
                                                                    #endregion

                                                                    //UPDATE BALANCE IN DATABASE
                                                                    bool updateBalance = TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[j].InvestorID, totalBalance);

                                                                    if (updateBalance)
                                                                    {
                                                                        Business.Market.InvestorList[j].Balance -= totalProfit;

                                                                        //RECALCULATION ACCOUNT OF INVESTOR
                                                                        Business.Market.InvestorList[j].ReCalculationAccountInit();

                                                                        if (Business.Market.InvestorList[j].ClientCommandQueue == null)
                                                                            Business.Market.InvestorList[j].ClientCommandQueue = new List<string>();

                                                                        string message = "ROC53709";
                                                                        Business.Market.InvestorList[j].ClientCommandQueue.Add(message);
                                                                    }
                                                                    else
                                                                    {
                                                                        resultRe = false;
                                                                    }

                                                                    break;
                                                                }
                                                            }
                                                        }
                                                    }
                                                    #endregion

                                                    #region INSERT SYSTEM LOG
                                                    //'2222': restore order #11235348
                                                    //'9720467': restore order #11235348, sell 5.00 XAUUSD
                                                    //'2222': open order #11235248 for '9720467' modified - sell 5.00 XAUUSD at 1.44730 -> sell 5.00 XAUUSD at 1.44730

                                                    //INSERT SYSTEM LOG 1
                                                    string content = "'" + code + "': restore order #" + tempOpenTrade.CommandCode;
                                                    string comment = "[restore order]";
                                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);

                                                    //INSERT SYSTEM LOG 2
                                                    string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Size.ToString(), 2);
                                                    string sizeBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(result.Size.ToString(), 2);

                                                    string strOpenPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.OpenPrice.ToString(), tempOpenTrade.Symbol.Digit);
                                                    string strOpenPriceBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(result.OpenPrice.ToString(), result.Symbol.Digit);
                                                    string mode = string.Empty;
                                                    string content1 = string.Empty;
                                                    string type = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(tempOpenTrade.Type.ID);
                                                    string typeBefore = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(result.Type.ID);
                                                    string strCommission = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(commission.ToString(), 2);
                                                    string strAgentCommission = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(agentCommission.ToString(), 2);
                                                    string strStopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(stopLoss.ToString(), tempOpenTrade.Symbol.Digit);
                                                    string strTakeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(takeProfit.ToString(), tempOpenTrade.Symbol.Digit);
                                                    string strSwap = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(swap.ToString(), 2);

                                                    content = "'" + tempOpenTrade.Investor.Code + "': restore order #" + tempOpenTrade.CommandCode + ", [" + typeBefore + "] " + sizeBefore + " " + tempOpenTrade.Symbol.Name;
                                                    content1 = "'" + code + "': open order #" + tempOpenTrade.CommandCode + " for '" + tempOpenTrade.Investor.Code +
                                                        "' modified - [" + typeBefore + "] " + sizeBefore + " " + result.Symbol.Name + " at " + strOpenPriceBefore + " sl: " + strStopLoss + " tp: " + strTakeProfit +
                                                        " cm: " + strCommission + " agent commission: " + strAgentCommission + " swap: " + strSwap;

                                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content1, comment, ipAddress, code);
                                                    #endregion
                                                }
                                                else
                                                {
                                                    if (tempOpenTrade.Investor == null)
                                                    {
                                                        StringResult = subValue[0] + "$MCM007";
                                                        string content = "'" + code + "': restore order #" + tempOpenTrade.CommandCode + " failed(investor account not found)";
                                                        string comment = "[restore order]";
                                                        TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                                    }

                                                    if (tempOpenTrade.Symbol == null)
                                                    {
                                                        StringResult = subValue[0] + "$MCM008";
                                                        string content = "'" + code + "': restore order #" + tempOpenTrade.CommandCode + " failed(symbol not found)";
                                                        string comment = "[restore order]";
                                                        TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                                    }

                                                    if (tempOpenTrade.IGroupSecurity == null)
                                                    {
                                                        StringResult = subValue[0] + "$MCM009";
                                                        string content = "'" + code + "': restore order #" + tempOpenTrade.CommandCode + " failed(symbol account not found)";
                                                        string comment = "[restore order]";
                                                        TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                                    }
                                                }
                                            }
                                        }

                                        StringResult = subValue[0] + "$" + resultRe;
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$MCM006";
                                        string content = "'" + code + "': restore order failed(not enough rights)";
                                        string comment = "[restore order]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                    string content = "'" + code + "': restore order failed(invalid ip)";
                                    string comment = "[restore order]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                }
                            }
                            break;
                        #endregion

                        #region ADD MARKET CONFIG(LOG)
                        case "AddMarketConfig":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int ResultAddNew = -1;
                                    List<Business.ParameterItem> Result = new List<ParameterItem>();
                                    Result = this.ExtractParameterItem(subValue[1]);

                                    if (Result != null)
                                    {
                                        int countConfig = Result.Count;
                                        for (int m = 0; m < countConfig; m++)
                                        {
                                            ResultAddNew = TradingServer.Facade.FacadeAddNewMarketConfig(-1, Result[m].Name, Result[m].Code,
                                                Result[m].BoolValue, Result[m].StringValue, Result[m].NumValue, Result[m].DateValue);

                                            #region INSERT SYSTEM LOG
                                            //INSERT SYSTEM LOG
                                            //'2222': symbol config added/changed ['XAUUSD']
                                            string status = "[Failed]";

                                            if (ResultAddNew > 0)
                                                status = "[Success]";

                                            string content = "'" + code + "': market config added/changed ['" + Result[m].Name + "'] " + status;
                                            string comment = "[add market]";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                            #endregion
                                        }
                                    }

                                    if (ResultAddNew > 0)
                                    {
                                        Facade.FacadeSendNoticeManagerChangeSymbol(2, Result[0].SecondParameterID);
                                    }
                                    StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region ADD TICK FROM MANAGER
                        case "AddTickByManager":
                            {
                                string[] subParameter = subValue[1].Split(',');
                                bool result = false;
                                if (subParameter.Length == 3)
                                {
                                    double bid, ask;
                                    double.TryParse(subParameter[1], out bid);
                                    double.TryParse(subParameter[2], out ask);
                                    string symbol = subParameter[0];
                                    Symbol symbolInstance = null;
                                    for (int i = Market.SymbolList.Count - 1; i >= 0; i--)
                                    {
                                        if (symbol == Market.SymbolList[i].Name)
                                        {
                                            symbolInstance = Market.SymbolList[i];
                                            break;
                                        }
                                    }
                                    if (symbolInstance != null)
                                    {
                                        bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                        if (checkip)
                                        {
                                            bool checkRule = Facade.FacadeCheckPermitTickManager(code);
                                            checkRule = true;
                                            if (checkRule)
                                            {
                                                Business.Tick newTick = new Tick();
                                                newTick.Ask = ask;
                                                newTick.Bid = bid;
                                                newTick.SymbolName = symbol;
                                                newTick.IsManager = true;
                                                newTick.TickTime = DateTime.Now;
                                                this.UpdateTick(newTick);
                                                result = true;
                                                string content = "'" + code + "': add tick " + symbol + " "
                                                    + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(bid.ToString(),symbolInstance.Digit) + " / " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(ask.ToString(),symbolInstance.Digit) + " ("
                                                    + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(symbolInstance.TickValue.Bid.ToString() ,symbolInstance.Digit) + " / " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(symbolInstance.TickValue.Ask.ToString(),symbolInstance.Digit) + ")";
                                                string comment = "[add tick]";
                                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                            }
                                            else
                                            {
                                                string content = "'" + code + "': add tick failed (not enough rights) " + symbol + " "
                                                    + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(bid.ToString(), symbolInstance.Digit) + " / " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(ask.ToString(), symbolInstance.Digit) + " ("
                                                    + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(symbolInstance.TickValue.Bid.ToString(), symbolInstance.Digit) + " / " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(symbolInstance.TickValue.Ask.ToString(), symbolInstance.Digit) + ")";
                                                string comment = "[add tick]";
                                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                            }
                                        }
                                        else
                                        {
                                            string content = "'" + code + "': add tick failed (invalid ip) " + symbol + " "
                                                    + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(bid.ToString(), symbolInstance.Digit) + " / " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(ask.ToString(), symbolInstance.Digit) + " ("
                                                    + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(symbolInstance.TickValue.Bid.ToString(), symbolInstance.Digit) + " / " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(symbolInstance.TickValue.Ask.ToString(), symbolInstance.Digit) + ")";
                                            string comment = "[add tick]";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                    }
                                }
                                StringResult = subValue[0] + "$" + result;
                            }
                            break;
                        #endregion

                        #region SEND INTERNAL MAIL SERVER TO CLIENT
                        case "SendInternalMailToClient":
                            {
                                string[] subParameter = subValue[1].Split(',');
                                if (subParameter.Length > 0)
                                {
                                    string subject = TradingServer.Model.TradingCalculate.Instance.ConvertHexToString(subParameter[0]);
                                    string from = TradingServer.Model.TradingCalculate.Instance.ConvertHexToString(subParameter[1]);
                                    string fromName = TradingServer.Model.TradingCalculate.Instance.ConvertHexToString(subParameter[2]);
                                    string content = TradingServer.Model.TradingCalculate.Instance.ConvertHexToString(subParameter[3]);

                                    List<string> listInvestorCode = new List<string>();
                                    for (int j = 4; j < subParameter.Length; j++)
                                    {
                                        string login = subParameter[j];
                                        listInvestorCode.Add(login);
                                    }
                                    bool flag = false;
                                    if (listInvestorCode != null && listInvestorCode.Count > 0)
                                    {
                                        int count = listInvestorCode.Count;
                                        for (int i = 0; i < count; i++)
                                        {
                                            if (Business.Market.InvestorList != null)
                                            {
                                                int countInvestor = Business.Market.InvestorList.Count;

                                                for (int j = 0; j < countInvestor; j++)
                                                {
                                                    if (Business.Market.InvestorList[j].Code.Trim() == listInvestorCode[i].Trim())
                                                    {
                                                        bool permit = Facade.FacadeCheckPermitAgentSendMail(from, Business.Market.InvestorList[j].InvestorGroupInstance.InvestorGroupID);
                                                        if (!permit)
                                                        {
                                                            flag = true;
                                                            break;
                                                        }

                                                        #region SEARCH INVESTOR IN INVESTOR LIST
                                                        if (Business.Market.InvestorList[j].IsOnline)
                                                        {
                                                            if (Business.Market.InvestorList[j].ClientCommandQueue == null)
                                                                Business.Market.InvestorList[j].ClientCommandQueue = new List<string>();

                                                            Business.InternalMail newInternalMailMessage = new InternalMail();
                                                            newInternalMailMessage.Content = content;
                                                            newInternalMailMessage.From = from;
                                                            newInternalMailMessage.FromName = fromName;
                                                            newInternalMailMessage.Subject = subject;
                                                            newInternalMailMessage.Time = DateTime.Now;
                                                            newInternalMailMessage.To = listInvestorCode[i];
                                                            newInternalMailMessage.ToName = Business.Market.InvestorList[j].NickName;
                                                            newInternalMailMessage.IsNew = true;

                                                            //ADD NEW MESSAGE TO DATABASE
                                                            int id = TradingServer.Facade.FacadeAddNewInternalMail(newInternalMailMessage);
                                                            string message = "ITM21358$" + id + "█" + subject + "█" + from + "█" + fromName + "█" +
                                                               newInternalMailMessage.Time.ToString() + "█" + newInternalMailMessage.IsNew.ToString() + "█" +
                                                               content;
                                                            //TradingServer.Facade.FacadeAddNewInternalMail(

                                                            int countInvestorOnline = Business.Market.InvestorList[j].CountInvestorOnline(Business.Market.InvestorList[j].InvestorID);
                                                            if (countInvestorOnline > 0)
                                                                Business.Market.InvestorList[j].ClientCommandQueue.Add(message);
                                                        }
                                                        else
                                                        {
                                                            Business.InternalMail newInternalMailMessage = new InternalMail();
                                                            newInternalMailMessage.Content = content;
                                                            newInternalMailMessage.From = from;
                                                            newInternalMailMessage.FromName = fromName;
                                                            newInternalMailMessage.Subject = subject;
                                                            newInternalMailMessage.Time = DateTime.Now;
                                                            newInternalMailMessage.To = listInvestorCode[i];
                                                            newInternalMailMessage.ToName = Business.Market.InvestorList[j].NickName;
                                                            newInternalMailMessage.IsNew = true;

                                                            //ADD NEW MESSAGE TO DATABASE
                                                            TradingServer.Facade.FacadeAddNewInternalMail(newInternalMailMessage);
                                                        }
                                                        #endregion

                                                        flag = true;
                                                    }
                                                }

                                                if (!flag)
                                                {
                                                    Business.InternalMail newInternalMailMessage = new InternalMail();
                                                    newInternalMailMessage.Content = content;
                                                    newInternalMailMessage.From = from;
                                                    newInternalMailMessage.FromName = fromName;
                                                    newInternalMailMessage.Subject = subject;
                                                    newInternalMailMessage.Time = DateTime.Now;
                                                    newInternalMailMessage.To = listInvestorCode[i];
                                                    newInternalMailMessage.IsNew = true;
                                                    int InvestorID = TradingServer.Facade.FacadeGetInvestorIDByCode(listInvestorCode[i]);
                                                    if (InvestorID != -1)
                                                    {
                                                        Business.Agent agent = new Business.Agent();
                                                        agent = TradingServer.Facade.FacadeGetAgentByInvestorID(InvestorID);
                                                        if (agent != null)
                                                        {
                                                            if (agent.Name == "")
                                                            {
                                                                newInternalMailMessage.ToName = newInternalMailMessage.To;
                                                            }
                                                            else
                                                            {
                                                                newInternalMailMessage.ToName = agent.Name;
                                                            }
                                                        }
                                                        else
                                                        {
                                                            newInternalMailMessage.ToName = newInternalMailMessage.To;
                                                        }
                                                    }
                                                    else
                                                    {
                                                        newInternalMailMessage.ToName = newInternalMailMessage.To;
                                                    }

                                                    int id = TradingServer.Facade.FacadeAddNewInternalMail(newInternalMailMessage);
                                                    #region SEARCH AGENT IN AGENT LIST
                                                    for (int j = 0; j < Business.Market.AgentList.Count; j++)
                                                    {
                                                        if (Business.Market.AgentList[j].Code == listInvestorCode[i])
                                                        {
                                                            //add here
                                                            Business.Market.AgentList[j].AgentMail.Add(newInternalMailMessage);
                                                            Facade.FacadeSendNoticeManagerChangeMail(1, id, Business.Market.AgentList[j].AgentID);
                                                            break;
                                                        }
                                                    }
                                                    #endregion
                                                }
                                            }
                                        }
                                    }
                                    StringResult = subValue[0] + "$" + flag.ToString();
                                }
                            }
                            break;
                        #endregion

                        #region SEND INTERMAIL CLIENT TO SERVER
                        case "ClientSendInternalMailToServer":
                            {
                                string[] subParameter = subValue[1].Split(',');
                                if (subParameter.Length == 4)
                                {
                                    string subject = subParameter[0];
                                    string from = subParameter[1];
                                    string content = subParameter[2];
                                    string to = subParameter[3];

                                    if (Business.Market.AgentList != null)
                                    {
                                        bool flag = false;
                                        int count = Business.Market.AgentList.Count;
                                        for (int j = 0; j < count; j++)
                                        {
                                            if (Business.Market.AgentList[j].Code == to)
                                            {
                                                if (Business.Market.AgentList[j].IsOnline)
                                                {

                                                }
                                                else
                                                {

                                                }

                                                flag = true;
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region SEND COMMAND LOGOUT CLIENT
                        case "LogOffClient":
                            {
                                bool result = false;
                                int investorID = 0;
                                if (int.TryParse(subValue[1], out investorID))
                                {
                                    Business.Investor tempInvestor = new Investor();
                                    tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(investorID);
                                    if (tempInvestor != null)
                                    {
                                        bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                        if (checkip)
                                        {
                                            bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempInvestor.InvestorGroupInstance.InvestorGroupID);
                                            if (checkGroup)
                                            {
                                                result = Business.Market.SendNotifyToClient("LOFF14790251", 3, investorID);

                                                if (result)
                                                {
                                                    string content = "'" + code + "': logoff '" + tempInvestor.Code + "' [Success]";
                                                    string comment = "[logoff client]";
                                                    TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code);
                                                }
                                                else
                                                {
                                                    string content = "'" + code + "': logoff '" + tempInvestor.Code + "' [Failed]";
                                                    string comment = "[logoff client]";
                                                    TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code);
                                                }
                                            }
                                            else
                                            {
                                                string content = "'" + code + "': logoff '" + tempInvestor.Code + "' failed(not enough rights)";
                                                string comment = "[logoff client]";
                                                TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code);
                                            }
                                        }
                                        else
                                        {
                                            string content = "'" + code + "': logoff '" + tempInvestor.Code + "' failed(invalid ip)";
                                            string comment = "[logoff client]";
                                            TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code);
                                        }
                                    }
                                }

                                StringResult = subValue[0] + "$" + result;
                            }
                            break;
                        #endregion

                        //Command Delete
                        //
                        #region Delete Investor Group(LOG)
                        case "DeleteInvestorGroup":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length == 1)
                                    {
                                        int InvestorGroupID = 0;
                                        int.TryParse(subParameter[0], out InvestorGroupID);
                                        StringResult = subValue[0] + "$" + this.DeleteGroup(InvestorGroupID);
                                    }
                                }
                            }
                            break;

                        case "DeleteInvestorGroupByName":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    if (!string.IsNullOrEmpty(subValue[1]))
                                    {
                                        string[] subParameter = subValue[1].Split(',');
                                        string resultDelete = string.Empty;
                                        if (subParameter.Length == 1)
                                        {
                                            resultDelete = this.DeleteGroup(subParameter[0]);
                                            StringResult = subValue[0] + "$" + resultDelete;
                                        }

                                        #region INSERT SYSTEM LOG
                                        //INSERT SYSTEM LOG
                                        string status = "[Failed]";
                                        if (resultDelete == "DSyE010")
                                            status = "[Success]";

                                        string content = "'" + code + "': " + subParameter[0] + " has been delete " + status;
                                        string comment = "[delete group]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        #endregion
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Delete Investor Group Config
                        case "DeleteInvestorGroupConfig":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        int InvestorGroupConfigID = 0;
                                        int.TryParse(subParameter[0], out InvestorGroupConfigID);
                                        bool Result = false;
                                        Result = TradingServer.Facade.FacadeDeleteInvestorGroupConfig(InvestorGroupConfigID);
                                        StringResult = subValue[0] + "$" + Result.ToString();
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region Delete IGroupSymbol
                        case "DeleteIGroupSymbol":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    if (!string.IsNullOrEmpty(subValue[1]))
                                    {
                                        string[] subParameter = subValue[1].Split(',');
                                        if (subParameter.Length > 0)
                                        {
                                            int IGroupSymbolID = 0;
                                            int.TryParse(subParameter[0], out IGroupSymbolID);
                                            bool Result = false;
                                            Result = TradingServer.Facade.FacadeDeleteIGroupSymbol(IGroupSymbolID);
                                            StringResult = subValue[0] + "$" + Result.ToString();
                                        }
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Delete IGroupSecurityConfig
                        case "DeleteIGroupSymbolConfigByIGroupSymbolID":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int IGroupSymbolID = -1;
                                    int.TryParse(subValue[1], out IGroupSymbolID);
                                    StringResult = subValue[0] + "$" + TradingServer.Facade.FacadeDeleteIGroupSymbolConfigByIGroupSymbolID(IGroupSymbolID);
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Delete IGroupSecurity
                        case "DeleteIGroupSecurity":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    if (!string.IsNullOrEmpty(subValue[1]))
                                    {
                                        string[] subParameter = subValue[1].Split(',');
                                        if (subParameter.Length > 0)
                                        {
                                            int IGroupSecurityID = 0;
                                            int.TryParse(subParameter[0], out IGroupSecurityID);
                                            bool Result = false;
                                            Result = TradingServer.Facade.FacadeDeleteIGroupSecurityByIGroupSecurityID(IGroupSecurityID);
                                            StringResult = subValue[0] + "$" + Result.ToString();
                                        }
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Delete IGroupSecurityConfig
                        case "DeleteIGroupSecurityConfigByIGroupSecurityID":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int IGroupSecurityID = -1;
                                    int.TryParse(subValue[1], out IGroupSecurityID);
                                    StringResult = subValue[0] + "$" + TradingServer.Facade.FacadeDeleteIGroupSecurityConfigByIGroupSecurity(IGroupSecurityID);
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Delete Security(LOG)
                        case "DeleteSecurityByName":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    if (!string.IsNullOrEmpty(subValue[1]))
                                    {
                                        string[] subParameter = subValue[1].Split(',');
                                        string resultDelete = string.Empty;
                                        if (subParameter.Length == 1)
                                        {
                                            resultDelete = this.DeleteSecurity(subParameter[0]);
                                            StringResult = subValue[0] + "$" + resultDelete;
                                        }

                                        #region INSERT SYSTEM LOG
                                        //INSERT SYSTEM LOG
                                        string status = "[Failed]";
                                        if (resultDelete == "DSyE006")
                                            status = "[Success]";

                                        string content = "'" + code + "': " + subParameter[0] + " has been delete " + status;
                                        string comment = "[delete security]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        #endregion
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;

                        case "DeleteSecurityByID":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length == 1)
                                    {
                                        int SecurityID = 0;
                                        int.TryParse(subParameter[0], out SecurityID);
                                        StringResult = subValue[0] + "$" + this.DeleteSecurity(SecurityID);
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region Delete Symbol(LOG)
                        case "DeleteSymbol":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    if (!string.IsNullOrEmpty(subValue[1]))
                                    {
                                        string[] subParameter = subValue[1].Split(',');
                                        if (subParameter.Length == 1)
                                        {
                                            string result = this.DeleteSymbol(subParameter[0]);
                                            StringResult = subValue[0] + "$" + result;

                                            #region INSERT SYSTEM LOG
                                            //INSERT SYSTEM LOG
                                            string status = "[Failed]";
                                            if (result == "DSyE000")
                                                status = "[Success]";

                                            string content = "'" + code + "': " + subParameter[0] + " has been delete " + status;
                                            string comment = "[delete symbol]";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                            #endregion
                                        }
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Delete TradingConfig(SymbolConfig)
                        case "DeleteTradingConfig":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        int TradingConfigID = 0;
                                        int.TryParse(subParameter[0], out TradingConfigID);
                                        bool Result = false;
                                        Result = TradingServer.Facade.FacadeDeleteTradingConfig(TradingConfigID);
                                        StringResult = subValue[0] + "$" + Result.ToString();
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region Delete SecurityConfig
                        case "DeleteSecurityConfig":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        int SecurityConfigID = 0;
                                        int.TryParse(subParameter[0], out SecurityConfigID);
                                        bool Result = false;
                                        Result = TradingServer.Facade.FacadeDeleteSecurityConfigBySecurityConfigID(SecurityConfigID);
                                        StringResult = subValue[0] + "$" + Result.ToString();
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region Delete Investor
                        case "DeleteInvestor":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        int Result = -1;
                                        int InvestorID = 0;
                                        int.TryParse(subParameter[0], out InvestorID);
                                        Result = TradingServer.Facade.FacadeDeleteInvestor(InvestorID);
                                        StringResult = subValue[0] + "$" + Result.ToString();
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region Delete Agent
                        case "DeleteAgentByID":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    if (!string.IsNullOrEmpty(subValue[1]))
                                    {
                                        if (subValue[1].Length > 0)
                                        {
                                            int Result = -1;
                                            int AgentID = 0;
                                            int.TryParse(subValue[1], out AgentID);
                                            TradingServer.Facade.FacadeManagerLogout(AgentID);
                                            TradingServer.Facade.FacadeAdminLogout(AgentID);
                                            Business.Agent agent = new Business.Agent();
                                            agent = TradingServer.Facade.FacadeGetAgentByAgentID(AgentID);
                                            Result = TradingServer.Facade.FacadeDeleteIAgentSecurityByAgentID(AgentID);
                                            if (Result != -1)
                                            {
                                                Result = TradingServer.Facade.FacadeDeleteIAgentGroupByAgentID(AgentID);
                                            }
                                            if (Result != -1)
                                            {
                                                Result = TradingServer.Facade.FacadeDeletePermitByAgentID(AgentID);
                                            }
                                            if (Result != -1)
                                            {
                                                Result = TradingServer.Facade.FacadeDeleteAgent(AgentID);
                                            }
                                            if (Result != -1)
                                            {
                                                Result = TradingServer.Facade.FacadeDeleteInvestor(agent.InvestorID);
                                            }
                                            StringResult = subValue[0] + "$" + Result.ToString();

                                            #region INSERT SYSTEM LOG
                                            //INSERT SYSTEM LOG
                                            string status = "[Failed]";
                                            if (Result > 0)
                                                status = "[Success]";

                                            string content = "'" + code + "': " + agent.Name + " has been delete " + status;
                                            string comment = "[delete agent]";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                            #endregion
                                        }
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Delete Alert
                        case "DeleteAlertByID":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    if (subValue[1].Length > 0)
                                    {
                                        string[] subParameter = subValue[1].Split(',');
                                        if (subParameter.Length > 0)
                                        {
                                            int Result = -1;
                                            int alertID = int.Parse(subParameter[0]);
                                            string symbol = subParameter[1];
                                            int investorID = int.Parse(subParameter[2]);
                                            Result = TradingServer.Facade.FacadeDeleteAlertByID(alertID, symbol, investorID);
                                            if (Result != -1)
                                            {
                                                StringResult = subValue[0] + "$" + alertID;
                                            }
                                            else
                                            {
                                                StringResult = subValue[0] + "$" + Result.ToString();
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                        case "DeleteAlert":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    if (subValue[1].Length > 0)
                                    {
                                        string[] subParameter = subValue[1].Split('{');
                                        if (subParameter.Length > 0)
                                        {
                                            int Result = -1;
                                            int alertID = int.Parse(subParameter[0]);
                                            string symbol = subParameter[1];
                                            int investorID = int.Parse(subParameter[2]);
                                            Result = TradingServer.Facade.FacadeDeleteAlertByID(alertID, symbol, investorID);
                                            if (Result != -1)
                                            {
                                                StringResult = subValue[0] + "$" + alertID;
                                            }
                                            else
                                            {
                                                StringResult = subValue[0] + "$" + Result.ToString();
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region Delete Mail
                        case "DeleteMailByID":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    bool Result = false;
                                    if (subValue[1].Length > 0)
                                    {
                                        int mailID = int.Parse(subValue[1]);
                                        Result = TradingServer.Facade.DeleteInternalMail(mailID);

                                    }
                                    StringResult = subValue[0] + "$" + Result.ToString();
                                }
                            }
                            break;
                        #endregion

                        #region Delete Permit
                        case "DeletePermitByID":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        bool Result = false;
                                        int PermitID = 0;
                                        int.TryParse(subParameter[0], out PermitID);
                                        Result = TradingServer.Facade.FacadeDeletePermitByID(PermitID);
                                        StringResult = subValue[0] + "$" + Result.ToString();
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region Delete IAgentSecurity
                        case "DeleteIAgentSecurityByID":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    bool ResultAddNew = false;
                                    int IAgentSecurityID = 0;
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        int.TryParse(subParameter[0], out IAgentSecurityID);
                                        ResultAddNew = TradingServer.Facade.FacadeDeleteIAgentSecurityByID(IAgentSecurityID);
                                        StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                    }
                                }
                            }
                            break;

                        case "DeleteIAgentSecurityByAgentID":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    int ResultAddNew = -1;
                                    int AgentID = 0;
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        int.TryParse(subParameter[0], out AgentID);
                                        ResultAddNew = TradingServer.Facade.FacadeDeleteIAgentSecurityByAgentID(AgentID);
                                        StringResult = subValue[0] + "$" + ResultAddNew;
                                    }
                                }
                            }
                            break;
                        case "DeleteIAgentSecurityBySecurityID":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    bool ResultAddNew = false;
                                    int SecurityID = 0;
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        int.TryParse(subParameter[0], out SecurityID);
                                        ResultAddNew = TradingServer.Facade.FacadeDeleteIAgentSecurityBySecurityID(SecurityID);
                                        StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region Delete IAgentGroup
                        case "DeleteIAgentGroupByID":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    bool ResultAddNew = false;
                                    int IAgentGroupID = 0;
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        int.TryParse(subParameter[0], out IAgentGroupID);
                                        ResultAddNew = TradingServer.Facade.FacadeDeleteIAgentGroupByID(IAgentGroupID);
                                        StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                    }
                                }
                            }
                            break;
                        case "DeleteIAgentGroupByAgentID":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    int ResultAddNew = -1;
                                    int AgentID = 0;
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        int.TryParse(subParameter[0], out AgentID);
                                        ResultAddNew = TradingServer.Facade.FacadeDeleteIAgentGroupByAgentID(AgentID);
                                        StringResult = subValue[0] + "$" + ResultAddNew;
                                    }
                                }
                            }
                            break;
                        case "DeleteIAgentGroupByInvestorGroupID":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    bool ResultAddNew = false;
                                    int InvestorGroupID = 0;
                                    string[] subParameter = subValue[1].Split(',');
                                    if (subParameter.Length > 0)
                                    {
                                        int.TryParse(subParameter[0], out InvestorGroupID);
                                        ResultAddNew = TradingServer.Facade.FacadeDeleteIAgentGroupByInvestorGroupID(InvestorGroupID);
                                        StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                    }
                                }
                            }
                            break;

                        #endregion

                        #region Delete Investor Profile
                        case "DeleteInvestorProfile":
                            {
                                //if (!string.IsNullOrEmpty(subValue[1]))
                                //{
                                //    string[] subParameter = subValue[1].Split(',');
                                //    if (subParameter.Length > 0)
                                //    {
                                //        bool Result = false;
                                //        int InvestorID = 0;
                                //        int.TryParse(subParameter[0], out InvestorID);
                                //        Result = TradingServer.Facade.FacadeDeleteInvestorProfileByInvestorID(InvestorID);
                                //        StringResult = Result.ToString();
                                //    }
                                //}
                            }
                            break;
                        #endregion

                        #region Close Command By Manager(LOG)
                        case "CloseCommandByManager":
                            {
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code);
                                    if (checkRule)
                                    {
                                        bool Result = false;
                                        int CommandID = -1;
                                        double Size = 0;
                                        double ClosePrices = 0;
                                        string[] subParameter = subValue[1].Split(',');
                                        if (subParameter.Length == 3)
                                        {
                                            int.TryParse(subParameter[0], out CommandID);
                                            double.TryParse(subParameter[1], out Size);
                                            double.TryParse(subParameter[2], out ClosePrices);

                                            Business.OpenTrade tempOpenTrade = TradingServer.Facade.FacadeFindOpenTradeInCommandEx(CommandID);
                                            bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempOpenTrade.Investor.InvestorGroupInstance.InvestorGroupID);
                                            if (checkGroup)
                                            {
                                                Result = TradingServer.ClientFacade.FacadeCloseSpotCommandByManager(CommandID, Size, ClosePrices);

                                                #region INSERT SYSTEM LOG
                                                //INSERT SYSTEM LOG
                                                //'2222': account '9789300', close order #11349528 buy 2.00 EURUSD at 1.4624
                                                string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Size.ToString(), 2);
                                                string mode = TradingServer.Facade.FacadeGetTypeNameByTypeID(tempOpenTrade.Type.ID);
                                                string closePrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(subParameter[2], tempOpenTrade.Symbol.Digit);
                                                string content = "'" + code + "': account '" + tempOpenTrade.Investor.Code + "' close order #" + tempOpenTrade.CommandCode +
                                                    " " + mode + " " + size + " " + tempOpenTrade.Symbol.Name + " at " + closePrice;
                                                string comment = "[manager close command]";
                                                TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                                #endregion

                                                if (Result)
                                                    StringResult = subValue[0] + "$" + Result + ",MCM001";
                                                else StringResult = subValue[0] + "$" + Result + ",MCM004";
                                            }
                                            else
                                            {
                                                StringResult = subValue[0] + "$" + false + ",MCM006";
                                                string content = "'" + code + "': manager close command failed(not enough rights)";
                                                string comment = "[manager close command]";
                                                TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                            }
                                        }
                                        else
                                        {
                                            StringResult = subValue[0] + "$" + false + ",MCM004";
                                            string content = "'" + code + "': manager close command failed(invalid parameter)";
                                            string comment = "[manager close command]";
                                            TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                        }
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false + ",MCM006";
                                        string content = "'" + code + "': manager close command failed(not enough rights)";
                                        string comment = "[manager close command]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$" + false + ",MCM005";
                                    string content = "'" + code + "': manager close command failed(invalid ip)";
                                    string comment = "[manager close command]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                }
                            }
                            break;
                        #endregion

                        #region Close List Command By Manager
                        case "CloseListCommandByManager":
                            {
                                bool Result = false;
                                string[] subParamter = subValue[1].Split(',');
                                if (subParamter.Length > 0)
                                {
                                    int countCommand = subParamter.Length;
                                    for (int j = 0; j < countCommand; j++)
                                    {
                                        int CommandID = -1;
                                        double Size = 0;
                                        double ClosePrices = 0;
                                        int.TryParse(subParamter[j], out CommandID);
                                        j++;
                                        double.TryParse(subParamter[j], out Size);
                                        j++;
                                        double.TryParse(subParamter[j], out ClosePrices);
                                        Result = TradingServer.ClientFacade.FacadeCloseSpotCommandByManager(CommandID, Size, ClosePrices);
                                    }
                                }

                                StringResult = subValue[0] + "$" + Result;
                            }
                            break;
                        #endregion

                        #region Delete Command By Manager(Complete)(LOG)
                        case "DeleteCommandByManager":
                            {
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code);
                                    if (checkRule)
                                    {
                                        bool Result = false;
                                        int CommandID = -1;
                                        int.TryParse(subValue[1], out CommandID);
                                        Business.OpenTrade tempOpenTrade = new OpenTrade();

                                        tempOpenTrade = TradingServer.Facade.FacadeFindOpenTradeInCommandEx(CommandID);
                                        bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempOpenTrade.Investor.InvestorGroupInstance.InvestorGroupID);
                                        if (checkGroup)
                                        {
                                            if (tempOpenTrade.Symbol == null || tempOpenTrade.Investor == null || tempOpenTrade.IGroupSecurity == null || tempOpenTrade.Type == null)
                                                return StringResult = subValue[0] + "$" + false;

                                            #region INSERT SYSTEM LOG
                                            //'2222': account '9720467', delete order #11232898 buy 1.00 EURUSD at 1.4474
                                            string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Size.ToString(), 2);
                                            string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.OpenPrice.ToString(), tempOpenTrade.Symbol.Digit);
                                            string comment = "[manager delete command]";
                                            string type = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(tempOpenTrade.Type.ID);

                                            string content = "'" + code + "': account '" + tempOpenTrade.Investor.Code + "' delete order #" + tempOpenTrade.CommandCode +
                                                " " + type + " " + size + " " + tempOpenTrade.Symbol.Name + " at " + openPrice;

                                            TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                            #endregion

                                            Result = TradingServer.Facade.FacadeDeleteOpenTradeByManager(CommandID);
                                            if (Result)
                                                StringResult = subValue[0] + "$" + Result + ",MCM001";
                                            else StringResult = subValue[0] + "$" + Result + ",MCM004";
                                        }
                                        else
                                        {
                                            StringResult = subValue[0] + "$" + false + ",MCM006";
                                            string content = "'" + code + "': manager delete command failed(not enough rights)";
                                            string comment = "[manager delete command]";
                                            TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                        }
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false + ",MCM006";
                                        string content = "'" + code + "': manager delete command failed(not enough rights)";
                                        string comment = "[manager delete command]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$" + false + ",MCM005";
                                    string content = "'" + code + "': manager delete command failed(invalid ip)";
                                    string comment = "[manager delete command]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                }
                            }
                            break;
                        #endregion

                        #region DELETE ORDER IN DATABASE
                        case "DeleteOrder":
                            {
                                string[] subParameter = subValue[1].Split(',');
                                bool Result = false;
                                if (subParameter.Length == 2)
                                {
                                    int DealID = int.Parse(subParameter[0]);
                                    int InvestorID = int.Parse(subParameter[1]);
                                    switch (subParameter[1])
                                    {
                                        case "OPT001":
                                            Result = TradingServer.Facade.FacadeDeleteOpenTradeByID(DealID);

                                            if (Result)
                                            {
                                                TradingServer.Facade.FacadeRemoveOpenTradeInInvestorList(DealID, InvestorID);
                                            }
                                            break;
                                        case "CMH01":
                                            Result = TradingServer.Facade.FacadeDeleteCommandHistory(DealID);
                                            break;
                                        case "IAL01":
                                            Result = TradingServer.Facade.FacadeDeleteInvestorAccountLog(DealID);
                                            break;
                                    }
                                }

                                StringResult = subValue[0] + "$" + Result;
                            }
                            break;
                        #endregion

                        #region DELETE MARKET CONFIG(DELETE HOLIDAY)
                        case "DeleteMarketConfig":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool result = false;
                                    int marketConfigID = -1;
                                    int.TryParse(subValue[1], out marketConfigID);
                                    result = TradingServer.Facade.FacadeDeleteMarketConfig(marketConfigID);

                                    StringResult = subValue[0] + "$" + result;
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        //Command Update
                        //
                        #region Update Investor Group(LOG)
                        case "UpdateInvestorGroup":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool resultUpdate = false;
                                    Business.InvestorGroup Result = new InvestorGroup();
                                    Result = this.ExtractInvestorGroup(subValue[1]);
                                    resultUpdate = Facade.FacadeUpdateInvestorGroup(Result);

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': group config added/changed ['test-duc']
                                    //string status = "[Failed]";

                                    if (resultUpdate)
                                    {
                                        TradingServer.Facade.FacadeCheckUpdateGroupVirtualDealerOnline();
                                        //status = "[Success]";
                                    }

                                    //string content = "'" + code + "': group config added/changed ['" + Result.Name + "'] " + status;
                                    //string comment = "[update group]";
                                    //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    #endregion

                                    if (resultUpdate)
                                    {
                                        //SEND NOTIFY TO MANAGER
                                        Facade.FacadeSendNoticeManagerChangeGroup(1, Result.InvestorGroupID);

                                        //SEND NOTIFY TO AGENT SERVER
                                        Business.AgentNotify newAgentNotify = new AgentNotify();
                                        newAgentNotify.NotifyMessage = "UpdateGroup$" + Result.InvestorGroupID;
                                        TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, Result);
                                    }
                                    StringResult = subValue[0] + "$" + resultUpdate.ToString();
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Update Investor Group Config
                        case "UpdateInvestorGroupConfig":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool ResultUpdate = false;
                                    List<Business.ParameterItem> Result = new List<ParameterItem>();
                                    Result = this.ExtractParameterItem(subValue[1]);
                                    ResultUpdate = Facade.FacadeUpdateInvestorGroupConfig(Result, ipAddress, code);

                                    if (ResultUpdate)
                                    {
                                        //SEND NOTIFY TO MANAGER
                                        Facade.FacadeSendNoticeManagerChangeGroup(2, Result[0].SecondParameterID);

                                        //SEND NOTIFY TO AGENT SERVER
                                        if (Business.Market.InvestorGroupList != null)
                                        {
                                            int count = Business.Market.InvestorGroupList.Count;
                                            for (int i = 0; i < count; i++)
                                            {
                                                if (Business.Market.InvestorGroupList[i].InvestorGroupID == Result[0].SecondParameterID)
                                                {
                                                    Business.AgentNotify newAgentNotify = new AgentNotify();
                                                    newAgentNotify.NotifyMessage = "UpdateGroup$" + Business.Market.InvestorGroupList[i].InvestorGroupID;
                                                    TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, Business.Market.InvestorGroupList[i]);
                                                }
                                            }
                                        }

                                        //SEND NOTIFY TO CLIENT
                                        TradingServer.Business.Market.SendNotifyToClient("UIG69345", 1, Result[0].SecondParameterID);
                                    }

                                    StringResult = subValue[0] + "$" + ResultUpdate.ToString();
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Update IGroupSymbol
                        case "UpdateIGroupSymbol":
                            {
                                bool resultUpdate = false;
                                List<Business.IGroupSymbol> Result = new List<IGroupSymbol>();
                                Result = this.ExtractIGroupSymbol(subValue[1]);
                                if (Result != null)
                                {
                                    int countResult = Result.Count;
                                    for (int j = 0; j < countResult; j++)
                                    {
                                        resultUpdate = Facade.FacadeUpdateIGroupSymbol(Result[j].IGroupSymbolID, Result[j].SymbolID, Result[j].InvestorGroupID);
                                    }

                                    StringResult = subValue[0] + "$" + resultUpdate.ToString();
                                }
                            }
                            break;
                        #endregion

                        #region Update IGroupSecurity
                        case "UpdateIGroupSecurity":
                            {
                                bool resultUpdate = false;
                                List<Business.IGroupSecurity> Result = new List<IGroupSecurity>();
                                Result = this.ExtractIGroupSecurity(subValue[1]);
                                if (Result != null)
                                {
                                    int countResult = Result.Count;
                                    for (int j = 0; j < countResult; j++)
                                    {
                                        resultUpdate = Facade.FacadeUpdateIGroupSecurity(Result[j].IGroupSecurityID, Result[j].SecurityID, Result[j].InvestorGroupID);
                                    }

                                    StringResult = subValue[0] + "$" + resultUpdate.ToString();
                                }
                            }
                            break;
                        #endregion

                        #region Update Security(LOG)
                        case "UpdateSecurity":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool ResultUpdate = false;
                                    if (!string.IsNullOrEmpty(subValue[1]))
                                    {
                                        string[] subParameter = subValue[1].Split(',');
                                        int MarketAreaID = -1;
                                        int.TryParse(subParameter[3], out MarketAreaID);
                                        if (subParameter.Length > 0)
                                        {
                                            int SecurityID = 0;
                                            int.TryParse(subParameter[0], out SecurityID);
                                            ResultUpdate = TradingServer.Facade.FacadeUpdateSecurity(SecurityID, subParameter[1], subParameter[2], MarketAreaID);

                                            #region INSERT SYSTEM LOG
                                            //INSERT SYSTEM LOG
                                            //'2222': group config added/changed ['test-duc']
                                            string status = "[Failed]";

                                            if (ResultUpdate)
                                                status = "[Success]";

                                            string content = "'" + code + "': security config added/changed ['" + subParameter[1] + "'] " + status;
                                            string comment = "[update security]";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                            #endregion
                                        }
                                    }

                                    StringResult = subValue[0] + "$" + ResultUpdate.ToString();
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Update Symbol(LOG)
                        case "UpdateSymbol":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool resultUpdate = false;
                                    if (!string.IsNullOrEmpty(subValue[1]))
                                    {
                                        string[] subParameter = subValue[1].Split(',');
                                        if (subParameter.Length > 0)
                                        {
                                            int SymbolID = 0;
                                            int SecurityID = 0;
                                            int RefSymbolID = 0;
                                            int MarketAreaID = 0;

                                            int.TryParse(subParameter[0], out SymbolID);
                                            int.TryParse(subParameter[1], out SecurityID);
                                            int.TryParse(subParameter[2], out RefSymbolID);
                                            int.TryParse(subParameter[3], out MarketAreaID);

                                            //Call Function Update New Symbol
                                            resultUpdate = TradingServer.Facade.FacadeUpdateSymbol(SymbolID, SecurityID, RefSymbolID, MarketAreaID, subParameter[4]);

                                            #region INSERT SYSTEM LOG
                                            //INSERT SYSTEM LOG
                                            //'2222': group config added/changed ['test-duc']
                                            string status = "[Failed]";

                                            if (resultUpdate)
                                            {
                                                status = "[Success]";
                                                TradingServer.Facade.FacadeCheckUpdateGroupVirtualDealerOnline();
                                            }
                                            string content = "'" + code + "': symbol config added/changed ['" + subParameter[4] + "'] " + status;
                                            string comment = "[update symbol]";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                            #endregion

                                            if (resultUpdate)
                                            {
                                                Facade.FacadeSendNoticeManagerChangeSymbol(1, SymbolID);

                                                //SEND COMMAND TO AGENT SERVER
                                                Business.AgentNotify newAgentNotify = new AgentNotify();
                                                newAgentNotify.NotifyMessage = "UpdateSymbol$" + SymbolID;
                                                TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify);
                                            }

                                            StringResult = subValue[0] + "$" + resultUpdate.ToString();
                                        }
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Update TradingConfig(SymbolConfig)
                        case "UpdateTradingConfig":
                            {
                                bool resultUpdate = false;
                                List<Business.ParameterItem> Result = new List<ParameterItem>();
                                //CALL FUNCTION EXTRACT PARAMETER ITEM ONE
                                Result = this.ExtractParameterItem(subValue[1]);
                                int countResult = Result.Count;
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    if (countResult > 0)
                                    {
                                        //for (int j = 0; j < countResult; j++)
                                        //{
                                        //    resultUpdate = Facade.FacadeUpdateTradingConfig(Result[j]);
                                        //}

                                        resultUpdate = Facade.FacadeUpdateTradingConfig(Result, code, ipAddress);
                                        //string status = "[Failed]";
                                        if (resultUpdate)
                                        {
                                            //status = "[Success]";
                                            //SEND NOTITY TO MANAGER
                                            Facade.FacadeSendNoticeManagerChangeSymbol(2, Result[0].SecondParameterID);

                                            //SEND NOTIFY TO CLIENT
                                            TradingServer.Business.Market.SendNotifyToClient("UTC534345", 2, Result[0].SecondParameterID);
                                        }

                                        #region LOG(Duc Comment because in file ParameterItem.TradingConfg have log details)
                                        //string symbol = "", spreadDefault = "", spreadBalanace = "", stops = "", execution = "";
                                        //for (int i = Market.SymbolList.Count - 1; i >= 0; i--)
                                        //{
                                        //    if (Result[0].SecondParameterID == Market.SymbolList[i].SymbolID)
                                        //    {
                                        //        symbol = Market.SymbolList[i].Name;
                                        //        break;
                                        //    }
                                        //}
                                        //for (int i = 0; i < Result.Count; i++)
                                        //{
                                        //    if (Result[i].Code == "S006")
                                        //    {
                                        //        execution = Result[i].StringValue;
                                        //    }
                                        //    if (Result[i].Code == "S015")
                                        //    {
                                        //        stops = Result[i].NumValue;
                                        //    }
                                        //    if (Result[i].Code == "S013")
                                        //    {
                                        //        spreadDefault = Result[i].NumValue;
                                        //    }
                                        //    if (Result[i].Code == "S016")
                                        //    {
                                        //        spreadDefault = Result[i].StringValue;
                                        //    }
                                        //}
                                        ////'2222': EURUSD5 - spread: 1 / 2, stops: 15, execution: Market
                                        //string content = "'" + code + "': " + symbol + " spread default: " + spreadDefault + ", spread balance: " + spreadBalanace
                                        //    + ", stops: " + stops + ", execution: " + execution + status;
                                        //string comment = "[update symbol]";
                                        //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        #endregion
                                    }
                                    StringResult = subValue[0] + "$" + resultUpdate.ToString();
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                    if (countResult > 0)
                                    {
                                        #region LOG(Duc Comment because in file parameteritem.tradingconfig have log details)
                                        //string symbol = "", spreadDefault = "", spreadBalanace = "", stops = "", execution = "";
                                        //for (int i = Market.SymbolList.Count - 1; i >= 0; i--)
                                        //{
                                        //    if (Result[0].SecondParameterID == Market.SymbolList[i].SymbolID)
                                        //    {
                                        //        symbol = Market.SymbolList[i].Name;
                                        //        break;
                                        //    }
                                        //}
                                        //for (int i = 0; i < Result.Count; i++)
                                        //{
                                        //    if (Result[i].Code == "S006")
                                        //    {
                                        //        execution = Result[i].StringValue;
                                        //    }
                                        //    if (Result[i].Code == "S015")
                                        //    {
                                        //        stops = Result[i].NumValue;
                                        //    }
                                        //    if (Result[i].Code == "S013")
                                        //    {
                                        //        spreadDefault = Result[i].NumValue;
                                        //    }
                                        //    if (Result[i].Code == "S016")
                                        //    {
                                        //        spreadDefault = Result[i].StringValue;
                                        //    }
                                        //}
                                        ////'2222': EURUSD5 - spread: 1 / 2, stops: 15, execution: Market
                                        //string content = "'" + code + "': " + symbol + " spread default: " + spreadDefault + ", spread balance: " + spreadBalanace
                                        //    + ", stops: " + stops + ", execution: " + execution + " failed(invalid ip)";
                                        //string comment = "[update symbol]";
                                        //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        #endregion
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region UPDATE MARKET CONFIG
                        case "UpdateMarketConfig":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool resultUpdate = false;
                                    List<Business.ParameterItem> Result = new List<ParameterItem>();
                                    Result = this.ExtractParameterItem(subValue[1]);
                                    resultUpdate = TradingServer.Facade.FacadeUpdateMarketConfig(Result, ipAddress, code);
                                    //int countResult = Result.Count;
                                    //for (int j = 0; j < countResult; j++)
                                    //{
                                    //    resultUpdate = TradingServer.Facade.FacadeUpdateMarketConfig(Result[j]);

                                    //    #region INSERT SYSTEM LOG
                                    //    //INSERT SYSTEM LOG
                                    //    //'2222': symbol config added/changed ['XAUUSD']
                                    //    string content = "'" + code + "': market config added/changed ['" + Result[j].Name + "'] ";
                                    //    string comment = "[update market]";
                                    //    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    //    #endregion
                                    //}

                                    StringResult = subValue[0] + "$" + resultUpdate;
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Update SecurityConfig
                        case "UpdateSecurityConfig":
                            {
                                bool ResultUpdate = false;
                                List<Business.ParameterItem> Result = new List<ParameterItem>();
                                Result = this.ExtractParameterItem(subValue[1]);

                                int countResult = Result.Count;
                                for (int j = 0; j < countResult; j++)
                                {
                                    ResultUpdate = Facade.FacadeUpdateSecurityConfig(Result[j]);
                                }

                                StringResult = subValue[0] + "$" + ResultUpdate.ToString();
                            }
                            break;
                        #endregion

                        #region Update Investor(LOG)
                        case "UpdateInvestor":
                            {
                                bool resultUpdate = false;
                                bool resultUpdateProfile = false;
                                Business.Investor Result = new Investor();
                                Result = this.ExtractionInvestor(subValue[1]);
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool checkRule = Facade.FacadeCheckPermitAccountManagerAndAdmin(code);
                                    bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, Result.InvestorGroupInstance.InvestorGroupID);
                                    if (checkRule && checkGroup)
                                    {
                                        //resultUpdate = TradingServer.Facade.FacadeUpdateInvestor(Result);
                                        resultUpdate = TradingServer.Facade.FacadeUpdateInvestor(Result, ipAddress, code);
                                        //resultUpdateProfile = TradingServer.Facade.FacadeUpdateInvestorProfile(Result);
                                        if (resultUpdate)
                                        {
                                            resultUpdateProfile = TradingServer.Facade.FacadeUpdateInvestorProfile(Result, ipAddress, code);

                                            if (Result.PrimaryPwd != "") resultUpdate = TradingServer.Facade.FacadeUpdatePasswordByCode(Result.Code, Result.PrimaryPwd);
                                            if (Result.ReadOnlyPwd != "") resultUpdate = TradingServer.Facade.FacadeUpdateReadPwdByCode(Result.Code, Result.ReadOnlyPwd);
                                            if (Result.PhonePwd != "") resultUpdate = TradingServer.Facade.FacadeUpdatePhonePwdByCode(Result.Code, Result.PhonePwd);

                                            //SEND COMMAND TO AGENT SERVER
                                            Business.AgentNotify newAgentNotify = new AgentNotify();
                                            newAgentNotify.NotifyMessage = "UpdateInvestorNotify$" + Result.InvestorID;
                                            TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, Result.InvestorGroupInstance);
                                        }

                                        StringResult = subValue[0] + "$" + resultUpdate.ToString();

                                        #region INSERT SYSTEM LOG
                                        ////INSERT SYSTEM LOG
                                        /////'2222': account '9720467' has been updated
                                        //string status = "[Failed]";

                                        //if (resultUpdate)
                                        //    status = "[Success]";

                                        //string content = "'" + code + "': account '" + Result.Code + "' has been updated " + status;
                                        //string comment = "[update account]";
                                        //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        #endregion
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$MCM006";
                                        string content = "'" + code + "': account '" + Result.Code + "' has been updated failed(not enough rights)";
                                        string comment = "[update account]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$" + "MCM005";
                                    string content = "'" + code + "': account '" + Result.Code + "' has been updated failed(invalid ip)";
                                    string comment = "[update account]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                }
                            }
                            break;
                        #endregion

                        #region UPDATE PASSWORD BY CODE(LOG)
                        case "UpdatePasswordByCode":
                            {
                                string[] subParameter = subValue[1].Split(',');

                                bool resultUpdate = TradingServer.Facade.FacadeUpdatePasswordByCode(subParameter[0], subParameter[1]);

                                #region INSERT SYSTEM LOG
                                //INSERT SYSTEM LOG
                                ///'2222': account '9720467' change password failed
                                string status = "[Failed]";

                                if (resultUpdate)
                                    status = "[Success]";

                                string content = "'" + code + "': account '" + subParameter[0] + "' change master password " + status;
                                string comment = "[change password]";
                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                #endregion

                                StringResult = subValue[0] + "$" + resultUpdate;
                            }
                            break;
                        #endregion

                        #region UPDATE READ PASSWORD BY CODE(LOG)
                        case "UpdateReadPwdByCode":
                            {
                                string[] subParameter = subValue[1].Split(',');

                                bool resultUpdate = TradingServer.Facade.FacadeUpdateReadPwdByCode(subParameter[0], subParameter[1]);

                                #region INSERT SYSTEM LOG
                                //INSERT SYSTEM LOG
                                ///'2222': account '9720467' change password failed
                                string status = "[Failed]";

                                if (resultUpdate)
                                    status = "[Success]";

                                string content = "'" + code + "': account '" + subParameter[0] + "' change read password " + status;
                                string comment = "[change password]";
                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                #endregion

                                StringResult = subValue[0] + "$" + resultUpdate;
                            }
                            break;
                        #endregion

                        #region UPDATE PHONE PASSWORD(LOG)
                        case "UpdatePhonePwdByCode":
                            {
                                string[] subParameter = subValue[1].Split(',');
                                bool resultUpdate = TradingServer.Facade.FacadeUpdatePhonePwdByCode(subParameter[0], subParameter[1]);

                                #region INSERT SYSTEM LOG
                                //INSERT SYSTEM LOG
                                ///'2222': account '9720467' change password failed
                                string status = "[Failed]";

                                if (resultUpdate)
                                    status = "[Success]";

                                string content = "'" + code + "': account '" + subParameter[0] + "' change phone password " + status;
                                string comment = "[change password]";
                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                #endregion

                                StringResult = subValue[0] + "$" + resultUpdate;
                            }
                            break;
                        #endregion

                        #region Update Agent(LOG)
                        case "UpdateAgent":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool resultUpdate = false;
                                    Business.Agent Result = new Agent();
                                    Result = this.ExtractionAgent(subValue[1]);
                                    resultUpdate = TradingServer.Facade.FacadeUpdateAgent(Result);
                                    if (Result.Pwd != "") resultUpdate = TradingServer.Facade.FacadeUpdatePasswordByCode(Result.Code, Result.Pwd);

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': manager configuration has been changed
                                    string status = "[Failed]";

                                    if (resultUpdate)
                                        status = "[Success]";

                                    string content = "'" + code + "': manager configuration has been changed " + status;
                                    string comment = "[update agent]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    #endregion

                                    StringResult = subValue[0] + "$" + resultUpdate.ToString();
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                                break;
                            }
                        case "UpdatePasswordAgent":
                            {
                                bool resultUpdate = false;
                                bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                if (checkip)
                                {
                                    if (subValue[1] != "")
                                    {
                                        string[] tempArr = subValue[1].Split('{');
                                        if (tempArr.Length == 3)
                                        {
                                            int investorID = 0;
                                            int.TryParse(tempArr[0], out investorID);
                                            if (investorID > 0)
                                            {
                                                resultUpdate = TradingServer.Facade.FacadeManagerChangePass(investorID,code, tempArr[1], tempArr[2]);
                                            }
                                        }
                                    }
                                    StringResult = subValue[0] + "$" + resultUpdate;
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                                #region INSERT SYSTEM LOG
                                //INSERT SYSTEM LOG
                                string content = "";
                                if (resultUpdate)
                                {
                                    content = "': manager update password [Success]";
                                }
                                else
                                {
                                    if (checkip)
                                    {
                                        content = "': manager update password [Failed]";
                                    }
                                    else
                                    {
                                        content = "': manager update password (invalid ip)[Failed]";
                                    }
                                }
                                string comment = "[update password agent]";
                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                #endregion
                                break;
                            }

                        #endregion

                        #region Update Alert
                        case "UpdateAlert":
                            {
                                bool resultUpdate = false;
                                Business.PriceAlert result = new PriceAlert();
                                #region Update Alert
                                string[] subParameter = subValue[1].Split(',');
                                if (subParameter.Length > 0)
                                {
                                    result.TickOnline = new Tick();
                                    result.Symbol = subParameter[0];
                                    result.Email = subParameter[1];
                                    result.PhoneNumber = subParameter[2];
                                    result.Value = double.Parse(subParameter[3]);
                                    #region ConditionAlert & ActionAlert
                                    switch (subParameter[4])
                                    {
                                        case "LargerBid":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.LargerBid;
                                                break;
                                            }
                                        case "LargerAsk":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.LargerAsk;
                                                break;
                                            }
                                        case "LargerHighBid":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.LargerHighBid;
                                                break;
                                            }
                                        case "LargerHighAsk":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.LargerHighAsk;
                                                break;
                                            }
                                        case "SmallerBid":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.SmallerBid;
                                                break;
                                            }
                                        case "SmallerAsk":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.SmallerAsk;
                                                break;
                                            }
                                        case "SmallerLowBid":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.SmallerLowBid;
                                                break;
                                            }
                                        case "SmallerLowAsk":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.SmallerLowAsk;
                                                break;
                                            }
                                    }
                                    switch (subParameter[5])
                                    {
                                        case "Email":
                                            {
                                                result.AlertAction = Business.ActionAlert.Email;
                                                break;
                                            }
                                        case "SMS":
                                            {
                                                result.AlertAction = Business.ActionAlert.SMS;
                                                break;
                                            }
                                        case "Sound":
                                            {
                                                result.AlertAction = Business.ActionAlert.Sound;
                                                break;
                                            }
                                    }
                                    #endregion
                                    result.IsEnable = bool.Parse(subParameter[6]);
                                    result.InvestorID = int.Parse(subParameter[7]);
                                    result.DateCreate = DateTime.Parse(subParameter[8]);
                                    result.DateActive = result.DateCreate;
                                    result.Notification = subParameter[9];
                                    result.ID = int.Parse(subParameter[10]);
                                }
                                #endregion
                                resultUpdate = TradingServer.Facade.FacadeUpdateAlert(result);
                                StringResult = subValue[0] + "$" + resultUpdate.ToString();
                            }
                            break;
                        case "ConfigAlert":
                            {
                                bool resultUpdate = false;
                                Business.PriceAlert result = new PriceAlert();
                                #region Update Alert
                                string[] subParameter = subValue[1].Split('{');
                                if (subParameter.Length > 0)
                                {
                                    result.TickOnline = new Tick();
                                    result.Symbol = subParameter[0];
                                    result.Email = subParameter[1];
                                    result.PhoneNumber = subParameter[2];
                                    result.Value = double.Parse(subParameter[3]);
                                    #region ConditionAlert & ActionAlert
                                    switch (subParameter[4])
                                    {
                                        case "LargerBid":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.LargerBid;
                                                break;
                                            }
                                        case "LargerAsk":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.LargerAsk;
                                                break;
                                            }
                                        case "LargerHighBid":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.LargerHighBid;
                                                break;
                                            }
                                        case "LargerHighAsk":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.LargerHighAsk;
                                                break;
                                            }
                                        case "SmallerBid":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.SmallerBid;
                                                break;
                                            }
                                        case "SmallerAsk":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.SmallerAsk;
                                                break;
                                            }
                                        case "SmallerLowBid":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.SmallerLowBid;
                                                break;
                                            }
                                        case "SmallerLowAsk":
                                            {
                                                result.AlertCondition = Business.ConditionAlert.SmallerLowAsk;
                                                break;
                                            }
                                    }
                                    switch (subParameter[5])
                                    {
                                        case "Email":
                                            {
                                                result.AlertAction = Business.ActionAlert.Email;
                                                break;
                                            }
                                        case "SMS":
                                            {
                                                result.AlertAction = Business.ActionAlert.SMS;
                                                break;
                                            }
                                        case "Sound":
                                            {
                                                result.AlertAction = Business.ActionAlert.Sound;
                                                break;
                                            }
                                    }
                                    #endregion
                                    result.IsEnable = bool.Parse(subParameter[6]);
                                    result.InvestorID = int.Parse(subParameter[7]);
                                    result.DateCreate = DateTime.Parse(subParameter[8]);
                                    result.DateActive = result.DateCreate;
                                    result.Notification = subParameter[9];
                                    result.ID = int.Parse(subParameter[10]);
                                }
                                #endregion
                                resultUpdate = TradingServer.Facade.FacadeUpdateAlert(result);
                                if (resultUpdate)
                                {
                                    StringResult = subValue[0] + "$" + result.ID + "{" + result.Symbol + "{" + result.Email + "{" + result.PhoneNumber + "{" +
                                    result.Value + "{" + result.AlertCondition + "{" + result.AlertAction + "{" + result.IsEnable + "{" +
                                    result.DateCreate + "{" + result.DateActive + "{" + result.InvestorID + "{" + result.Notification;
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$";
                                }

                            }
                            break;
                        #endregion

                        #region Update Mail
                        case "UpdateMailStatus":
                            {
                                string[] subParameter = subValue[1].Split(',');
                                if (subParameter.Length > 0)
                                {
                                    bool isNew = bool.Parse(subParameter[0]);
                                    int mailID = int.Parse(subParameter[1]);
                                    TradingServer.Facade.UpdateInternalMailStatus(isNew, mailID);
                                }
                                StringResult = subValue[0] + "$";
                            }
                            break;
                        #endregion

                        #region UPDATE(RESET) USERCONFIG IPHONE, IPAD, SIVERLIGHT
                        case "AdminResetUserConfig":
                            {
                                int investorID = int.Parse(subValue[1]);

                                bool isUpdate = Investor.DBWInvestorInstance.UpdateAllUserConfig("", "", "", investorID);

                                if (isUpdate)
                                {
                                    if (Business.Market.InvestorList != null)
                                    {
                                        int count = Business.Market.InvestorList.Count;
                                        for (int i = 0; i < count; i++)
                                        {
                                            if (Business.Market.InvestorList[i].InvestorID == investorID)
                                            {
                                                Business.Market.InvestorList[i].UserConfig = "";
                                                Business.Market.InvestorList[i].UserConfigIpad = "";
                                                Business.Market.InvestorList[i].UserConfigIphone = "";

                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region Update Permit(LOG)
                        case "UpdatePermit":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool resultUpdate = false;
                                    int AgentID = -1;
                                    int RoleID = -1;
                                    List<int> ListRoleID = new List<int>();
                                    string[] subParameter = subValue[1].Split(',');
                                    int count = subParameter.Length;
                                    if (count > 0)
                                    {
                                        int.TryParse(subParameter[0], out AgentID);
                                        for (int i = 1; i < count; i++)
                                        {
                                            int.TryParse(subParameter[i], out RoleID);
                                            ListRoleID.Add(RoleID);
                                        }
                                    }
                                    resultUpdate = TradingServer.Facade.FacadeUpdatePermit(AgentID, ListRoleID);

                                    #region INSERT SYSTEM LOG
                                    ////INSERT SYSTEM LOG
                                    ////'2222': manager configuration has been changed
                                    //string status = "[uncomplete]";

                                    //if (resultUpdate)
                                    //    status = "[complete]";

                                    //string content = "'" + code + "': manager configuration has been changed " + status;
                                    //string comment = "[update agent]";
                                    //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    #endregion

                                    Facade.FacadeSendNoticeManagerChangeAgent(3, AgentID);
                                    StringResult = subValue[0] + "$" + resultUpdate.ToString();
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Update IAgentSecurity
                        case "UpdateIAgentSecurity":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    if (!string.IsNullOrEmpty(subValue[1]))
                                    {
                                        bool resultUpdate = false;
                                        List<Business.IAgentSecurity> newListIAgentSecurity = new List<IAgentSecurity>();
                                        newListIAgentSecurity = this.ExtractionIAgentSecurity(subValue[1]);
                                        resultUpdate = TradingServer.Facade.FacadeUpdateIAgentSecurity(newListIAgentSecurity);
                                        StringResult = subValue[0] + "$" + resultUpdate.ToString();
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Update IAgentGroup
                        case "UpdateIAgentGroup":
                            {
                                if (!string.IsNullOrEmpty(subValue[1]))
                                {
                                    bool resultUpdate = false;
                                    int AgentID = -1;
                                    int InvestorGroupID = -1;
                                    string[] subParameter = subValue[1].Split(',');
                                    int count = subParameter.Length;
                                    List<int> ListInvestorID = new List<int>();
                                    if (count > 0)
                                    {
                                        int.TryParse(subParameter[0], out AgentID);
                                        for (int i = 1; i < count; i++)
                                        {
                                            int.TryParse(subParameter[i], out InvestorGroupID);
                                            ListInvestorID.Add(InvestorGroupID);
                                        }
                                    }
                                    resultUpdate = TradingServer.Facade.FacadeUpdateIAgentGroup(AgentID, ListInvestorID);
                                    Facade.FacadeSendNoticeManagerChangeAgent(2, AgentID);
                                    StringResult = subValue[0] + "$" + resultUpdate.ToString();
                                }
                            }
                            break;
                        #endregion

                        #region Update Investor Profile
                        case "UpdateInvestorProfile":
                            {
                                //Business.InvestorProfile Result = new InvestorProfile();
                                //Result = this.ExtractInvestorProfile(subValue[1]);
                                //TradingServer.Facade.FacadeUpdateInvestorProfile(Result);
                                StringResult = "";
                            }
                            break;
                        #endregion

                        #region Update IGroupSecurityConfig
                        case "UpdateIGroupSecurityConfig":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool resultUpdate = false;
                                    List<Business.ParameterItem> Result = new List<ParameterItem>();
                                    Result = this.ExtractParameterItem(subValue[1]);

                                    int countResult = Result.Count;
                                    for (int j = 0; j < countResult; j++)
                                    {
                                        resultUpdate = Facade.FacadeUpdateIGroupSecurityConfig(Result[j]);
                                    }

                                    Business.Market.SendNotifyToClient("USTC0532434", 2, -1);

                                    StringResult = subValue[0] + "$" + resultUpdate.ToString();
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Update IGroupSymbolConfig
                        case "UpdateIGroupSymbolConfig":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool resultUpdate = false;
                                    List<Business.ParameterItem> Result = new List<ParameterItem>();
                                    Result = this.ExtractParameterItem(subValue[1]);

                                    int countResult = Result.Count;
                                    for (int j = 0; j < countResult; j++)
                                    {
                                        resultUpdate = Facade.FacadeUpdateIGroupSymbolConfig(Result[j]);
                                    }
                                    StringResult = subValue[0] + "$" + resultUpdate.ToString();
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region Update Online Command(Open Trade)(LOG)
                        case "UpdateOnlineCommandByManager":
                            {
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code);
                                    if (checkRule)
                                    {
                                        string[] subParameter = subValue[1].Split(',');
                                        if (subParameter.Length == 13)
                                        {
                                            #region MapValue
                                            int InvestorID = -1;
                                            int CommandID = -1;
                                            double Commission = -1;
                                            DateTime ExpTime;
                                            double OpenPrice = -1;
                                            DateTime OpenTime;
                                            double StopLoss = -1;
                                            double Swap = -1;
                                            double TakeProfit = -1;
                                            double taxes = 0;
                                            double agentCommission = 0;

                                            int.TryParse(subParameter[0], out InvestorID);
                                            int.TryParse(subParameter[1], out CommandID);
                                            double.TryParse(subParameter[2], out Commission);

                                            DateTime.TryParse(subParameter[3], out ExpTime);
                                            double.TryParse(subParameter[4], out OpenPrice);
                                            DateTime.TryParse(subParameter[5], out OpenTime);
                                            double.TryParse(subParameter[6], out StopLoss);
                                            double.TryParse(subParameter[7], out Swap);
                                            double.TryParse(subParameter[8], out TakeProfit);
                                            double.TryParse(subParameter[10], out taxes);
                                            //comment
                                            //double.TryParse(subParameter[12], out agentCommission);

                                            Business.OpenTrade tempOpenTrade = new OpenTrade();
                                            tempOpenTrade = TradingServer.Facade.FacadeFindOpenTradeInCommandEx(CommandID);

                                            string strOpenPriceBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.OpenPrice.ToString(), tempOpenTrade.Symbol.Digit);
                                            string strTakeProfitBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.TakeProfit.ToString(), 2);
                                            string strStopLossBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.StopLoss.ToString(), 2);
                                            string strCommissionBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Commission.ToString(), 2);
                                            string strAgentCommissionBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.AgentCommission.ToString(), 2);
                                            string strSwapBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Swap.ToString(), 2);
                                            #endregion
                                            bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempOpenTrade.Investor.InvestorGroupInstance.InvestorGroupID);
                                            if (checkGroup)
                                            {
                                                bool ResultUpdate = false;
                                                ResultUpdate = TradingServer.Facade.FacadeUpdateOnlineCommand(InvestorID, CommandID, Commission, ExpTime, OpenPrice, OpenTime,
                                                    StopLoss, Swap, TakeProfit, subParameter[9], taxes, subParameter[11], agentCommission, tempOpenTrade.Size);
                                                if (ResultUpdate)
                                                    StringResult = subValue[0] + "$" + ResultUpdate + "," + "MCM001";
                                                else StringResult = subValue[0] + "$" + ResultUpdate + "," + "MCM004";

                                                Business.Investor tempInvestor = new Investor();
                                                tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(InvestorID);

                                                #region INSERT SYSTEM LOG
                                                //'2222': account '9789300', modify order #11346382 sell 1.00 XAUUSD at 1504.85 sl: 1506.55 tp: 1503.85
                                                //INSERT SYSTEM LOG
                                                if (ResultUpdate)
                                                {
                                                    string comment = "[update order]";
                                                    string mode = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(tempOpenTrade.Type.ID);
                                                    string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Size.ToString(), 2);
                                                    string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(OpenPrice.ToString(), tempOpenTrade.Symbol.Digit);
                                                    string stopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(StopLoss.ToString(), tempOpenTrade.Symbol.Digit);
                                                    string takeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(TakeProfit.ToString(), tempOpenTrade.Symbol.Digit);
                                                    string strCommissionAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Commission.ToString(), 2);
                                                    string strAgentCommissionAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(agentCommission.ToString(), 2);
                                                    string strSwapAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Swap.ToString(), 2);

                                                    //string content = "'" + code + "': account '" + tempInvestor.Code + "' modify order #" + tempOpenTrade.CommandCode +
                                                    //    " " + mode + " " + size + " " + tempOpenTrade.Symbol.Name + " at " + openPrice + " sl: " + stopLoss + " tp: " + takeProfit;

                                                    string content = "'" + code + "': open order #" + tempOpenTrade.CommandCode + " for '" + tempInvestor.Code + "' modified - " +
                                                        mode + " " + size + " " + tempOpenTrade.Symbol.Name + " at " + strOpenPriceBefore + " - tp: " + strTakeProfitBefore + " - sl: " + strStopLossBefore +
                                                            " - cm: " + strCommissionBefore + " - sw: " + strSwapBefore + " -> " +
                                                            mode + " " + size + " " + tempOpenTrade.Symbol.Name + " at " + openPrice + " - tp: " + takeProfit + " - sl: " + stopLoss + " - cm: " +
                                                            strCommissionAfter + " - sw: " + strSwapAfter;

                                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                                }
                                                #endregion
                                            }
                                            else
                                            {
                                                StringResult = subValue[0] + "$" + false + "," + "MCM006";
                                                string content = "'" + code + "': update order failed(not enough rights)";
                                                string comment = "[update order]";
                                                TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                            }
                                        }
                                        else
                                        {
                                            StringResult = subValue[0] + "$" + false + "," + "MCM004";
                                        }
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false + "," + "MCM006";
                                        string content = "'" + code + "': update order failed(not enough rights)";
                                        string comment = "[update order]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$" + false + "," + "MCM005";
                                    string content = "'" + code + "': update order failed(invalid ip)";
                                    string comment = "[update order]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                }
                            }
                            break;
                        #endregion

                        #region Update Candle Online
                        case "UpdateCandleOnline":
                            {
                                string[] subParameter = subValue[1].Split(',');
                                if (subParameter.Length > 0)
                                {
                                    int ID = -1;
                                    DateTime Time;
                                    int Volume = -1;
                                    double Open = -1;
                                    double Close = -1;
                                    double High = -1;
                                    double Low = -1;
                                    double openAsk = -1;
                                    double highAsk = -1;
                                    double lowAsk = -1;
                                    double closeAsk = -1;
                                    int TimeFrame = -1;

                                    int.TryParse(subParameter[0], out ID);
                                    DateTime.TryParse(subParameter[1], out Time);
                                    int.TryParse(subParameter[2], out Volume);
                                    double.TryParse(subParameter[3], out Open);
                                    double.TryParse(subParameter[4], out Close);
                                    double.TryParse(subParameter[5], out High);
                                    double.TryParse(subParameter[6], out Low);
                                    int.TryParse(subParameter[7], out TimeFrame);
                                    double.TryParse(subParameter[8], out openAsk);
                                    double.TryParse(subParameter[9], out highAsk);
                                    double.TryParse(subParameter[10], out lowAsk);
                                    double.TryParse(subParameter[11], out closeAsk);

                                    ProcessQuoteLibrary.Business.Candles objCandles = new ProcessQuoteLibrary.Business.Candles();
                                    objCandles.Close = Close;
                                    objCandles.CloseAsk = closeAsk;
                                    objCandles.High = High;
                                    objCandles.HighAsk = highAsk;
                                    objCandles.ID = ID;
                                    objCandles.Low = Low;
                                    objCandles.LowAsk = lowAsk;
                                    objCandles.Open = Open;
                                    objCandles.OpenAsk = openAsk;
                                    objCandles.Time = Time;
                                    objCandles.TimeFrame = TimeFrame;
                                    objCandles.Volume = Volume;

                                    bool ResultUpdate = false;
                                    ResultUpdate = ProcessQuoteLibrary.Business.QuoteProcess.UpdateCandleOnline(objCandles);

                                    //#region INSERT SYSTEM LOG
                                    ////INSERT SYSTEM LOG
                                    ////'2222': XAUUSD M1 1 bars updated
                                    //string status = "[uncomplete]";

                                    //if (ResultUpdate)
                                    //    status = "[complete]";

                                    //string content = "'" + code + "': " +  + status;
                                    //string comment = "[update agent]";
                                    //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    //#endregion

                                    StringResult = subValue[0] + "$" + ResultUpdate;
                                }
                            }
                            break;
                        #endregion

                        #region UPDATE ORDER IN DATABASE(COMMENT)
                        case "UpdateOrderData":
                            {
                                string[] subParameter = subValue[1].Split(',');
                                bool Result = false;
                                Business.OpenTrade newOpenTrade = new OpenTrade();
                                if (subParameter.Length > 0)
                                {
                                    switch (subParameter[subParameter.Length - 1])
                                    {
                                        case "OPT001":
                                            {
                                                double closePrice = 0;
                                                double.TryParse(subParameter[0], out closePrice);
                                                bool resultUpdate = false;

                                                if (closePrice > 0)
                                                {
                                                    newOpenTrade = this.ConvertStringToOpenTrade(subParameter);
                                                    //resultUpdate = TradingServer.Facade.FacadeUpdateOnlineCommand(newOpenTrade.Investor.InvestorID, newOpenTrade.ID, newOpenTrade.Commission,
                                                    //    newOpenTrade.ExpTime, newOpenTrade.OpenPrice, newOpenTrade.OpenTime, newOpenTrade.StopLoss, newOpenTrade.Swap,
                                                    //    newOpenTrade.TakeProfit, newOpenTrade.Symbol.Name);
                                                }
                                                else
                                                {
                                                    newOpenTrade = this.ConvertStringToOpenTrade(subParameter);
                                                    if (newOpenTrade.Type.ID == 1 || newOpenTrade.Type.ID == 5 || newOpenTrade.Type.ID == 7 || newOpenTrade.Type.ID == 9 || newOpenTrade.Type.ID == 11)
                                                    {
                                                        newOpenTrade.ClosePrice = newOpenTrade.Symbol.TickValue.Bid;
                                                    }
                                                    else
                                                    {
                                                        newOpenTrade.ClosePrice = (Business.Symbol.ConvertNumberPip(newOpenTrade.Symbol.Digit, newOpenTrade.SpreaDifferenceInOpenTrade) + newOpenTrade.Symbol.TickValue.Ask);
                                                    }

                                                    //resultUpdate = TradingServer.Facade.FacadeUpdateOnlineCommand(newOpenTrade.Investor.InvestorID, newOpenTrade.ID, newOpenTrade.Commission,
                                                    //    newOpenTrade.ExpTime, newOpenTrade.OpenPrice, newOpenTrade.OpenTime, newOpenTrade.StopLoss, newOpenTrade.Swap,
                                                    //    newOpenTrade.TakeProfit, newOpenTrade.Symbol.Name);
                                                }

                                                if (resultUpdate)
                                                {
                                                    //MAP COMMAND UPDATE TO CLIENT
                                                    string Message = "UpdateCommand$True,UPDATE COMMAND COMPLETE," + newOpenTrade.ID + "," +
                                                                newOpenTrade.Investor.InvestorID + "," + newOpenTrade.Symbol.Name + "," +
                                                                newOpenTrade.Size + "," + false + "," + newOpenTrade.OpenTime + "," +
                                                                newOpenTrade.OpenPrice + "," + newOpenTrade.StopLoss + "," +
                                                                newOpenTrade.TakeProfit + "," + newOpenTrade.ClosePrice + "," +
                                                                newOpenTrade.Commission + "," + newOpenTrade.Swap + "," +
                                                                newOpenTrade.Profit + "," + "Comment," + newOpenTrade.ID + "," +
                                                                newOpenTrade.Type.Name + "," + 1 + "," + newOpenTrade.ExpTime + "," +
                                                                newOpenTrade.ClientCode + "," + newOpenTrade.CommandCode + "," +
                                                                newOpenTrade.IsHedged + "," + newOpenTrade.Type.ID + "," +
                                                                newOpenTrade.Margin + ",Update";
                                                }

                                                StringResult = subValue[0] + "$" + resultUpdate;
                                            }
                                            break;
                                        case "CMH01":
                                            {
                                                newOpenTrade = ConvertStringToOpenTrade(subParameter);
                                                bool resultUpdate = TradingServer.Facade.FacadeUpdateCommandHistory(newOpenTrade);

                                                StringResult = subValue[0] + "$" + resultUpdate;
                                            }
                                            break;
                                        case "IAL01":
                                            {
                                                Business.InvestorAccountLog newInvestorAccountLog = new InvestorAccountLog();
                                                int ID = 0;
                                                //deal ID
                                                int InvestorID = 0;
                                                //name
                                                DateTime Date;
                                                //comment
                                                double Amount = 0;
                                                //code
                                                int.TryParse(subParameter[0], out ID);
                                                int.TryParse(subParameter[2], out InvestorID);
                                                DateTime.TryParse(subParameter[4], out Date);
                                                double.TryParse(subParameter[6], out Amount);

                                                newInvestorAccountLog.ID = ID;
                                                newInvestorAccountLog.DealID = subParameter[1];
                                                newInvestorAccountLog.InvestorID = InvestorID;
                                                newInvestorAccountLog.Name = subParameter[3];
                                                newInvestorAccountLog.Date = Date;
                                                newInvestorAccountLog.Comment = subParameter[5];
                                                newInvestorAccountLog.Amount = Amount;
                                                newInvestorAccountLog.Code = subParameter[6];

                                                bool resultUpdate = TradingServer.Facade.FacadeUpdateInvestorAccountLog(newInvestorAccountLog);
                                                StringResult = subValue[0] + "$" + resultUpdate;
                                            }
                                            break;
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region UPDATE COMMAND HISTORY(UPDATE COMMAND HISTORY, UPDATE DEPOSIT....)
                        case "UpdateCommandHistory":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code);
                                    if (checkRule)
                                    {
                                        bool resultUpdate = false;
                                        string[] subParameter = subValue[1].Split(',');
                                        if (subParameter.Length == 18)
                                        {
                                            #region MAP STRING TO OBJECT
                                            Business.OpenTrade newOpenTrade = new OpenTrade();

                                            int commandTypeID, commandHistoryID;
                                            DateTime openTime, closeTime, expTime;
                                            double openPrice, closePrice, profit, swap, commission, size, stopLoss, takeProfit, taxes, agentCommission;

                                            int.TryParse(subParameter[0], out commandTypeID);
                                            DateTime.TryParse(subParameter[1], out openTime);
                                            double.TryParse(subParameter[2], out openPrice);
                                            DateTime.TryParse(subParameter[3], out closeTime);
                                            double.TryParse(subParameter[4], out closePrice);
                                            double.TryParse(subParameter[5], out profit);
                                            double.TryParse(subParameter[6], out swap);
                                            double.TryParse(subParameter[7], out commission);
                                            DateTime.TryParse(subParameter[8], out expTime);
                                            double.TryParse(subParameter[9], out size);
                                            double.TryParse(subParameter[10], out stopLoss);
                                            double.TryParse(subParameter[11], out takeProfit);

                                            //int.TryParse(subParameter[12], out symbolID);
                                            double.TryParse(subParameter[13], out taxes);
                                            //string comment  = subparmeter[14]
                                            double.TryParse(subParameter[15], out agentCommission);
                                            int.TryParse(subParameter[16], out commandHistoryID);
                                            //string InvestorCode == .....

                                            newOpenTrade.AgentCommission = agentCommission;
                                            newOpenTrade.ClosePrice = closePrice;
                                            newOpenTrade.CloseTime = closeTime;
                                            newOpenTrade.Comment = subParameter[14];
                                            newOpenTrade.Commission = commission;
                                            newOpenTrade.ExpTime = expTime;
                                            newOpenTrade.ID = commandHistoryID;
                                            newOpenTrade.OpenPrice = openPrice;
                                            newOpenTrade.OpenTime = openTime;
                                            newOpenTrade.Type = new TradeType();
                                            newOpenTrade.Type.ID = commandTypeID;
                                            newOpenTrade.Profit = profit;
                                            newOpenTrade.Size = size;
                                            newOpenTrade.StopLoss = stopLoss;
                                            newOpenTrade.Swap = swap;
                                            newOpenTrade.TakeProfit = takeProfit;
                                            newOpenTrade.Taxes = taxes;

                                            newOpenTrade.Investor = TradingServer.Facade.FacadeFindInvestor(subParameter[17]);
                                            #endregion

                                            if (commandTypeID == 1 || commandTypeID == 2 || commandTypeID == 11 || commandTypeID == 12)
                                            {
                                                #region FILL INSTANT SYMBOL
                                                if (Business.Market.SymbolList != null)
                                                {
                                                    int countSymbol = Business.Market.SymbolList.Count;
                                                    for (int j = 0; j < countSymbol; j++)
                                                    {
                                                        if (Business.Market.SymbolList[j].Name.Trim() == subParameter[12].Trim())
                                                        {
                                                            newOpenTrade.Symbol = Business.Market.SymbolList[j];
                                                            break;
                                                        }
                                                    }
                                                }
                                                #endregion

                                                newOpenTrade.CalculatorProfitCommand(newOpenTrade);
                                                newOpenTrade.Profit = newOpenTrade.Symbol.ConvertCurrencyToUSD(newOpenTrade.Symbol.Currency, newOpenTrade.Profit, false, newOpenTrade.SpreaDifferenceInOpenTrade, newOpenTrade.Symbol.Digit);
                                                newOpenTrade.Profit = Math.Round(newOpenTrade.Profit, 2);
                                            }

                                            //resultUpdate = TradingServer.Facade.FacadeUpdateOnlineCommand(0, commandHistoryID, commission, expTime, openPrice, openTime, stopLoss,
                                            //    swap, takeProfit, subParameter[12], taxes, subParameter[14], agentCommission, size);

                                            Business.OpenTrade tempOpenTrade = TradingServer.Facade.FacadeGetCommandHistoryByCommandID(commandHistoryID);

                                            #region BUIL STRING CHANGER OF ORDER
                                            string change = string.Empty;
                                            string mode = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(tempOpenTrade.Type.ID);
                                            string strOpenPriceBefore = string.Empty;
                                            string strOpenPriceAfter = string.Empty;
                                            string strClosePriceBefore = string.Empty;
                                            string strClosePriceAfter = string.Empty;

                                            if (tempOpenTrade.Symbol != null)
                                            {
                                                strOpenPriceBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.OpenPrice.ToString(), tempOpenTrade.Symbol.Digit);
                                                strOpenPriceAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(openPrice.ToString(), tempOpenTrade.Symbol.Digit);
                                                strClosePriceBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.ClosePrice.ToString(), tempOpenTrade.Symbol.Digit);
                                                strClosePriceAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(closePrice.ToString(), tempOpenTrade.Symbol.Digit);
                                            }
                                            else
                                            {
                                                strOpenPriceBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.OpenPrice.ToString(), 5);
                                                strOpenPriceAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(openPrice.ToString(), 5);
                                                strClosePriceBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.ClosePrice.ToString(), 5);
                                                strClosePriceAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(closePrice.ToString(), 5);
                                            }

                                            string strStopLossBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.StopLoss.ToString(), 2);
                                            string strStopLossAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(stopLoss.ToString(), 2);
                                            string strTakeProfitBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.TakeProfit.ToString(), 2);
                                            string strTakeProfitAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(takeProfit.ToString(), 2);
                                            string strSwapBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Swap.ToString(), 2);
                                            string strSwapAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(swap.ToString(), 2);
                                            string strLotsBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Size.ToString(), 2);
                                            string strLotsAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(size.ToString(), 2);
                                            string strCommissionBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Commission.ToString(), 2);
                                            string strCommissionAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(commission.ToString(), 2);
                                            string strProfitBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Profit.ToString(), 2);
                                            string strProfitAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Profit.ToString(), 2);
                                            string strSize = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(size.ToString(), 2);
                                            #endregion

                                            #region UPDATE COMMAND IN DATABASE AND FIX BALANCE
                                            if (Business.Market.InvestorList != null)
                                            {
                                                int count = Business.Market.InvestorList.Count;
                                                for (int i = 0; i < count; i++)
                                                {
                                                    if (Business.Market.InvestorList[i].InvestorID == newOpenTrade.Investor.InvestorID)
                                                    {
                                                        double totalProfit = newOpenTrade.Profit + newOpenTrade.Commission + newOpenTrade.Swap;
                                                        double profitHistory = tempOpenTrade.Profit + tempOpenTrade.Commission + tempOpenTrade.Swap;
                                                        double deltaProfit = profitHistory - totalProfit;

                                                        bool isValid = false;
                                                        if (deltaProfit != 0)
                                                        {
                                                            #region SWITCH COMMAND TYPE
                                                            switch (tempOpenTrade.Type.ID)
                                                            {
                                                                case 13:
                                                                    {
                                                                        double tempBalance = Business.Market.InvestorList[i].Balance - deltaProfit;
                                                                        if (tempBalance > 0 && newOpenTrade.Profit > 0)
                                                                        {
                                                                            Business.Market.InvestorList[i].Balance -= deltaProfit;
                                                                            TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance);
                                                                            isValid = true;
                                                                        }
                                                                    }
                                                                    break;

                                                                case 14:
                                                                    {
                                                                        double tempBalance = Business.Market.InvestorList[i].Balance + deltaProfit;
                                                                        if (tempBalance > 0 && newOpenTrade.Profit > 0)
                                                                        {
                                                                            Business.Market.InvestorList[i].Balance += deltaProfit;
                                                                            TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance);
                                                                            isValid = true;
                                                                        }
                                                                    }
                                                                    break;

                                                                case 15:
                                                                    {
                                                                        double tempBalance = Business.Market.InvestorList[i].Credit - deltaProfit;
                                                                        if (tempBalance > 0 && newOpenTrade.Profit > 0)
                                                                        {
                                                                            Business.Market.InvestorList[i].Credit -= deltaProfit;
                                                                            TradingServer.Facade.FacadeUpdateCredit(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Credit);
                                                                            isValid = true;
                                                                        }
                                                                    }
                                                                    break;

                                                                case 16:
                                                                    {
                                                                        double tempBalance = Business.Market.InvestorList[i].Credit + deltaProfit;
                                                                        if (tempBalance > 0 && newOpenTrade.Profit > 0)
                                                                        {
                                                                            Business.Market.InvestorList[i].Credit += deltaProfit;
                                                                            TradingServer.Facade.FacadeUpdateCredit(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Credit);
                                                                            isValid = true;
                                                                        }
                                                                    }
                                                                    break;

                                                                default:
                                                                    {
                                                                        Business.Market.InvestorList[i].Balance -= deltaProfit;
                                                                        TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance);
                                                                        isValid = true;
                                                                    }
                                                                    break;
                                                            }
                                                            #endregion

                                                            //SEND NOTIFY TO MANAGER with type =3 then balance and credit
                                                            TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Business.Market.InvestorList[i]);
                                                        }

                                                        if (isValid)
                                                        {
                                                            #region CALCUALTION AGENT COMMISSION
                                                            double deltaAgentCommission = agentCommission - tempOpenTrade.AgentCommission;

                                                            if (deltaAgentCommission != 0)
                                                            {
                                                                if (Business.Market.InvestorList != null)
                                                                {
                                                                    int countInvestor = Business.Market.InvestorList.Count;
                                                                    for (int j = 0; j < countInvestor; j++)
                                                                    {
                                                                        if (Business.Market.InvestorList[j].Code == tempOpenTrade.Investor.AgentID)
                                                                        {
                                                                            Business.Market.InvestorList[j].Balance += deltaAgentCommission;
                                                                            TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[j].InvestorID, Business.Market.InvestorList[j].Balance);
                                                                            //SEND NOTIFY TO MANAGER with type =3 then balance and credit
                                                                            TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Business.Market.InvestorList[j]);

                                                                            if (Business.Market.InvestorList[j].IsOnline)
                                                                            {
                                                                                string Message = "GetNewBalance";

                                                                                int countInvestorOnline = Business.Market.InvestorList[j].CountInvestorOnline(Business.Market.InvestorList[j].InvestorID);
                                                                                if (countInvestorOnline > 0)
                                                                                    Business.Market.InvestorList[j].ClientCommandQueue.Add(Message);
                                                                            }
                                                                            break;
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                            #endregion

                                                            if (Business.Market.InvestorList[i].ClientCommandQueue == null)
                                                                Business.Market.InvestorList[i].ClientCommandQueue = new List<string>();

                                                            int countOnline = Business.Market.InvestorList[i].CountInvestorOnline(Business.Market.InvestorList[i].InvestorID);
                                                            if (countOnline > 0)
                                                                Business.Market.InvestorList[i].ClientCommandQueue.Add("UCH1478963");
                                                        }

                                                        //UPDATE COMMAND HISTORY IN DATABASE
                                                        resultUpdate = TradingServer.Facade.FacadeUpdateCommandHistory(newOpenTrade);

                                                        break;
                                                    }
                                                }
                                            }
                                            #endregion

                                            StringResult = subValue[0] + "$" + resultUpdate;
                                            #region LOG
                                            //'2222': the existent order has been overwritten
                                            string status = "[Failed]";
                                            if (resultUpdate)
                                                status = "[Success]";

                                            if (tempOpenTrade.Type.ID == 1 || tempOpenTrade.Type.ID == 2 || tempOpenTrade.Type.ID == 11 || tempOpenTrade.Type.ID == 12)
                                            {
                                                string content = "'" + code + "': close order #" + tempOpenTrade.CommandCode + " for " + tempOpenTrade.Investor.Code +
                                                                " modified: " + mode + " " + strSize + " " + tempOpenTrade.Symbol.Name + " at " + strOpenPriceBefore + " - cp: " +
                                                                strClosePriceBefore + " - tp: " + strTakeProfitBefore + " - sl: " + strStopLossBefore + " - cm: " + strCommissionBefore +
                                                                " - sw: " + strSwapBefore + " - profit: " + strProfitBefore + " -> " + mode + " " + strSize + " " + tempOpenTrade.Symbol.Name +
                                                                " at " + strOpenPriceAfter + " - cp: " + strClosePriceAfter + " - tp: " + strTakeProfitAfter + " - sl: " + strStopLossAfter +
                                                                " - cm: " + strCommissionAfter + " - sw: " + strSwapAfter + " - profit: " + strProfitAfter + status;
                                                string comment = "[update order]";
                                                TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                            }
                                            else
                                            {
                                                switch (tempOpenTrade.Type.ID)
                                                {
                                                    case 13:
                                                        {
                                                            string content = "'" + code + "': close order #" + tempOpenTrade.CommandCode + " for " + tempOpenTrade.Investor.Code +
                                                                " modified - deposit " + strSize + " at " + strOpenPriceBefore + " - cp: " + strClosePriceBefore +
                                                                " - profit: " + strProfitBefore + " -> deposit " + strSize + " at " + strOpenPriceAfter + " - profit: " +
                                                                strProfitAfter + status;
                                                            string comment = "[update order]";
                                                            TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                                        }
                                                        break;
                                                    case 14:
                                                        {
                                                            string content = "'" + code + "': close order #" + tempOpenTrade.CommandCode + " for " + tempOpenTrade.Investor.Code +
                                                                " modified - withdrawal " + strSize + " at " + strOpenPriceBefore + " - cp: " + strClosePriceBefore +
                                                                " - profit: " + strProfitBefore + " -> withdrawal " + strSize + " at " + strOpenPriceAfter + " - profit: " +
                                                                strProfitAfter + status;
                                                            string comment = "[update order]";
                                                            TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                                        }
                                                        break;
                                                    case 15:
                                                        {
                                                            string content = "'" + code + "': close order #" + tempOpenTrade.CommandCode + " for " + tempOpenTrade.Investor.Code +
                                                                " modified - credit in " + strSize + " at " + strOpenPriceBefore + " - cp: " + strClosePriceBefore +
                                                                " - profit: " + strProfitBefore + " -> credit in " + strSize + " at " + strOpenPriceAfter + " - profit: " +
                                                                strProfitAfter + status;
                                                            string comment = "[update order]";
                                                            TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                                        }
                                                        break;
                                                    case 16:
                                                        {
                                                            string content = "'" + code + "': close order #" + tempOpenTrade.CommandCode + " for " + tempOpenTrade.Investor.Code +
                                                                " modified - credit out " + strSize + " at " + strOpenPriceBefore + " - cp: " + strClosePriceBefore +
                                                                " - profit: " + strProfitBefore + " -> credit out " + strSize + " at " + strOpenPriceAfter + " - profit: " +
                                                                strProfitAfter + status;
                                                            string comment = "[update order]";
                                                            TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                                        }
                                                        break;
                                                }
                                            }
                                            #endregion
                                        }
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$MCM006";
                                        string content = "'" + code + "': update order failed(not enough rights)";
                                        string comment = "[update order]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                    string content = "'" + code + "': update order failed(invalid ip)";
                                    string comment = "[update order]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                }
                            }
                            break;
                        #endregion

                        #region DELETE COMMAND IN HISTORY(DELETE COMMAND, DELETE DEPOSIT)
                        case "DeleteCommandHistory":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    bool resultDelete = false;
                                    int commandHistoryID = 0;

                                    string[] subParameter = subValue[1].Split(',');

                                    int.TryParse(subValue[1], out commandHistoryID);

                                    Business.OpenTrade newOpenTrade = TradingServer.Facade.FacadeGetCommandHistoryByCommandID(commandHistoryID);

                                    //if (newOpenTrade == null)
                                    //    return StringResult = subValue[0] + "$" + false;
                                    bool isDelete = false;
                                    if (newOpenTrade != null)
                                    {
                                        if (newOpenTrade.ID > 0)
                                        {
                                            #region DELETE COMMAND HISTORY
                                            #region FIX BALANCE ACCOUNT
                                            if (newOpenTrade.Type != null)
                                            {
                                                double swap = newOpenTrade.Swap;

                                                switch (newOpenTrade.Type.ID)
                                                {
                                                    #region SPOT COMMAND
                                                    case 1:
                                                        this.FixBalanceAccount(newOpenTrade.Profit, swap, newOpenTrade.Commission, newOpenTrade.Investor.InvestorID, newOpenTrade.AgentCommission);
                                                        break;

                                                    case 2:
                                                        this.FixBalanceAccount(newOpenTrade.Profit, swap, newOpenTrade.Commission, newOpenTrade.Investor.InvestorID, newOpenTrade.AgentCommission);
                                                        break;
                                                    #endregion

                                                    #region FUTURE COMMAND
                                                    case 11:
                                                        this.FixBalanceAccount(newOpenTrade.Profit, swap, newOpenTrade.Commission, newOpenTrade.Investor.InvestorID, newOpenTrade.AgentCommission);
                                                        break;

                                                    case 12:
                                                        this.FixBalanceAccount(newOpenTrade.Profit, swap, newOpenTrade.Commission, newOpenTrade.Investor.InvestorID, newOpenTrade.AgentCommission);
                                                        break;
                                                    #endregion

                                                    #region DEPOSIT
                                                    case 13:
                                                        {
                                                            if (Business.Market.InvestorList != null)
                                                            {
                                                                int count = Business.Market.InvestorList.Count;
                                                                for (int i = 0; i < count; i++)
                                                                {
                                                                    if (Business.Market.InvestorList[i].InvestorID == newOpenTrade.Investor.InvestorID)
                                                                    {
                                                                        Business.Market.InvestorList[i].Balance -= newOpenTrade.Profit;

                                                                        TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance);

                                                                        break;
                                                                    }
                                                                }
                                                            }
                                                        }
                                                        break;
                                                    #endregion

                                                    #region WITHDRAWL
                                                    case 14:
                                                        {
                                                            if (Business.Market.InvestorList != null)
                                                            {
                                                                int count = Business.Market.InvestorList.Count;
                                                                for (int i = 0; i < count; i++)
                                                                {
                                                                    if (Business.Market.InvestorList[i].InvestorID == newOpenTrade.Investor.InvestorID)
                                                                    {
                                                                        Business.Market.InvestorList[i].Balance += newOpenTrade.Profit;

                                                                        TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance);

                                                                        break;
                                                                    }
                                                                }
                                                            }
                                                        }
                                                        break;
                                                    #endregion

                                                    #region CREDIT IN
                                                    case 15:
                                                        {
                                                            if (Business.Market.InvestorList != null)
                                                            {
                                                                int count = Business.Market.InvestorList.Count;
                                                                for (int i = 0; i < count; i++)
                                                                {
                                                                    if (Business.Market.InvestorList[i].InvestorID == newOpenTrade.Investor.InvestorID)
                                                                    {
                                                                        Business.Market.InvestorList[i].Credit -= newOpenTrade.Profit;

                                                                        TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance);

                                                                        break;
                                                                    }
                                                                }
                                                            }
                                                        }
                                                        break;
                                                    #endregion

                                                    #region CREDIT OUT
                                                    case 16:
                                                        {
                                                            if (Business.Market.InvestorList != null)
                                                            {
                                                                int count = Business.Market.InvestorList.Count;
                                                                for (int i = 0; i < count; i++)
                                                                {
                                                                    if (Business.Market.InvestorList[i].InvestorID == newOpenTrade.Investor.InvestorID)
                                                                    {
                                                                        Business.Market.InvestorList[i].Credit += newOpenTrade.Profit;

                                                                        TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance);

                                                                        break;
                                                                    }
                                                                }
                                                            }
                                                        }
                                                        break;
                                                    #endregion
                                                }
                                            }
                                            #endregion

                                            //UPDATE ISDELETE IN DATABASE
                                            isDelete = TradingServer.Facade.FacadeUpdateIsDeleteHistory(true, commandHistoryID);
                                            #endregion
                                        }
                                    }
                                    else
                                    {
                                        //Delete Open Position
                                        newOpenTrade = TradingServer.Facade.FacadeFindOpenTradeInCommandEx(commandHistoryID);

                                        if (newOpenTrade.Symbol == null || newOpenTrade.Investor == null || newOpenTrade.IGroupSecurity == null || newOpenTrade.Type == null)
                                            return StringResult = subValue[0] + "$" + false;

                                        isDelete = TradingServer.Facade.FacadeDeleteOpenTradeByAdmin(commandHistoryID);
                                    }

                                    #region BUILD STRING INSERT LOG
                                    string message = string.Empty;

                                    if (newOpenTrade.Type.ID == 1 || newOpenTrade.Type.ID == 2 || newOpenTrade.Type.ID == 11 || newOpenTrade.Type.ID == 12)
                                    {
                                        #region BUILD STRING INSERT LOG
                                        //'2222': order #2495264 for '2365714' delete - buy 2.00 GBPUSD at 1.48840, profit: 20.00
                                        string mode = string.Empty;
                                        string size = string.Empty;
                                        string openPrice = string.Empty;
                                        string profit = string.Empty;
                                        string swap = string.Empty;
                                        string commission = string.Empty;
                                        size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Size.ToString(), 2);
                                        mode = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(newOpenTrade.Type.ID);
                                        openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.OpenPrice.ToString(), newOpenTrade.Symbol.Digit);
                                        profit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Profit.ToString(), 2);
                                        swap = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Swap.ToString(), 2);
                                        commission = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Commission.ToString(), 2);
                                        message = "'" + code + "': order #" + newOpenTrade.CommandCode + " for '" + newOpenTrade.Investor.Code + "' delete - " +
                                            mode + " " + size + " " + newOpenTrade.Symbol.Name + " at " + openPrice + ", profit: " + profit + " - swap: " +
                                            swap + "- commission: " + commission;
                                        #endregion
                                    }
                                    else
                                    {
                                        #region BUILD STRING INSERT LOG
                                        //'2222': changed balance #14051372 - 100000.00 for ' 90244233' - ' Deposit'
                                        string mode = string.Empty;
                                        string profit = string.Empty;
                                        switch (newOpenTrade.Type.ID)
                                        {
                                            case 13:
                                                mode = "Deposit";
                                                break;

                                            case 14:
                                                mode = "Withdrawal";
                                                break;

                                            case 15:
                                                mode = "Credit In";
                                                break;

                                            case 16:
                                                mode = "Credit Out";
                                                break;
                                        }
                                        profit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Profit.ToString(), 2);
                                        message = "'" + code + "': changed balance #" + newOpenTrade.CommandCode + " - " + profit + " for '" +
                                            newOpenTrade.Investor.Code + "'" + " - '" + mode + "'";
                                        #endregion
                                    }

                                    TradingServer.Facade.FacadeAddNewSystemLog(5, message, "[delete admin order]", ipAddress, code);
                                    #endregion

                                    #region SEND COMMAND PREFESH DATA CLIENT AND MANAGER
                                    TradingServer.Facade.FacadeSendNotifyManagerRequest(3, newOpenTrade.Investor);
                                    TradingServer.Business.Market.SendNotifyToClient("IAC04332451", 3, newOpenTrade.Investor.InvestorID);
                                    #endregion

                                    #region COMMENT CODE(2-2-2012)
                                    //Business.Investor tempInvestor = new Investor();
                                    //if (Business.Market.InvestorList != null)
                                    //{
                                    //    int count = Business.Market.InvestorList.Count;
                                    //    for (int i = 0; i < count; i++)
                                    //    {
                                    //        if (Business.Market.InvestorList[i].InvestorID == newOpenTrade.Investor.InvestorID)
                                    //        {
                                    //            tempInvestor = Business.Market.InvestorList[i];

                                    //            break;
                                    //        }
                                    //    }
                                    //}

                                    //resultDelete = TradingServer.Facade.FacadeDeleteCommandHistory(commandHistoryID);

                                    //if (!resultDelete)
                                    //{
                                    //    if (Business.Market.CommandExecutor != null)
                                    //    {
                                    //        int countCommand = Business.Market.CommandExecutor.Count;
                                    //        for (int j = 0; j < countCommand; j++)
                                    //        {
                                    //            if (Business.Market.CommandExecutor[j].ID == commandHistoryID)
                                    //            {
                                    //                resultDelete = TradingServer.Facade.FacadeDeleteOpenTradeByManager(commandHistoryID);

                                    //                if (Business.Market.CommandExecutor[j].Investor.ClientCommandQueue == null)
                                    //                    Business.Market.CommandExecutor[j].Investor.ClientCommandQueue = new List<string>();

                                    //                Business.Market.CommandExecutor[j].Investor.ClientCommandQueue.Add("COD24680");

                                    //                break;
                                    //            }
                                    //        }
                                    //    }
                                    //}
                                    //else
                                    //{
                                    //    if (tempInvestor != null && tempInvestor.InvestorID > 0)
                                    //    {
                                    //        if (tempInvestor.ClientCommandQueue == null)
                                    //            tempInvestor.ClientCommandQueue = new List<string>();

                                    //        tempInvestor.ClientCommandQueue.Add("COD24680");
                                    //    }
                                    //}
                                    #endregion

                                    //StringResult = subValue[0] + "$" + resultDelete;
                                    StringResult = subValue[0] + "$" + isDelete;
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$MCM005";
                                }
                            }
                            break;
                        #endregion

                        #region ACTIVE PENDING ORDER
                        case "ActivePendingOrder":
                            {
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    #region Map Value
                                    bool resultActive = false;
                                    int commandID = 0;
                                    int.TryParse(subValue[1], out commandID);
                                    Business.OpenTrade result = new OpenTrade();
                                    result = TradingServer.Facade.FacadeFindOpenTradeInCommandEx(commandID);

                                    Business.OpenTrade newOpenTrade = new OpenTrade();
                                    newOpenTrade.ClientCode = result.ClientCode;
                                    newOpenTrade.CloseTime = result.CloseTime;
                                    newOpenTrade.ExpTime = result.ExpTime;
                                    newOpenTrade.ID = result.ID;
                                    newOpenTrade.Investor = result.Investor;
                                    newOpenTrade.IsClose = result.IsClose;
                                    newOpenTrade.OpenPrice = result.OpenPrice;
                                    newOpenTrade.OpenTime = result.OpenTime;
                                    newOpenTrade.Size = result.Size;
                                    newOpenTrade.StopLoss = result.StopLoss;
                                    newOpenTrade.Swap = result.Swap;
                                    newOpenTrade.Symbol = result.Symbol;
                                    newOpenTrade.TakeProfit = result.TakeProfit;
                                    newOpenTrade.Type = result.Type;
                                    newOpenTrade.ClosePrice = result.ClosePrice;
                                    newOpenTrade.Margin = result.Margin;
                                    newOpenTrade.CommandCode = result.CommandCode;
                                    newOpenTrade.Commission = result.Commission;
                                    newOpenTrade.IGroupSecurity = result.IGroupSecurity;
                                    #endregion

                                    bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code);
                                    bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, result.Investor.InvestorGroupInstance.InvestorGroupID);
                                    if (checkRule && checkGroup)
                                    {

                                        if (newOpenTrade != null && newOpenTrade.ID > 0)
                                        {
                                            //result.Symbol.MarketAreaRef.UpdateCommand(result);
                                            if (newOpenTrade.Type.ID == 7 || newOpenTrade.Type.ID == 9)
                                            {
                                                #region CASE BUY LIMIT AND BUY STOP
                                                if (newOpenTrade.Symbol.MarketAreaRef != null)
                                                {
                                                    if (newOpenTrade.Symbol.MarketAreaRef.Type != null)
                                                    {
                                                        int countType = newOpenTrade.Symbol.MarketAreaRef.Type.Count;
                                                        for (int m = 0; m < countType; m++)
                                                        {
                                                            if (newOpenTrade.Symbol.MarketAreaRef.Type[m].ID == 1)
                                                            {
                                                                newOpenTrade.Type = new TradeType();
                                                                newOpenTrade.Type.ID = newOpenTrade.Symbol.MarketAreaRef.Type[m].ID;
                                                                newOpenTrade.Type.Name = newOpenTrade.Symbol.MarketAreaRef.Type[m].Name;

                                                                break;
                                                            }
                                                        }
                                                    }
                                                }
                                                #endregion
                                            }
                                            else if (newOpenTrade.Type.ID == 8 || newOpenTrade.Type.ID == 10)
                                            {
                                                #region CASE SELL LIMIT AND SELL STOP
                                                if (newOpenTrade.Symbol.MarketAreaRef != null)
                                                {
                                                    if (newOpenTrade.Symbol.MarketAreaRef.Type != null)
                                                    {
                                                        int countType = newOpenTrade.Symbol.MarketAreaRef.Type.Count;
                                                        for (int m = 0; m < countType; m++)
                                                        {
                                                            if (newOpenTrade.Symbol.MarketAreaRef.Type[m].ID == 2)
                                                            {
                                                                newOpenTrade.Type = new TradeType();
                                                                newOpenTrade.Type.ID = newOpenTrade.Symbol.MarketAreaRef.Type[m].ID;
                                                                newOpenTrade.Type.Name = newOpenTrade.Symbol.MarketAreaRef.Type[m].Name;

                                                                break;
                                                            }
                                                        }
                                                    }
                                                }
                                                #endregion
                                            }

                                            if (newOpenTrade.Type.ID == 17 || newOpenTrade.Type.ID == 19)
                                            {
                                                if (newOpenTrade.Symbol.MarketAreaRef.Type != null)
                                                {
                                                    int countType = newOpenTrade.Symbol.MarketAreaRef.Type.Count;
                                                    for (int m = 0; m < countType; m++)
                                                    {
                                                        if (newOpenTrade.Symbol.MarketAreaRef.Type[m].ID == 11)
                                                        {
                                                            newOpenTrade.Type = new TradeType();
                                                            newOpenTrade.Type.ID = newOpenTrade.Symbol.MarketAreaRef.Type[m].ID;
                                                            newOpenTrade.Type.Name = newOpenTrade.Symbol.MarketAreaRef.Type[m].Name;

                                                            break;
                                                        }
                                                    }
                                                }
                                            }
                                            else if (newOpenTrade.Type.ID == 18 || newOpenTrade.Type.ID == 20)
                                            {
                                                if (newOpenTrade.Symbol.MarketAreaRef.Type != null)
                                                {
                                                    int countType = newOpenTrade.Symbol.MarketAreaRef.Type.Count;
                                                    for (int m = 0; m < countType; m++)
                                                    {
                                                        if (newOpenTrade.Symbol.MarketAreaRef.Type[m].ID == 12)
                                                        {
                                                            newOpenTrade.Type = new TradeType();
                                                            newOpenTrade.Type.ID = newOpenTrade.Symbol.MarketAreaRef.Type[m].ID;
                                                            newOpenTrade.Type.Name = newOpenTrade.Symbol.MarketAreaRef.Type[m].Name;

                                                            break;
                                                        }
                                                    }
                                                }
                                            }

                                            newOpenTrade.IsProcess = true;
                                            newOpenTrade.Investor.UpdateCommand(newOpenTrade);
                                            resultActive = true;

                                            #region INSERT SYSTEM LOG
                                            //INSERT SYSTEM LOG
                                            //'2222': account '9789300', activate order #11349528 buy stop 2.00 EURUSD at 1.5625
                                            string comment = "[active pending order]";
                                            string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(result.Size.ToString(), 2);
                                            string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(result.OpenPrice.ToString(), result.Symbol.Digit);
                                            string mode = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(result.Type.ID);
                                            string content = "'" + code + "': account '" + result.Investor.Code + "' activate order #" + result.CommandCode + " " + mode + " " + size +
                                                " " + result.Symbol.Name + " at " + openPrice;

                                            TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                            #endregion
                                        }
                                        if(resultActive)
                                            StringResult = subValue[0] + "$" + resultActive + ",MCM001";
                                        else StringResult = subValue[0] + "$" + resultActive + ",MCM004";
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + false + ",MCM006";
                                        string content = "'" + code + "': manager active pending order failed(not enough rights)";
                                        string comment = "[active pending order]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$" + false + ",MCM005";
                                    string content = "'" + code + "': manager active pending order failed(invalid ip)";
                                    string comment = "[active pending order]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code);
                                }
                            }
                            break;
                        #endregion

                        //Command Select
                        //
                        #region Select Investor Group
                        case "SelectInvestorGroup":
                            {
                                string temp = string.Empty;
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    List<Business.InvestorGroup> Result = new List<InvestorGroup>();
                                    //Result = TradingServer.Facade.FacadeGetAllInvestorGroup();
                                    Result = TradingServer.Business.Market.InvestorGroupList;
                                    if (Result != null)
                                    {
                                        int countInvestorGroup = Result.Count;
                                        for (int n = 0; n < countInvestorGroup; n++)
                                        {
                                            temp += Result[n].InvestorGroupID.ToString() + "," + Result[n].Name + "," + Result[n].Owner + "," + Result[n].DefautDeposite.ToString() + "|";
                                        }
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "SelectInvestorGroupByID":
                            {
                                string temp = string.Empty;
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int InvestorGroupID = -1;
                                    int.TryParse(subValue[1], out InvestorGroupID);

                                    Business.InvestorGroup Result = new InvestorGroup();
                                    if (Business.Market.InvestorGroupList != null)
                                    {
                                        int countInvestor = Business.Market.InvestorGroupList.Count;
                                        for (int j = 0; j < countInvestor; j++)
                                        {
                                            if (Business.Market.InvestorGroupList[j].InvestorGroupID == InvestorGroupID)
                                            {
                                                Result = Business.Market.InvestorGroupList[j];
                                                break;
                                            }
                                        }
                                    }
                                    //Result = TradingServer.Facade.FacadeGetInvestorGroupByInvestorGroupID(InvestorGroupID);
                                    if (Result != null)
                                    {
                                        temp += Result.InvestorGroupID.ToString() + "," + Result.Name + "," + Result.Owner + "," + Result.DefautDeposite.ToString();
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        #endregion

                        #region Select Investor Group Config
                        case "SelectInvestorGroupConfigByInvestorGroupID":
                            {
                                string temp = string.Empty;
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int InvestorGroupID = -1;
                                    int.TryParse(subValue[1], out InvestorGroupID);

                                    if (Market.InvestorGroupList != null)
                                    {
                                        int countInvestorGroup = Market.InvestorGroupList.Count;
                                        for (int n = 0; n < countInvestorGroup; n++)
                                        {
                                            if (Market.InvestorGroupList[n].InvestorGroupID == InvestorGroupID)
                                            {
                                                if (Market.InvestorGroupList[n].ParameterItems != null)
                                                {
                                                    int countParameterItem = Market.InvestorGroupList[n].ParameterItems.Count;
                                                    for (int m = 0; m < countParameterItem; m++)
                                                    {
                                                        temp += Market.InvestorGroupList[n].ParameterItems[m].ParameterItemID.ToString() + "," +
                                                                Market.InvestorGroupList[n].ParameterItems[m].SecondParameterID.ToString() + "," + "-1" + "," +
                                                                Market.InvestorGroupList[n].ParameterItems[m].Name + "," +
                                                                Market.InvestorGroupList[n].ParameterItems[m].Code + "," +
                                                                Market.InvestorGroupList[n].ParameterItems[m].BoolValue.ToString() + "," +
                                                                Market.InvestorGroupList[n].ParameterItems[m].StringValue + "," +
                                                                Market.InvestorGroupList[n].ParameterItems[m].NumValue + "," +
                                                                Market.InvestorGroupList[n].ParameterItems[m].DateValue.ToString() + "|";
                                                    }
                                                }
                                                break;
                                            }
                                        }
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        #endregion

                        #region Select IGroup Symbol
                        case "SelectIGroupSymbol":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string temp = string.Empty;
                                    List<Business.IGroupSymbol> Result = new List<IGroupSymbol>();
                                    Result = Business.Market.IGroupSymbolList;
                                    if (Result != null)
                                    {
                                        int countIGroupSymbol = Result.Count;
                                        for (int n = 0; n < countIGroupSymbol; n++)
                                        {
                                            temp += Result[n].IGroupSymbolID.ToString() + "," + Result[n].SymbolID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "|";
                                        }
                                    }
                                    StringResult = subValue[0] + "$" + temp;
                                }
                            }
                            break;

                        case "SelectIGroupSymbolByID":
                            {
                                string temp = string.Empty;
                                int IGroupSymbolID = -1;
                                int.TryParse(subValue[1], out IGroupSymbolID);

                                Business.IGroupSymbol Result = new IGroupSymbol();
                                if (Business.Market.IGroupSymbolList != null)
                                {
                                    int countIGroupSymbol = Business.Market.IGroupSymbolList.Count;
                                    for (int j = 0; j < countIGroupSymbol; j++)
                                    {
                                        if (Business.Market.IGroupSymbolList[j].IGroupSymbolID == IGroupSymbolID)
                                        {
                                            Result = Business.Market.IGroupSymbolList[j];
                                            break;
                                        }
                                    }
                                }

                                //Result = TradingServer.Facade.FacadeGetIGroupSymbolByIGroupSymbolID(IGroupSymbolID);
                                if (Result != null)
                                {
                                    temp = Result.IGroupSymbolID.ToString() + "," + Result.SymbolID.ToString() + "," + Result.InvestorGroupID.ToString();
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "SelectIGroupSymbolBySymbolID":
                            {
                                string temp = string.Empty;
                                int SymbolID = -1;
                                int.TryParse(subValue[1], out SymbolID);

                                List<Business.IGroupSymbol> Result = new List<IGroupSymbol>();
                                if (Business.Market.IGroupSymbolList != null)
                                {
                                    int countIGroupSymbol = Business.Market.IGroupSymbolList.Count;
                                    for (int j = 0; j < countIGroupSymbol; j++)
                                    {
                                        if (Business.Market.IGroupSymbolList[j].SymbolID == SymbolID)
                                        {
                                            Result.Add(Business.Market.IGroupSymbolList[j]);
                                        }
                                    }
                                }

                                //Result = TradingServer.Facade.FacadeGetIGroupSymbolBySymbolID(SymbolID);
                                if (Result != null)
                                {
                                    int countIGroupSymbol = Result.Count;
                                    for (int n = 0; n < countIGroupSymbol; n++)
                                    {
                                        temp += Result[n].IGroupSymbolID.ToString() + "," + Result[n].SymbolID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "|";
                                    }
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        #endregion

                        #region Select IGroupSymbolConfig
                        case "SelectIGroupSymbolConfigByIGroupSymbolID":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string temp = string.Empty;
                                    int IGroupSymbolID = -1;
                                    int.TryParse(subValue[1], out IGroupSymbolID);
                                    temp = this.GetIGroupSymbolConfigByIGroupSymbolIDInIGroupSymbolList(IGroupSymbolID);
                                    StringResult = subValue[0] + "$" + temp;
                                }
                            }
                            break;
                        #endregion

                        #region Select IGroup Security
                        case "SelectIGroupSecurity":
                            {
                                string temp = string.Empty;
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    List<Business.IGroupSecurity> Result = new List<IGroupSecurity>();
                                    Result = Business.Market.IGroupSecurityList;
                                    if (Result != null)
                                    {
                                        int countIGroupSecurity = Result.Count;
                                        for (int n = 0; n < countIGroupSecurity; n++)
                                        {
                                            temp += Result[n].IGroupSecurityID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "," +
                                                        Result[n].SecurityID.ToString() + "|";
                                        }
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "SelectIGroupSecurityByID":
                            {
                                string temp = string.Empty;
                                int IGroupSecurityID = -1;
                                int.TryParse(subValue[1], out IGroupSecurityID);

                                Business.IGroupSecurity Result = new IGroupSecurity();
                                if (Business.Market.IGroupSecurityList != null)
                                {
                                    int countIGroupSecurity = Business.Market.IGroupSecurityList.Count;
                                    for (int j = 0; j < countIGroupSecurity; j++)
                                    {
                                        if (Business.Market.IGroupSecurityList[j].IGroupSecurityID == IGroupSecurityID)
                                        {
                                            Result = Business.Market.IGroupSecurityList[j];
                                            break;
                                        }
                                    }
                                }

                                if (Result != null)
                                {
                                    temp += Result.IGroupSecurityID.ToString() + "," + Result.InvestorGroupID.ToString() + "," +
                                                    Result.SecurityID.ToString();
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "SelectIGroupSecurityBySecurityID":
                            {
                                string temp = string.Empty;
                                int SecurityID = -1;
                                int.TryParse(subValue[1], out SecurityID);

                                List<Business.IGroupSecurity> Result = new List<IGroupSecurity>();
                                if (Business.Market.IGroupSecurityList != null)
                                {
                                    int countIGroupSecurity = Business.Market.IGroupSecurityList.Count;
                                    for (int j = 0; j < countIGroupSecurity; j++)
                                    {
                                        if (Business.Market.IGroupSecurityList[j].SecurityID == SecurityID)
                                        {
                                            Result.Add(Business.Market.IGroupSecurityList[j]);
                                        }
                                    }
                                }
                                //Result = TradingServer.Facade.FacadeGetIGroupSecurityBySecurityID(SecurityID);
                                if (Result != null)
                                {
                                    int countIGroupSecurity = Result.Count;
                                    for (int n = 0; n < countIGroupSecurity; n++)
                                    {
                                        temp += Result[n].IGroupSecurityID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "," +
                                                    Result[n].SecurityID.ToString() + "|";
                                    }
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "SelectIGroupSecurityByInvestorGroupID":
                            {
                                string temp = string.Empty;
                                int InvestorGroupID = -1;
                                int.TryParse(subValue[1], out InvestorGroupID);

                                List<Business.IGroupSecurity> Result = new List<IGroupSecurity>();
                                if (Business.Market.IGroupSecurityList != null)
                                {
                                    int countIGroupSecurity = Business.Market.IGroupSecurityList.Count;
                                    for (int j = 0; j < countIGroupSecurity; j++)
                                    {
                                        if (Business.Market.IGroupSecurityList[j].InvestorGroupID == InvestorGroupID)
                                        {
                                            Result.Add(Business.Market.IGroupSecurityList[j]);
                                        }
                                    }
                                }
                                //Result = TradingServer.Facade.FacadeGetIGroupSecurityByInvestorGroupID(InvestorGroupID);
                                if (Result != null)
                                {
                                    int countIGroupSecurity = Result.Count;
                                    for (int n = 0; n < countIGroupSecurity; n++)
                                    {
                                        temp += Result[n].IGroupSecurityID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "," +
                                                    Result[n].SecurityID.ToString() + "|";
                                    }
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        #endregion

                        #region Select IGroupSecurityConfig
                        case "SelectIGroupSecurityConfigByIGroupSecurityID":
                            {
                                string temp = string.Empty;
                                int IGroupSecurityID = -1;
                                int.TryParse(subValue[1], out IGroupSecurityID);
                                temp = this.GetIGroupSecurityConfigByIGroupSecurityIDInIGroupSecurityList(IGroupSecurityID);
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        #endregion

                        #region Select Security
                        case "SelectSecurity":
                            {
                                string temp = string.Empty;
                                temp = this.SelectSecurityInSecurityList();

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "SelectSecurityByID":
                            {
                                string temp = string.Empty;
                                int SecurityID = -1;
                                int.TryParse(subValue[1], out SecurityID);
                                temp = this.SelectSecurityByIDInSecurityList(SecurityID);
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        #endregion

                        #region Select Symbol
                        case "SelectSymbol":
                            {
                                //string commandName = "GetAllSymbol$";
                                //string temp = string.Empty;
                                //temp = this.ExtractSelectSymbol();
                                //StringResult = commandName + temp;
                            }
                            break;

                        case "SelectSymbolByID":
                            {
                                string temp = string.Empty;
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int SymbolID = -1;
                                    int.TryParse(subValue[1], out SymbolID);
                                    temp = this.SelectSymbolByIDInSymbolList(SymbolID);
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        #endregion

                        #region Select TradingConfig(SymbolConfig)
                        case "SelectTradingConfigBySymbolID":
                            {
                                string temp = string.Empty;
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int SymbolID = -1;
                                    int.TryParse(subValue[1], out SymbolID);
                                    temp = this.SelectTradingConfigBySymbolIDInSymbolList(SymbolID);
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        #endregion

                        #region Select Security Config
                        case "SelectSecurityConfigBySecurityID":
                            {
                                string temp = string.Empty;
                                int SecurityID = -1;
                                int.TryParse(subValue[1], out SecurityID);
                                temp = this.SelectSecurityConfigBySecurityIDInSecurityList(SecurityID);
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        #endregion

                        #region Select Investor(LOG COMMENT)
                        case "SelectInvestor":
                            {
                                string temp = string.Empty;
                                List<Business.Investor> Result = new List<Investor>();
                                Result = TradingServer.Facade.FacadeGetAllInvestor();
                                Result = Business.Market.InvestorList;

                                if (Result != null)
                                {
                                    int countInvestor = Result.Count;
                                    for (int n = 0; n < countInvestor; n++)
                                    {
                                        temp += Result[n].InvestorID.ToString() + "," + Result[n].InvestorStatusID.ToString() + "," +
                                                Result[n].InvestorGroupInstance.InvestorGroupID + "," + Result[n].AgentID.ToString() + "," +
                                                Result[n].Balance.ToString() + "," + Result[n].Credit.ToString() + "," +
                                                Result[n].Code + "," + Result[n].IsDisable.ToString() + "," +
                                                Result[n].TaxRate.ToString() + "," + Result[n].Leverage.ToString() + "," +
                                                Result[n].ToString() + "," + Result[n].Address + "," + Result[n].Phone + "," +
                                                Result[n].City + "," + Result[n].Country + "," + Result[n].Email + "," + Result[n].ZipCode + "," +
                                                Result[n].RegisterDay.ToString() + "," + Result[n].InvestorComment + "," + Result[n].State + "," + Result[n].NickName + "|";
                                    }

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': 22450 accounts have been requested
                                    //string content = "'" + code + "': " + countInvestor + " accounts have been requested";
                                    //string comment = "[account request]";
                                    //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    #endregion
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "LoginServer":
                            {
                                string status = "[Failed]";
                                string temp = string.Empty;
                                string[] subParameter = subValue[1].Split(',');
                                if (subParameter.Length == 4)
                                {
                                    Business.Investor Result = new Investor();
                                    int InvestorIndex = -1;
                                    int.TryParse(subParameter[2], out InvestorIndex);

                                    Result = TradingServer.Facade.FacadeLoginServer(subParameter[0], subParameter[1], InvestorIndex, subParameter[3]);

                                    if (Result != null)
                                    {
                                        temp += Result.InvestorID.ToString() + "," + Result.InvestorStatusID.ToString() + "," +
                                                    Result.InvestorGroupInstance.InvestorGroupID + "," + Result.AgentID.ToString() + "," +
                                                    Result.Balance.ToString() + "," + Result.Credit.ToString() + "," +
                                                    Result.Code + "," + Result.IsDisable.ToString() + "," +
                                                    Result.TaxRate.ToString() + "," + Result.Leverage.ToString() + "," +
                                                    Result.InvestorProfileID.ToString() + "," + Result.Address + "," + Result.Phone + "," +
                                                    Result.City + "," + Result.Country + "," + Result.Email + "," + Result.ZipCode + "," +
                                                    Result.RegisterDay.ToString() + "," + Result.InvestorComment + "," + Result.State + "," + Result.NickName;

                                        status = "[Success]";
                                    }

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': login admin [success]
                                    string content = "'" + code + "': login admin " + status;
                                    string comment = "[login admin]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code);
                                    #endregion

                                    StringResult = subValue[0] + "$" + temp;
                                }
                            }
                            break;

                        case "SelectInvestorByID":
                            {
                                string temp = string.Empty;
                                int InvestorID = -1;
                                int.TryParse(subValue[1], out InvestorID);
                                Business.Investor Result = new Investor();

                                if (Business.Market.InvestorList != null)
                                {
                                    int countInvestor = Business.Market.InvestorList.Count;
                                    for (int j = 0; j < countInvestor; j++)
                                    {
                                        if (Business.Market.InvestorList[j].InvestorID == InvestorID)
                                        {
                                            Result = Business.Market.InvestorList[j];
                                            break;
                                        }
                                    }
                                }

                                if (Result != null)
                                {
                                    temp = Result.InvestorID + "," + Result.InvestorStatusID + "," + Result.InvestorGroupInstance.InvestorGroupID + "," +
                                                Result.AgentID + "," + Math.Round(Result.Balance, 2) + "," + Result.Credit + "," + Result.Code + "," +
                                                Result.IsDisable + "," + Result.TaxRate + "," + Result.Leverage + "," +
                                                Result.InvestorProfileID + "," + Result.Address + "," + Result.Phone + "," +
                                                Result.City + "," + Result.Country + "," + Result.Email + "," + Result.ZipCode + "," +
                                                Result.RegisterDay + "," + Result.Comment + "," + Result.State + "," + Result.NickName + "," +
                                                Result.AllowChangePwd + "," + Result.ReadOnly + "," + Result.SendReport + "," + Result.IsOnline;
                                }

                                #region INSERT SYSTEM LOG
                                //INSERT SYSTEM LOG
                                //'2222': 22450 accounts have been requested
                                int num = 0;
                                if (!string.IsNullOrEmpty(temp))
                                    num = 1;

                                string content = "'" + code + "': " + num + " accounts have been requested";
                                string comment = "[account request]";
                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                #endregion

                                if (!string.IsNullOrEmpty(temp))
                                {
                                    StringResult = subValue[0] + "$" + temp;
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$";
                                }
                            }
                            break;

                        case "FindInvestor":    //COMMENT LOG BECAUSE MANAGER AUTO REQUEST ACCOUNT THEN ACCOUNT CHANGE(22/07/2011)
                            {
                                string temp = string.Empty;
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    Business.Investor Result = new Investor();
                                    Result = TradingServer.Facade.FacadeFindInvestor(subValue[1]);

                                    if (Result != null)
                                    {
                                        temp = Result.InvestorID + "," + Result.InvestorStatusID + "," + Result.InvestorGroupInstance.InvestorGroupID + "," +
                                                    Result.AgentID + "," + Result.Balance + "," + Result.Credit + "," + Result.Code + "," +
                                                    Result.IsDisable + "," + Result.TaxRate + "," + Result.Leverage + "," +
                                                    Result.InvestorProfileID + "," + Result.Address + "," + Result.Phone + "," +
                                                    Result.City + "," + Result.Country + "," + Result.Email + "," + Result.ZipCode + "," +
                                                    Result.RegisterDay + "," + Result.InvestorComment + "," + Result.State + "," + Result.NickName + "," +
                                                    Result.AllowChangePwd + "," + Result.ReadOnly + "," + Result.SendReport + "," + Result.IsOnline + "," +
                                                    Result.Margin + "," + Result.FreezeMargin + "," + Result.PhonePwd + "," + Result.IDPassport + "," +
                                                    Result.TotalDeposit;
                                    }

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': 22450 accounts have been requested
                                    //int num = 0;
                                    //if (!string.IsNullOrEmpty(temp))
                                    //    num = 1;

                                    //string content = "'" + code + "': " + num + " accounts have been requested";
                                    //string comment = "[account request]";
                                    //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    #endregion
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "FindInvestorWithOnlineCommand":
                            {
                                string temp = string.Empty;
                                Business.Investor Result = new Investor();
                                Result = TradingServer.Facade.FacadeFindInvestorWithOnlineCommand(subValue[1]);

                                if (Result != null)
                                {
                                    temp = Result.InvestorID + "," + Result.NickName + "," + Result.Code;
                                }

                                #region INSERT SYSTEM LOG
                                //INSERT SYSTEM LOG
                                //'2222': 22450 accounts have been requested
                                int num = 0;
                                if (!string.IsNullOrEmpty(temp))
                                    num = 1;

                                string content = "'" + code + "': " + num + " accounts have been requested";
                                string comment = "[account request]";
                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                #endregion

                                StringResult = subValue[0] + "$" + Result;
                            }
                            break;

                        case "SelectInvestorByInvestorGroupID":
                            {
                                int InvestorGroupID = -1;
                                int.TryParse(subValue[1], out InvestorGroupID);
                            }
                            break;
                        #endregion

                        #region Select Agent
                        case "SelectAgent":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string temp = string.Empty;
                                    List<Business.Agent> Result = new List<Agent>();
                                    Result = TradingServer.Facade.FacadeGetAllAgent();

                                    if (Result != null)
                                    {
                                        int countAgent = Result.Count;
                                        for (int n = 0; n < countAgent; n++)
                                        {
                                            temp += Result[n].AgentID.ToString() + "}" + Result[n].AgentGroupID.ToString() + "}" + Result[n].Name + "}" + Result[n].InvestorID.ToString()
                                                    + "}" + Result[n].Comment + "}" + Result[n].IsDisable.ToString() + "}" + Result[n].IsIpFilter.ToString() + "}" + Result[n].IpForm
                                                    + "}" + Result[n].IpTo + "}" + Result[n].Code + "}" + Result[n].GroupCondition + "|";
                                        }
                                    }

                                    StringResult = subValue[0] + "$" + temp;
                                }
                            }
                            break;
                        case "SelectAgentOnline":
                            {
                                bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                if (checkip)
                                {
                                    string temp = string.Empty;
                                    List<Business.Agent> Result = new List<Agent>();

                                    for (int i = Market.AgentList.Count - 1; i >= 0; i--)
                                    {
                                        if (Market.AgentList[i].IsVirtualDealer == false && Market.AgentList[i].IsOnline == true)
                                        {
                                            Result.Add(Market.AgentList[i]);
                                        }
                                    }

                                    if (Result != null)
                                    {
                                        int countAgent = Result.Count;
                                        for (int n = 0; n < countAgent; n++)
                                        {
                                            temp += Result[n].AgentID + "}" + Result[n].Code + "}" + Result[n].IsOnline + "}" + Result[n].IsBusy + "|";
                                        }
                                    }

                                    StringResult = subValue[0] + "$" + temp;
                                }
                            }
                            break;
                        case "SelectAgentByID":
                            {
                                string temp = string.Empty;
                                int AgentID = -1;
                                int.TryParse(subValue[1], out AgentID);
                                Business.Agent Result = new Agent();

                                Result = TradingServer.Facade.FacadeGetAgentByAgentID(AgentID);

                                if (Result != null)
                                {
                                    temp += Result.AgentID.ToString() + "," + Result.AgentGroupID.ToString() + "," + Result.Name
                                        + "," + Result.InvestorID.ToString() + "," + Result.Comment + "," + Result.IsDisable.ToString();
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "LoginAdmin":
                            {
                                string status = "[Failed]";
                                string temp = string.Empty;
                                string[] subParameter = subValue[1].Split(',');
                                int count = subParameter.Length;
                                Business.Agent Result = new Agent();
                                if (count == 2)
                                {
                                    Result = TradingServer.Facade.FacadeAdminLogin(subParameter[0], subParameter[1], ipAddress);
                                    if (Result == null) temp = "-1";
                                    else
                                    {
                                        status = "[Success]";
                                        temp += Result.AgentID.ToString() + "," + Result.AgentGroupID.ToString() + "," + Result.Name + "," + Result.InvestorID.ToString() + "," + Result.Comment + "," + Result.IsDisable.ToString() + "," + ipAddress;
                                    }

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': login admin [success]

                                    string content = "'" + code + "': login admin " + status;
                                    string comment = "[login admin]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code);
                                    #endregion

                                    StringResult = subValue[0] + "$" + temp;
                                }
                            }
                            break;

                        case "AdminLogout":
                            {
                                bool Result = false;
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int AgentID = -1;
                                    int.TryParse(subValue[1], out AgentID);

                                    Result = TradingServer.Facade.FacadeAdminLogout(AgentID);

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': login admin [success]
                                    string status = "[Failed]";
                                    if (Result)
                                        status = "[Success]";

                                    string content = "'" + code + "': logout admin " + status;
                                    string comment = "[logout admin]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code);
                                    #endregion
                                }
                                StringResult = subValue[0] + "$" + Result.ToString();
                            }
                            break;

                        case "LoginManager":
                            {
                                string temp = string.Empty;
                                string status = "[Failed]";
                                string[] subParameter = subValue[1].Split(',');
                                int count = subParameter.Length;
                                Business.Agent Result = new Agent();
                                if (count == 3)
                                {
                                    Result = TradingServer.Facade.FacadeManagerLogin(subParameter[0], subParameter[1], subParameter[2], ipAddress);
                                    if (Result == null) temp = "-1";
                                    else
                                    {
                                        status = "[Success]";
                                        temp += Result.AgentID.ToString() + "," + Result.AgentGroupID.ToString() + "," + Result.Name + "," + Result.InvestorID.ToString() + "," + Result.Comment + "," + Result.IsDisable.ToString() + "," + ipAddress;
                                    }

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': login admin [success]

                                    string content = "'" + code + "': login manager " + status;
                                    string comment = "[login manager]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code);
                                    #endregion

                                    StringResult = subValue[0] + "$" + temp;
                                }
                            }
                            break;

                        case "ManagerLogout":
                            {
                                bool Result = false;
                                bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                if (checkip)
                                {
                                    int AgentID = -1;
                                    int.TryParse(subValue[1], out AgentID);

                                    Result = TradingServer.Facade.FacadeManagerLogout(AgentID);

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': login admin [success]
                                    string status = "[Failed]";
                                    if (Result)
                                        status = "[Success]";

                                    string content = "'" + code + "': logout manager " + status;
                                    string comment = "[logout manager]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code);
                                    #endregion
                                }
                                StringResult = subValue[0] + "$" + Result.ToString();
                            }
                            break;

                        case "LoginDealer"://COMMENT LOG BECAUSE MANAGER 1 MINUTE LOGIN DEALER THEN MANY LOG INSERT TO DATABASE(21/07/2011)
                            {
                                bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                if (checkip)
                                {
                                    string[] subParameter = subValue[1].Split(',');
                                    int count = subParameter.Length;
                                    int AgentID = -1;
                                    int.TryParse(subParameter[0], out AgentID);
                                    bool Result = false;
                                    if (count > 0)
                                    {
                                        Result = TradingServer.Facade.FacadeDealerLogin(AgentID, ipAddress);

                                        #region INSERT SYSTEM LOG
                                        //INSERT SYSTEM LOG
                                        //'2222': dealer dispatched connected
                                        string content = "'" + code + "': dealer dispatched connected ";
                                        string comment = "[login dealer]";
                                        TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code);
                                        #endregion

                                        StringResult = subValue[0] + "$" + Result.ToString();
                                    }
                                }
                            }
                            break;
                        case "UpdateTimeSyncDealer":
                            {
                                int AgentID = -1;
                                string[] splits = subValue[1].Split(',');
                                if (splits.Length == 2)
                                {
                                    int.TryParse(splits[0], out AgentID);
                                    string KeyActive = splits[1];
                                    if (AgentID > 0)
                                    {
                                        for (int i = Business.Market.AgentList.Count - 1; i >= 0; i--)
                                        {
                                            if (Business.Market.AgentList[i].AgentID == AgentID)
                                            {
                                                Business.Market.AgentList[i].TimeSync = DateTime.Now;
                                                break;
                                            }
                                        }

                                    }
                                }
                                StringResult = subValue[0] + "$";
                                break;
                            }
                        case "DealerLogout": //COMMENT LOG BECAUSE MANAGER 1 MINUTE LOGIN DEALER THEN MANY LOG INSERT TO DATABASE(21/07/2011)
                            {
                                bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                if (checkip)
                                {
                                    int AgentID = -1;
                                    int.TryParse(subValue[1], out AgentID);
                                    bool Result = false;
                                    Result = TradingServer.Facade.FacadeDealerLogout(AgentID);

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': dealer dispatched disconnected
                                    string content = "'" + code + "': dealer dispatched disconnected ";
                                    string comment = "[logout dealer]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code);
                                    #endregion

                                    StringResult = subValue[0] + "$" + Result.ToString();
                                }
                            }
                            break;

                        case "GetRequestToDealer":
                            {
                                string temp = string.Empty;
                                int AgentID = -1;
                                int.TryParse(subValue[1], out AgentID);
                                if (AgentID > 0)
                                {
                                    List<Business.RequestDealer> Result = new List<RequestDealer>();
                                    Result = TradingServer.Facade.FacadeGetRequestToDealer(AgentID);
                                    if (Result == null) temp = "-1";
                                    else
                                    {
                                        int count = Result.Count;
                                        for (int i = 0; i < count; i++)
                                        {
                                            temp += Result[i].AgentID + "," + Result[i].FlagConfirm + "," + Result[i].MaxDev + "," + Result[i].Name + "," + Result[i].Notice
                                                + "," + Result[i].TimeAgentReceive + "," + Result[i].TimeClientRequest + "," + Result[i].Request.Investor.InvestorID
                                                + "," + Result[i].Request.Symbol.Name + "," + Result[i].Request.Size + "," + Result[i].Request.OpenTime
                                                + "," + Result[i].Request.OpenPrice + "," + Result[i].Request.StopLoss + "," + Result[i].Request.TakeProfit
                                                + "," + Result[i].Request.ClosePrice + "," + Result[i].Request.Commission + "," + Result[i].Request.Swap
                                                + "," + Result[i].Request.Profit + "," + Result[i].Request.ID + "," + Result[i].Request.ExpTime + "," + Result[i].Request.ClientCode
                                                + "," + Result[i].Request.IsHedged + "," + Result[i].Request.Type.ID + "," + Result[i].Request.Margin + "," + Result[i].Request.Investor.InvestorGroupInstance.Name
                                                + "," + Result[i].Request.Symbol.Digit + "," + Result[i].Request.Symbol.SpreadByDefault.ToString() + "," +
                                                /*Result[i].Request.Symbol.SpreadDifference*/ Result[i].Request.SpreaDifferenceInOpenTrade
                                                + "," + Result[i].Request.CommandCode + "," + Result[i].Request.IsMultiClose + "," + Result[i].Request.RefCommandID + "|";
                                        }
                                    }
                                    StringResult = subValue[0] + "$" + temp;
                                }
                            }
                            break;
                        case "GetAllRequestDealer":
                            {
                                string temp = string.Empty;

                                List<Business.RequestDealer> Result = new List<RequestDealer>();
                                Result = TradingServer.Facade.FacadeGetAllRequestDealer();
                                if (Result == null) temp = "-1";
                                else
                                {
                                    int count = Result.Count;
                                    for (int i = 0; i < count; i++)
                                    {
                                        temp += Result[i].AgentID + "," + Result[i].FlagConfirm + "," + Result[i].MaxDev + "," + Result[i].Name + "," + Result[i].Notice
                                                + "," + Result[i].TimeAgentReceive + "," + Result[i].TimeClientRequest + "," + Result[i].Request.Investor.InvestorID
                                                + "," + Result[i].Request.Symbol.Name + "," + Result[i].Request.Size + "," + Result[i].Request.OpenTime
                                                + "," + Result[i].Request.OpenPrice + "," + Result[i].Request.StopLoss + "," + Result[i].Request.TakeProfit
                                                + "," + Result[i].Request.ClosePrice + "," + Result[i].Request.Commission + "," + Result[i].Request.Swap
                                                + "," + Result[i].Request.Profit + "," + Result[i].Request.ID + "," + Result[i].Request.ExpTime + "," + Result[i].Request.ClientCode
                                                + "," + Result[i].Request.IsHedged + "," + Result[i].Request.Type.ID + "," + Result[i].Request.Margin + "," + Result[i].Request.Investor.InvestorGroupInstance.Name
                                                + "," + Result[i].Request.Symbol.Digit + "," + Result[i].Request.Symbol.SpreadByDefault.ToString() + "," +
                                            /*Result[i].Request.Symbol.SpreadDifference*/ Result[i].Request.SpreaDifferenceInOpenTrade
                                                + "," + Result[i].Request.CommandCode + "|";
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        case "GetAllRequestCompare":
                            {
                                string temp = string.Empty;

                                List<Business.RequestDealer> Result = new List<RequestDealer>();
                                Result = TradingServer.Facade.FacadeGetAllRequestCompareDealer();
                                if (Result == null) temp = "-1";
                                else
                                {
                                    int count = Result.Count;
                                    for (int i = 0; i < count; i++)
                                    {
                                        temp += Result[i].AgentID + "," + Result[i].FlagConfirm + "," + Result[i].MaxDev + "," + Result[i].Name + "," + Result[i].Notice
                                                + "," + Result[i].TimeAgentReceive + "," + Result[i].TimeClientRequest + "," + Result[i].Request.Investor.InvestorID
                                                + "," + Result[i].Request.Symbol.Name + "," + Result[i].Request.Size + "," + Result[i].Request.OpenTime
                                                + "," + Result[i].Request.OpenPrice + "," + Result[i].Request.StopLoss + "," + Result[i].Request.TakeProfit
                                                + "," + Result[i].Request.ClosePrice + "," + Result[i].Request.Commission + "," + Result[i].Request.Swap
                                                + "," + Result[i].Request.Profit + "," + Result[i].Request.ID + "," + Result[i].Request.ExpTime + "," + Result[i].Request.ClientCode
                                                + "," + Result[i].Request.IsHedged + "," + Result[i].Request.Type.ID + "," + Result[i].Request.Margin + "," + Result[i].Request.Investor.InvestorGroupInstance.Name
                                                + "," + Result[i].Request.Symbol.Digit + "," + Result[i].Request.Symbol.SpreadByDefault.ToString() + "," +
                                            /*Result[i].Request.Symbol.SpreadDifference*/ Result[i].Request.SpreaDifferenceInOpenTrade
                                                + "," + Result[i].Request.CommandCode + "|";
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "GetNoticeDealer":
                            {
                                bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                if (checkip)
                                {
                                    int AgentID = -1;
                                    string[] splits = subValue[1].Split(',');
                                    if (splits.Length == 2)
                                    {
                                        int.TryParse(splits[0], out AgentID);
                                        string KeyActive = splits[1];
                                        if (AgentID > 0)
                                        {
                                            string Result = "";
                                            Result = TradingServer.Facade.FacadeGetNoticeDealer(AgentID, KeyActive);
                                            if (!string.IsNullOrEmpty(Result))
                                            {
                                                StringResult = subValue[0] + "$" + Result + ",NA28:" + DateTime.Now.Ticks;
                                            }
                                            else
                                            {
                                                StringResult = subValue[0] + "$" + ",NA28:" + DateTime.Now.Ticks;
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    StringResult = "InvalidIP$NA27";
                                }
                            }
                            break;

                        case "GetAllDealerOnline":
                            {
                                string temp = Facade.FacadeGetAllDealerOnline();
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "GetAllArchiveCandlesOffline":
                            {
                                string temp = Facade.FacadeGetAllArchiveCandlesOffline();
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "DealerCommandConfirm":
                            {
                                bool ResultAddNew = false;
                                bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                Business.RequestDealer Result = new RequestDealer();
                                Result = this.ExtractionRequestDealer(subValue[1]);
                                Facade.FillInstanceOpenTrade(Result, Result.Request);
                                if (checkip)
                                {
                                    ResultAddNew = TradingServer.Facade.FacadeDealerCommandConfirm(Result);
                                    StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                }
                                else
                                {
                                    StringResult = "InvalidIP";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, "'" + code + "': dealer confirm action not taken (invalid ip)'" + Result.Request.Investor.Code
                                                       + "' " + Result.Name.ToLower() + " " + Facade.FacadeGetTypeCommand(Result.Request.Type.ID) + " " + Result.Request.FormatDoubleToString(Result.Request.Size) + " symbol:"
                                                       + Result.Request.Symbol.Name + " price open:" + Result.Request.MapPriceForDigit(Result.Request.OpenPrice) + " price close:" + Result.Request.MapPriceForDigit(Result.Request.ClosePrice) + " sl:" + Result.Request.MapPriceForDigit(Result.Request.StopLoss)
                                                       + " tp:" + Result.Request.MapPriceForDigit(Result.Request.TakeProfit), "Invalid IP", ipAddress, code);
                                }

                            }
                            break;

                        case "DealerCommandReject":
                            {
                                bool ResultAddNew = false;
                                Business.RequestDealer Result = new RequestDealer();
                                Result = this.ExtractionRequestDealer(subValue[1]);
                                Facade.FillInstanceOpenTrade(Result, Result.Request);
                                bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                if (checkip)
                                {
                                    ResultAddNew = TradingServer.Facade.FacadeDealerCommandReject(Result);
                                    StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                }
                                else
                                {
                                    StringResult = "InvalidIP";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, "'" + code + "': dealer reject action not taken (invalid ip)'" + Result.Request.Investor.Code
                                                      + "' " + Result.Name.ToLower() + " " + Facade.FacadeGetTypeCommand(Result.Request.Type.ID) + " " + Result.Request.FormatDoubleToString(Result.Request.Size) + " symbol:"
                                                      + Result.Request.Symbol.Name + " price open:" + Result.Request.MapPriceForDigit(Result.Request.OpenPrice) + " price close:" + Result.Request.MapPriceForDigit(Result.Request.ClosePrice) + " sl:" + Result.Request.MapPriceForDigit(Result.Request.StopLoss)
                                                      + " tp:" + Result.Request.MapPriceForDigit(Result.Request.TakeProfit), "Invalid IP", ipAddress, code);
                                }
                            }
                            break;

                        case "DealerCommandReturn":
                            {
                                bool ResultAddNew = false;
                                Business.RequestDealer Result = new RequestDealer();
                                Result = this.ExtractionRequestDealer(subValue[1]);
                                Facade.FillInstanceOpenTrade(Result, Result.Request);
                                bool checkip = Facade.FacadeCheckIpManager(code, ipAddress);
                                if (checkip)
                                {
                                    ResultAddNew = TradingServer.Facade.FacadeDealerCommandReturn(Result);
                                    StringResult = subValue[0] + "$" + ResultAddNew.ToString();
                                }
                                else
                                {
                                    StringResult = "InvalidIP";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, "'" + code + "': dealer return action not taken (invalid ip)'" + Result.Request.Investor.Code
                                                      + "' " + Result.Name.ToLower() + " " + Facade.FacadeGetTypeCommand(Result.Request.Type.ID) + " " + Result.Request.FormatDoubleToString(Result.Request.Size) + " symbol:"
                                                      + Result.Request.Symbol.Name + " price open:" + Result.Request.MapPriceForDigit(Result.Request.OpenPrice) + " price close:" + Result.Request.MapPriceForDigit(Result.Request.ClosePrice) + " sl:" + Result.Request.MapPriceForDigit(Result.Request.StopLoss)
                                                      + " tp:" + Result.Request.MapPriceForDigit(Result.Request.TakeProfit), "Invalid IP", ipAddress, code);
                                }
                            }
                            break;

                        #endregion

                        #region Select Internal Mail
                        case "GetInternalMailToInvestorByID":
                            {
                                Business.InternalMail result = new InternalMail();
                                string temp = "";
                                int MailID = int.Parse(subValue[1]);
                                result = TradingServer.Facade.FacadeGetInternalMailToInvestorByID(MailID);
                                if (result != null)
                                {
                                    temp = result.InternalMailID + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.Subject) + "," +
                                        TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.From) + "," +
                                        TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.FromName) + "," +
                                        TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.Time.ToString()) + "," +
                                        result.IsNew.ToString() + "," +
                                        TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.Content);
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        case "GetFullInternalMailToInvestor":
                            {
                                string[] tem = subValue[1].Split('{');
                                string temp = "";
                                List<Business.InternalMail> result = new List<InternalMail>();
                                result = Facade.internalMailInstance.GetInternalMailToInvestor(tem[0]);
                                if (result != null)
                                {
                                    int countResult = result.Count;
                                    for (int j = 0; j < countResult; j++)
                                    {
                                        temp += result[j].InternalMailID + "█" + result[j].Subject + "█" +
                                            result[j].From + "█" + result[j].FromName + "█" + result[j].Time.ToString() + "█" +
                                            result[j].IsNew.ToString() + "█" + result[j].Content + "█";
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        case "GetInternalMailToAgentByID":
                            {
                                Business.InternalMail result = new InternalMail();
                                string temp = "";
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string[] spli = subValue[1].Split(',');
                                    int MailID = int.Parse(spli[0]);
                                    result = TradingServer.Facade.FacadeGetInternalMailToAgentByID(MailID, spli[1]);
                                    if (result != null)
                                    {
                                        temp = result.InternalMailID + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.Subject) + "," +
                                            TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.From) + "," +
                                            TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.FromName) + "," +
                                            TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.Time.ToString()) + "," +
                                            result.IsNew.ToString() + "," +
                                            TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.Content);
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        #endregion

                        #region Select Alert
                        case "SelectAlertByInvestorID":
                            {
                                string temp = string.Empty;
                                List<Business.PriceAlert> Result = new List<PriceAlert>();
                                string[] subParameter = subValue[1].Split(',');
                                if (subParameter.Length > 0)
                                {
                                    int Start = int.Parse(subParameter[0]);
                                    int End = int.Parse(subParameter[1]);
                                    int InvestorID = int.Parse(subParameter[2]);
                                    Result = TradingServer.Facade.FacadeGetAlertByInvestorID(InvestorID, Start, End);
                                    if (Result != null)
                                    {
                                        for (int n = 0; n < Result.Count; n++)
                                        {
                                            temp += Result[n].ID + "," + Result[n].Symbol + "," + Result[n].Email + "," + Result[n].PhoneNumber
                                                    + "," + Result[n].Value + "," + Result[n].AlertCondition.ToString() + "," + Result[n].AlertAction.ToString() + "," + Result[n].IsEnable
                                                    + "," + Result[n].DateCreate + "," + Result[n].DateActive + "," + Result[n].InvestorID + "," + Result[n].Notification + "|";
                                        }
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        case "GetAlertByInvestorID":
                            {
                                string temp = string.Empty;
                                List<Business.PriceAlert> Result = new List<PriceAlert>();
                                if (subValue[1] != "")
                                {
                                    int InvestorID = int.Parse(subValue[1]);
                                    Result = TradingServer.Facade.FacadeGetAlertByInvestorID(InvestorID);
                                    if (Result != null)
                                    {
                                        for (int n = 0; n < Result.Count; n++)
                                        {
                                            temp += Result[n].ID + "{" + Result[n].Symbol + "{" + Result[n].Email + "{" + Result[n].PhoneNumber
                                                    + "{" + Result[n].Value + "{" + Result[n].AlertCondition.ToString() + "{" + Result[n].AlertAction.ToString() + "{" + Result[n].IsEnable
                                                    + "{" + Result[n].DateCreate + "{" + Result[n].DateActive + "{" + Result[n].InvestorID + "{" + Result[n].Notification + "`";
                                        }
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        case "SelectAlertByInvestorIDWithTime":
                            {
                                string temp = string.Empty;
                                List<Business.PriceAlert> Result = new List<PriceAlert>();
                                string[] subParameter = subValue[1].Split(',');
                                if (subParameter.Length > 0)
                                {
                                    int InvestorID = int.Parse(subParameter[0]);
                                    DateTime Start = DateTime.Parse(subParameter[1]);
                                    DateTime End = DateTime.Parse(subParameter[2]);
                                    Result = TradingServer.Facade.FacadeGetAlertByInvestorIDWithTime(InvestorID, Start, End);
                                    if (Result != null)
                                    {
                                        for (int n = 0; n < Result.Count; n++)
                                        {
                                            temp += Result[n].ID + "," + Result[n].Symbol + "," + Result[n].Email + "," + Result[n].PhoneNumber
                                                    + "," + Result[n].Value + "," + Result[n].AlertCondition.ToString() + "," + Result[n].AlertAction.ToString() + "," + Result[n].IsEnable
                                                    + "," + Result[n].DateCreate + "," + Result[n].DateActive + "," + Result[n].InvestorID + "," + Result[n].Notification + "|";
                                        }
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        case "SelectHistoryAlertWithTime":
                            {
                                string temp = string.Empty;
                                List<Business.PriceAlert> Result = new List<PriceAlert>();
                                string[] subParameter = subValue[1].Split('{');
                                if (subParameter.Length > 0)
                                {
                                    int InvestorID = int.Parse(subParameter[0]);
                                    DateTime Start = DateTime.Parse(subParameter[1]);
                                    DateTime End = DateTime.Parse(subParameter[2]);
                                    Result = TradingServer.Facade.FacadeGetAlertByInvestorIDWithTime(InvestorID, Start, End);
                                    if (Result != null)
                                    {
                                        for (int n = 0; n < Result.Count; n++)
                                        {
                                            temp += Result[n].ID + "{" + Result[n].Symbol + "{" + Result[n].Email + "{" + Result[n].PhoneNumber
                                                    + "{" + Result[n].Value + "{" + Result[n].AlertCondition.ToString() + "{" + Result[n].AlertAction.ToString() + "{" + Result[n].IsEnable
                                                    + "{" + Result[n].DateCreate + "{" + Result[n].DateActive + "{" + Result[n].InvestorID + "{" + Result[n].Notification + "`";
                                        }
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        #endregion

                        #region Select Permit
                        case "SelectPermit":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string temp = string.Empty;
                                    List<Business.Permit> Result = new List<Permit>();
                                    Result = TradingServer.Facade.FacadeGetAllPermit();

                                    if (Result != null)
                                    {
                                        int countAgent = Result.Count;
                                        for (int n = 0; n < countAgent; n++)
                                        {
                                            temp += Result[n].PermitID.ToString() + "," + Result[n].AgentGroupID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].Role.RoleID.ToString() + "|";
                                        }
                                    }

                                    StringResult = subValue[0] + "$" + temp;
                                }
                            }
                            break;

                        case "SelectPermitByID":
                            {
                                string temp = string.Empty;
                                int PermitID = -1;
                                int.TryParse(subValue[1], out PermitID);
                                Business.Permit Result = new Permit();

                                Result = TradingServer.Facade.FacadeGetPermitByPermitID(PermitID);

                                if (Result != null)
                                {
                                    temp += Result.PermitID.ToString() + "," + Result.AgentGroupID.ToString() + "," + Result.AgentID.ToString() + "," + Result.Role.RoleID.ToString();
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "GetCodeAgentSendMailByInvestorGroupID":
                            {
                                string temp = string.Empty;
                                int GroupID = -1;
                                int.TryParse(subValue[1], out GroupID);
                                List<Business.Agent> Result = new List<Agent>();
                                Result = TradingServer.Facade.FacadeGetCodeAgentMailByInvestorGroupID(GroupID);
                                if (Result != null)
                                {
                                    for (int i = 0; i < Result.Count; i++)
                                    {
                                        if (Result[i].Name != "" & Result[i].Code != "")
                                        {
                                            temp += Result[i].Name + "," + Result[i].Code + "|";
                                        }
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "SelectPermitByAgentID":
                            {
                                string temp = string.Empty;
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int AgentID = -1;
                                    int.TryParse(subValue[1], out AgentID);
                                    List<Business.Permit> Result = new List<Permit>();

                                    Result = TradingServer.Facade.FacadeGetPermitByAgentID(AgentID);
                                    if (Result != null)
                                    {
                                        int countAgent = Result.Count;
                                        for (int n = 0; n < countAgent; n++)
                                        {
                                            temp += Result[n].PermitID.ToString() + "," + Result[n].AgentGroupID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].Role.RoleID.ToString() + "|";
                                        }
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        #endregion

                        #region Select Role
                        case "SelectRole":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string temp = string.Empty;
                                    List<Business.Role> Result = new List<Role>();
                                    Result = TradingServer.Facade.FacadeGetAllRole();

                                    if (Result != null)
                                    {
                                        int countAgent = Result.Count;
                                        for (int n = 0; n < countAgent; n++)
                                        {
                                            temp += Result[n].RoleID.ToString() + "," + Result[n].Code + "," + Result[n].Name + "," + Result[n].Comment + "|";
                                        }
                                    }

                                    StringResult = subValue[0] + "$" + temp;
                                }
                            }
                            break;

                        case "SelectRoleByID":
                            {
                                string temp = string.Empty;
                                int RoleID = -1;
                                int.TryParse(subValue[1], out RoleID);
                                Business.Role Result = new Role();

                                Result = TradingServer.Facade.FacadeGetRoleByRoleID(RoleID);

                                if (Result != null)
                                {
                                    temp += Result.RoleID.ToString() + "," + Result.Code + "," + Result.Name + "," + Result.Comment;
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        #endregion

                        #region Select IAgentSecurity
                        case "SelectIAgentSecurity":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string temp = string.Empty;
                                    List<Business.IAgentSecurity> Result = new List<IAgentSecurity>();
                                    Result = TradingServer.Facade.FacadeGetIAgentSecurity();

                                    if (Result != null)
                                    {
                                        int countInvestor = Result.Count;
                                        for (int n = 0; n < countInvestor; n++)
                                        {
                                            temp += Result[n].IAgentSecurityID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].SecurityID.ToString()
                                                    + "," + Result[n].Use.ToString() + "," + Result[n].MinLots.ToString() + "," + Result[n].MaxLots.ToString() + "|";
                                        }
                                    }

                                    StringResult = subValue[0] + "$" + temp;
                                }
                            }
                            break;

                        case "SelectIAgentSecurityByID":
                            {
                                string temp = string.Empty;
                                int IAgentSecurityID = -1;
                                int.TryParse(subValue[1], out IAgentSecurityID);
                                Business.IAgentSecurity Result = new IAgentSecurity();

                                Result = TradingServer.Facade.FacadeGetIAgentSecurityByID(IAgentSecurityID);

                                if (Result != null)
                                {
                                    temp = Result.IAgentSecurityID.ToString() + "," + Result.AgentID.ToString() + "," + Result.SecurityID.ToString() + "," + Result.Use.ToString() + "," + Result.MinLots.ToString() + "," + Result.MaxLots.ToString();
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "SelectIAgentSecurityByAgentID":
                            {
                                string temp = string.Empty;
                                int AgentID = -1;
                                int.TryParse(subValue[1], out AgentID);
                                List<Business.IAgentSecurity> Result = new List<Business.IAgentSecurity>();

                                Result = TradingServer.Facade.FacadeGetIAgentSecurityByAgentID(AgentID);

                                if (Result != null)
                                {
                                    int countInvestor = Result.Count;
                                    for (int n = 0; n < countInvestor; n++)
                                    {
                                        temp += Result[n].IAgentSecurityID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].SecurityID.ToString()
                                                 + "," + Result[n].Use.ToString() + "," + Result[n].MinLots.ToString() + "," + Result[n].MaxLots.ToString() + "|";
                                    }
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "SelectIAgentSecurityBySecurityID":
                            {
                                string temp = string.Empty;
                                int SecurityID = -1;
                                int.TryParse(subValue[1], out SecurityID);
                                List<Business.IAgentSecurity> Result = new List<Business.IAgentSecurity>();

                                Result = TradingServer.Facade.FacadeGetIAgentSecurityBySecurityID(SecurityID);

                                if (Result != null)
                                {
                                    int countInvestor = Result.Count;
                                    for (int n = 0; n < countInvestor; n++)
                                    {
                                        temp += Result[n].IAgentSecurityID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].SecurityID.ToString()
                                             + "," + Result[n].Use.ToString() + "," + Result[n].MinLots.ToString() + "," + Result[n].MaxLots.ToString() + "|";
                                    }
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        #endregion

                        #region Select IAgentGroup
                        case "SelectIAgentGroup":
                            {
                                string temp = string.Empty;
                                List<Business.IAgentGroup> Result = new List<IAgentGroup>();
                                Result = TradingServer.Facade.FacadeGetAllIAgentGroup();

                                if (Result != null)
                                {
                                    int countInvestor = Result.Count;
                                    for (int n = 0; n < countInvestor; n++)
                                    {
                                        temp += Result[n].IAgentGroupID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "|";
                                    }
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "SelectIAgentGroupByID":
                            {
                                string temp = string.Empty;
                                int IAgentGroupID = -1;
                                int.TryParse(subValue[1], out IAgentGroupID);
                                Business.IAgentGroup Result = new IAgentGroup();

                                Result = TradingServer.Facade.FacadeGetIAgentGroupByIAgentGroupID(IAgentGroupID);

                                if (Result != null)
                                {
                                    temp = Result.IAgentGroupID.ToString() + "," + Result.AgentID.ToString() + "," + Result.InvestorGroupID.ToString();
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "SelectIAgentGroupByAgentID":
                            {
                                string temp = string.Empty;
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int AgentID = -1;
                                    int.TryParse(subValue[1], out AgentID);
                                    List<Business.IAgentGroup> Result = new List<Business.IAgentGroup>();

                                    Result = TradingServer.Facade.FacadeGetIAgentGroupByAgentID(AgentID);

                                    if (Result != null)
                                    {
                                        int countInvestor = Result.Count;
                                        for (int n = 0; n < countInvestor; n++)
                                        {
                                            temp += Result[n].IAgentGroupID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "|";
                                        }
                                    }
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        case "SelectIAgentSecurityByInvestorGroupID":
                            {
                                string temp = string.Empty;
                                int InvestorGroupID = -1;
                                int.TryParse(subValue[1], out InvestorGroupID);
                                List<Business.IAgentGroup> Result = new List<Business.IAgentGroup>();

                                Result = TradingServer.Facade.FacadeGetIAgentGroupByInvestorGroupID(InvestorGroupID);

                                if (Result != null)
                                {
                                    int countInvestor = Result.Count;
                                    for (int n = 0; n < countInvestor; n++)
                                    {
                                        temp += Result[n].IAgentGroupID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "|";
                                    }
                                }

                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;

                        #endregion

                        #region Select Market Area
                        case "SelectMarketArea":
                            {
                                string temp = string.Empty;
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    temp = this.ExtractSelectMarketArea();
                                }
                                StringResult = subValue[0] + "$" + temp;
                            }
                            break;
                        #endregion

                        #region SELECT OPEN TRADE(LOG COMMENT)
                        case "GetOpenTradeByID":
                            {
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    int OpenTradeID = -1;
                                    int.TryParse(subValue[1], out OpenTradeID);
                                    Business.OpenTrade Result = new OpenTrade();
                                    Result = TradingServer.Facade.FacadeGetOpenTradeByOpenTradeID(OpenTradeID);

                                    if (Result.Symbol != null && Result.Investor != null)
                                    {
                                        StringResult = subValue[0] + "$" + Result.ClientCode + "," + Result.ClosePrice + "," + Result.CloseTime + "," +
                                                        Result.CommandCode + "," + Result.Commission + "," + Result.ExpTime + "," +
                                                        Result.ID + "," + Result.Investor.InvestorID + "," + Result.IsClose + "," +
                                                        Result.IsHedged + "," + Result.Margin + "," + Result.MaxDev + "," + Result.OpenPrice + "," +
                                                        Result.OpenTime + "," + Result.Profit + "," + Result.Size + "," + Result.StopLoss + "," +
                                                        Result.Swap + "," + Result.Symbol.Name + "," + Result.TakeProfit + "," + Result.Taxes + "," +
                                                        Result.Type.Name + "," + Result.Type.ID + "," + Result.Symbol.ContractSize + "," +
                                            /*Result.Symbol.SpreadDifference*/ +Result.SpreaDifferenceInOpenTrade + "," + Result.Symbol.Currency + "," +
                                            Result.Comment + "," + Result.AgentCommission;
                                    }

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': 22450 accounts have been requested
                                    //int num = 0;
                                    //if (Result.ID > 0)
                                    //    num = 1;

                                    //string content = "'" + code + "': " + num + " accounts have been requested";
                                    //string comment = "[account request]";
                                    //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    #endregion
                                }
                            }
                            break;
                        #endregion

                        #region SELECT ORDER DATA
                        case "GetListFiles":
                            {
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                bool checkPermit = Facade.FacadeCheckPermitDownloadStatement(code);
                                if (checkip)
                                {
                                    if (checkPermit)
                                    {
                                        DateTime from = new DateTime();
                                        DateTime to = new DateTime();
                                        string[] times = subValue[1].Split('{');
                                        if (times.Length == 2)
                                        {
                                            from = DateTime.Parse(times[0]);
                                            to = DateTime.Parse(times[1]);
                                            StringResult = subValue[0] + "$" + Model.TradingCalculate.Instance.GetFileInfo(from, to);
                                        }
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + "MCM006";
                                    }
                                }
                            }
                            break;
                        case "GetFileContents":
                            {
                                bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                bool checkPermit = Facade.FacadeCheckPermitDownloadStatement(code);
                                if (checkip)
                                {
                                    if (checkPermit)
                                    {
                                        if (subValue[1] != "")
                                        {
                                            StringResult = subValue[0] + "$" + Model.TradingCalculate.Instance.GetContenFile(subValue[1]);
                                        }
                                    }
                                    else
                                    {
                                        StringResult = subValue[0] + "$" + "MCM006";
                                    }
                                }
                            }
                            break;
                        case "GetOrderByCode":
                            {
                                Business.OrderData Result = new OrderData();
                                Result = TradingServer.Facade.FacadeGetOrderDataByCode(subValue[1]);
                                if (!string.IsNullOrEmpty(Result.Code))
                                {
                                    StringResult = subValue[0] + "$" + Result.Login + "," + Result.Type + "," +
                                                    Result.OpenTime + "," + Result.CloseTime + "," + Result.OneConvRate + "," +
                                                    Result.Commission + "," + Result.Comment + "," + Result.ExpDate + "," +
                                                    Result.Lots + "," + Result.OpenPrice + "," + Result.ClosePrice + "," +
                                                    Result.TwoConvRate + "," + Result.AgentCommission + "," + Result.ValueDate + "," +
                                                    Result.Symbol + "," + Result.StopLoss + "," + Result.TakeProfit + "," +
                                                    Result.MarginRate + "," + Result.Swaps + "," + Result.Taxes + "," + Result.Profit + "," +
                                                    Result.OrderCode + "," + Result.Code;
                                }
                            }
                            break;
                        #endregion

                        #region CHECK PASSWORD
                        case "VerifyMaster":
                            {
                                bool resultCheck = false;
                                string[] subParameter = subValue[1].Split(',');
                                if (subParameter.Length == 2)
                                {
                                    int investorID = 0;
                                    bool check = int.TryParse(subParameter[0], out investorID);
                                    if (check)
                                    {
                                        Business.Investor tempInvestor = new Investor();
                                        tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(investorID);
                                        bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress);
                                        if (checkip)
                                        {
                                            bool checkRule = Facade.FacadeCheckPermitAccountManagerAndAdmin(code);
                                            bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempInvestor.InvestorGroupInstance.InvestorGroupID);
                                            if (checkRule && checkGroup)
                                            {
                                                resultCheck = TradingServer.Facade.FacadeCheckMasterPassword(investorID, subParameter[1]);
                                                if (resultCheck)
                                                {
                                                    string content = "'" + code + "': checking password of '" + tempInvestor.Code + "' [Success]";
                                                    string comment = "[verify password]";
                                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                                }
                                                else
                                                {
                                                    string content = "'" + code + "': checking password of '" + tempInvestor.Code + "' [Failed]";
                                                    string comment = "[verify password]";
                                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                                }
                                                StringResult = subValue[0] + "$" + resultCheck;
                                            }
                                            else
                                            {
                                                StringResult = subValue[0] + "$MCM006";
                                                string content = "'" + code + "': checking password of '" + tempInvestor.Code + "' failed(not enough rights)";
                                                string comment = "[verify password]";
                                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                            }
                                        }
                                        else
                                        {
                                            StringResult = subValue[0] + "$" + "MCM005";
                                            string content = "'" + code + "': checking password of '" + tempInvestor.Code + "' failed(invalid ip)";
                                            string comment = "[verify password]";
                                            TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                        }
                                    }
                                }

                            }
                            break;
                        #endregion

                        #region GET TIME SERVER
                        case "GetTimeServer":
                            {
                                long time = 0;
                                time = TradingServer.ClientFacade.FacadeGetTimeZoneServer();
                                StringResult = subValue[0] + "$" + time;
                            }
                            break;
                        #endregion

                        #region MANUAL SEND REPORT
                        case "ManualSendReport":
                            {
                                string[] subParameter = subValue[1].Split(',');
                                //string investorCode = subParameter[0];
                                //DateTime timeStart = DateTime.Parse(subParameter[1]);
                                //DateTime timeEnd = DateTime.Parse(subParameter[2]);

                                Business.TimeEvent newTimeEvent = new TimeEvent();
                                //Market.marketInstance.SendReportDayManaual(investorCode, timeStart, timeEnd);
                                marketInstance.SendReportDay("All,", newTimeEvent);
                            }
                            break;

                        case "ManualSendReportMonth":
                            {
                                string[] subParameter = subValue[1].Split(',');

                                Business.TimeEvent newTimeEvent = new TimeEvent();
                                marketInstance.SendReportMonth("All", newTimeEvent);
                            }
                            break;
                        #endregion

                        #region MANUAL CALCULATION SWAP
                        case "ManualCalculationSwap":
                            {
                                Business.TimeEvent newTimeEvent = new TimeEvent();
                                marketInstance.BeginCalculationSwap("All", newTimeEvent);
                            }
                            break;
                        #endregion

                        #region VIRTUAL DEALER
                        case "KD312":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string status = "[Failed]";
                                    VirtualDealer vd = new VirtualDealer();
                                    string result = vd.MapDealer(subValue[1]);
                                    int id;
                                    int.TryParse(result, out id);
                                    if (id == 1)
                                    {
                                        result = vd.AddDealer();
                                        status = "[Success]";
                                    }
                                    string content = "'" + code + "': robot dealer config added/changed ['" + vd.Name + "'] " + status;
                                    string comment = "[add new robot dealer]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    StringResult = subValue[0] + "$" + result;
                                }
                            }
                            break;

                        case "KD341":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string status = "[Failed]",contentChange = "";
                                    VirtualDealer vd = new VirtualDealer();
                                    string result = vd.MapDealer(subValue[1]);
                                    int id;
                                    int.TryParse(result, out id);
                                    if (id == 1)
                                    {
                                        contentChange = vd.MapChangeContentConfigVD();
                                        result = vd.UpdateDealer();
                                        status = "[Success]";
                                    }
                                    string content = "'" + code + "': update config robot dealer '" + vd.Name + "': " + contentChange + " " + status;
                                    string comment = "[update config robot dealer]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    StringResult = subValue[0] + "$" + result;
                                }
                            }
                            break;

                        case "KD485":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string status = "[Failed]";
                                    int id;
                                    int.TryParse(subValue[1], out id);
                                    string result = "0";
                                    VirtualDealer vd = new VirtualDealer();
                                    if (id > 0)
                                    {
                                        vd.ID = id;
                                        result = vd.DeleteDealer(id);
                                        status = "[Success]";
                                    }
                                    string content = "'" + code + "': delete robot dealer ['" + vd.Name + "'] " + status;
                                    string comment = "[delete config robot dealer]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    StringResult = subValue[0] + "$" + result;
                                }
                            }
                            break;

                        case "KD678":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string status = "[Failed]", contentChange = "";
                                    VirtualDealer vd = new VirtualDealer();
                                    string result = vd.MapDealer(subValue[1]);
                                    int id;
                                    int.TryParse(result, out id);
                                    if (id == 1)
                                    {
                                        contentChange = vd.MapChangeContentConfigVD();
                                        result = vd.UpdateDealerInfo();
                                        status = "[Success]";
                                    }
                                    string content = "'" + code + "': update config robot dealer '" + vd.Name + "': " + contentChange + " " + status;
                                    string comment = "[update config robot dealer]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    StringResult = subValue[0] + "$" + result;
                                }
                            }
                            break;

                        case "KD346":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string result = "";
                                    VirtualDealer vd = new VirtualDealer();
                                    List<VirtualDealer> vds = new List<VirtualDealer>();
                                    vds = vd.GetAllVirtualDealer();
                                    for (int i = 0; i < vds.Count; i++)
                                    {
                                        result += vds[i].ExtractDealer() + "[";
                                    }
                                    StringResult = subValue[0] + "$" + result;
                                }
                            }
                            break;

                        case "KD394":
                            {
                                bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                                if (checkip)
                                {
                                    string status = "[Failed]", contentChange = "";
                                    VirtualDealer vd = new VirtualDealer();
                                    string result = vd.MapDealer(subValue[1]);
                                    int id;
                                    int.TryParse(result, out id);
                                    if (id == 1)
                                    {
                                        contentChange = vd.MapChangeContentConfigVD();
                                        result = vd.UpdateDealerSymbol();
                                        status = "[Success]";
                                    }
                                    string content = "'" + code + "': update config robot dealer '" + vd.Name + "': " + contentChange + " " + status;
                                    string comment = "[update config robot dealer]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    StringResult = subValue[0] + "$" + result;
                                }
                            }
                            break;
                        #endregion

                        #region MONITOR STATUS SYMBOL
                        case "MonitorSymbol":
                            {
                                if (Business.Market.SymbolList != null)
                                {
                                    int count = Business.Market.SymbolList.Count;
                                    for (int j = 0; j < count; j++)
                                    {
                                        if (Business.Market.SymbolList[j].Name == subValue[1])
                                        {
                                            StringResult = subValue[0] + "$Trade Status: " + Business.Market.SymbolList[j].IsTrade + "- Quote Status: " + Business.Market.SymbolList[j].IsQuote;
                                            break;
                                        }
                                    }
                                }
                            }
                            break;
                        #endregion

                        #region COMMAND GET CLIENT LOG
                        case "GetClientLog":
                            {
                                //GetClientLog$LoginCode{StartTime{EndTime
                                string[] subCommand = subValue[1].Split('{');
                                if (subCommand.Length > 0)
                                {
                                    //int investorID = int.Parse(subCommand[0]);
                                    DateTime timeStart = DateTime.Parse(subCommand[1]);
                                    DateTime timeEnd = DateTime.Parse(subCommand[2]);

                                    if (Business.Market.InvestorList != null)
                                    {
                                        bool isExists = false;
                                        int count = Business.Market.InvestorList.Count;
                                        for (int i = 0; i < count; i++)
                                        {
                                            if (Business.Market.InvestorList[i].Code == subCommand[0])
                                            {
                                                #region PROCESS CHECK CLIENT IN MARKET
                                                if (Business.Market.ListClientLogs != null && Business.Market.ListClientLogs.Count > 0)
                                                {
                                                    int countClientLog = Business.Market.ListClientLogs.Count;

                                                    for (int j = 0; j < count; j++)
                                                    {
                                                        if (Business.Market.ListClientLogs[j].AdminCode == code)
                                                        {
                                                            Business.Market.ListClientLogs[j].InvestorID = Business.Market.InvestorList[i].InvestorID;
                                                            Business.Market.ListClientLogs[j].InvestorCode = subCommand[0];
                                                            Business.Market.ListClientLogs[j].IsComplete = false;
                                                            Business.Market.ListClientLogs[j].ClientLogs = new List<string>();

                                                            isExists = true;
                                                            break;
                                                        }
                                                    }
                                                }

                                                if (!isExists)
                                                {
                                                    Business.ClientLog newClientLog = new ClientLog();
                                                    newClientLog.InvestorID = Business.Market.InvestorList[i].InvestorID;
                                                    newClientLog.InvestorCode = subCommand[0];
                                                    newClientLog.AdminCode = code;
                                                    newClientLog.IsComplete = false;
                                                    newClientLog.ClientLogs = new List<string>();

                                                    Business.Market.ListClientLogs.Add(newClientLog);
                                                }
                                                #endregion

                                                //SEND COMMAND TO CLIENT REQUEST LOG
                                                string strRequestActionLog = "ServerRequestLog$" + subCommand[0] + "{" + timeStart + "{" + timeEnd;
                                                Business.Market.InvestorList[i].ClientCommandQueue.Add(strRequestActionLog);

                                                System.Threading.Thread.Sleep(1000);
                                                StringResult = subValue[0] + "$True";
                                                isExists = true;

                                                break;
                                            }
                                        }

                                        if (!isExists)
                                            StringResult = subValue[0] + "$False";
                                    }
                                }
                                else
                                {
                                    StringResult = subValue[0] + "$False";
                                }
                            }
                            break;
                        #endregion
                    }
                }
            }

            return StringResult;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="investorID"></param>
        /// <param name="investorName"></param>
        /// <param name="investorIndex"></param>
        /// <returns></returns>
        public static string FacadeGetData(int investorID, int investorIndex, string key, int port, string keyConfirm)
        {
            string result = string.Empty;
            string resultBackup = string.Empty;
            string resultCommand = string.Empty;
            List<string> tempResult = new List<string>();
            result = ClientFacade.GetNewTickOnInvestorOnline(investorID, key, port);

            Business.TypeLogin type = ClientFacade.GetTypeLogin(investorID, key);

            #region REMOVE CHAR
            //Remove Charater end "♦"
            if (result.Length > 1)
            {
                result = result.Remove(result.Length - 1);
            }
            //Add Character Start "◊"
            result += "◊";
            #endregion

            bool isValidKey = false;
            if (type == Business.TypeLogin.Primary)
            {
                Business.Investor newInvestor = new Business.Investor();
                if (investorIndex >= 0 && investorIndex <= Business.Market.InvestorList.Count - 1)
                {
                    newInvestor = Business.Market.InvestorList[investorIndex];
                    if (newInvestor != null && newInvestor.InvestorID > 0 && newInvestor.InvestorID == investorID && newInvestor.LoginKey == key)
                    {
                        #region CHECK STATUS INVESTOR
                        if (!newInvestor.IsOnline)
                        {
                            if (newInvestor.IsLogout)
                                return string.Empty;

                            newInvestor.IsOnline = true;

                            newInvestor.AddInvestorToInvestorOnline(newInvestor);
                        }
                        #endregion

                        Business.Market.InvestorList[investorIndex].LastConnectTime = DateTime.Now;

                        #region GET CLIENT COMMAND SERVER
                        if (newInvestor.ClientCommandQueue != null)
                        {
                            int countMessage = newInvestor.ClientCommandQueue.Count;
                            for (int n = 0; n < newInvestor.ClientCommandQueue.Count; n++)
                            {
                                try
                                {
                                    if (newInvestor.ClientCommandQueue[0] != null)
                                    {
                                        result += newInvestor.ClientCommandQueue[0] + "▼";
                                        resultBackup += newInvestor.ClientCommandQueue[0] + "▼";

                                        if (newInvestor.ClientCommandQueue[0] == "OLOFF14790251")
                                        {
                                            newInvestor.ClientCommandQueue.RemoveAt(0);
                                            continue;
                                        }
                                        else
                                        {
                                            tempResult.Add(newInvestor.ClientCommandQueue[0]);
                                            newInvestor.ClientCommandQueue.RemoveAt(0);
                                        }

                                        //newInvestor.ClientCommandQueue.RemoveAt(0);
                                    }
                                    else
                                    {
                                        newInvestor.ClientCommandQueue.RemoveAt(0);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    string _temp = ex.Message + " - GetData";
                                    TradingServer.Facade.FacadeAddNewSystemLog(6, _temp, "[Exception]", "", newInvestor.Code);
                                }
                            }
                        }
                        #endregion

                        #region ADD COMMAND TO INVESTOR LOGIN WITH PASSWORD READ ONLY
                        if (Business.Market.InvestorOnline != null)
                        {
                            for (int n = 0; n < Business.Market.InvestorOnline.Count; n++)
                            {
                                if (Business.Market.InvestorOnline[n].InvestorID == investorID && Business.Market.InvestorOnline[n].LoginKey != key)
                                {
                                    if (tempResult != null)
                                    {
                                        int countMessage = tempResult.Count;
                                        for (int m = 0; m < countMessage; m++)
                                        {
                                            Business.Market.InvestorOnline[n].ClientCommandQueue.Add(tempResult[m]);
                                        }
                                    }
                                }
                                else
                                {
                                    if (Business.Market.InvestorOnline[n].InvestorID == investorID && Business.Market.InvestorOnline[n].LoginKey == key)
                                    {
                                        if (Business.Market.InvestorOnline[n].ClientCommandQueue != null)
                                        {
                                            for (int m = 0; m < Business.Market.InvestorOnline[n].ClientCommandQueue.Count; m++)
                                            {
                                                try
                                                {
                                                    if (Business.Market.InvestorOnline[n].ClientCommandQueue[0] != null)
                                                    {
                                                        result += Business.Market.InvestorOnline[n].ClientCommandQueue[0] + "▼";
                                                        Business.Market.InvestorOnline[n].ClientCommandQueue.RemoveAt(0);
                                                    }
                                                    else
                                                    {
                                                        Business.Market.InvestorOnline[n].ClientCommandQueue.RemoveAt(0);
                                                    }
                                                }
                                                catch (Exception ex)
                                                {

                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        #endregion

                        #region PROCESS DATA BACKUP
                        if (port == 0)
                        {
                            string backupCommand = string.Empty;

                            if (newInvestor.BackupQueue != null)
                            {
                                int countBackup = newInvestor.BackupQueue.Count;
                                for (int n = 0; n < newInvestor.BackupQueue.Count; n++)
                                {
                                    if (newInvestor.BackupQueue[n].Key == keyConfirm)
                                    {
                                        newInvestor.BackupQueue.RemoveAt(n);
                                        n--;
                                    }
                                    else
                                    {
                                        backupCommand += newInvestor.BackupQueue[n].CommandQueue + "▼";
                                        newInvestor.BackupQueue.RemoveAt(n);
                                        n--;
                                    }
                                }
                            }

                            if (backupCommand.EndsWith("▼"))
                                backupCommand = backupCommand.Remove(backupCommand.Length - 1, 1);

                            string keyBackup = DateTime.Now.Ticks.ToString();
                            if (!string.IsNullOrEmpty(backupCommand))
                                result += "▼" + backupCommand + ">" + keyBackup;
                            else
                                result += ">" + keyBackup;

                            //ADD COMMAND TO BACKUP QUEUE OF INVESTOR
                            Business.BackupQueue newBackupQueue = new Business.BackupQueue();
                            newBackupQueue.Key = keyBackup;
                            newBackupQueue.CommandQueue = resultBackup + backupCommand;
                            newInvestor.BackupQueue.Add(newBackupQueue);
                        }
                        #endregion

                        isValidKey = true;
                    }
                    else
                    {
                        #region SEARCH INVESTOR IN INVESTOR LIST OF CLASS MARKET
                        if (Business.Market.InvestorList != null)
                        {
                            bool flag = false;
                            int countInvestor = Business.Market.InvestorList.Count;
                            for (int j = 0; j < Business.Market.InvestorList.Count; j++)
                            {
                                if (Business.Market.InvestorList[j].LoginKey != null)
                                {
                                    if (Business.Market.InvestorList[j].InvestorID == investorID &&
                                        Business.Market.InvestorList[j].LoginKey == key)
                                    {
                                        #region CHECK STATUS INVESTOR
                                        if (!Business.Market.InvestorList[j].IsOnline)
                                        {
                                            if (Business.Market.InvestorList[j].IsLogout)
                                                return string.Empty;

                                            Business.Market.InvestorList[j].IsOnline = true;

                                            Business.Market.InvestorList[j].AddInvestorToInvestorOnline(Business.Market.InvestorList[j]);
                                        }
                                        #endregion

                                        Business.Market.InvestorList[j].LastConnectTime = DateTime.Now;
                                        Business.Market.InvestorList[j].InvestorIndex = j;

                                        //SEND COMMAND UPDATE INVESTOR INDEX
                                        if (Business.Market.InvestorList[j].ClientCommandQueue == null)
                                            Business.Market.InvestorList[j].ClientCommandQueue = new List<string>();

                                        string messageChangeIndex = "CII00434543$" + Business.Market.InvestorList[j].InvestorIndex;

                                        Business.Market.InvestorList[j].ClientCommandQueue.Add(messageChangeIndex);

                                        #region GET CLIENT COMMAND SERVER
                                        if (Business.Market.InvestorList[j].ClientCommandQueue != null)
                                        {
                                            int countMessage = Business.Market.InvestorList[j].ClientCommandQueue.Count;
                                            for (int n = 0; n < Business.Market.InvestorList[j].ClientCommandQueue.Count; n++)
                                            {
                                                try
                                                {
                                                    if (Business.Market.InvestorList[j].ClientCommandQueue[0] != null)
                                                    {
                                                        result += Business.Market.InvestorList[j].ClientCommandQueue[0] + "▼";
                                                        resultBackup += Business.Market.InvestorList[j].ClientCommandQueue[0] + "▼";

                                                        if (Business.Market.InvestorList[j].ClientCommandQueue[0] == "OLOFF14790251")
                                                        {
                                                            Business.Market.InvestorList[j].ClientCommandQueue.RemoveAt(0);
                                                            continue;
                                                        }

                                                        tempResult.Add(Business.Market.InvestorList[j].ClientCommandQueue[0]);
                                                        Business.Market.InvestorList[j].ClientCommandQueue.RemoveAt(0);
                                                    }
                                                    else
                                                    {
                                                        Business.Market.InvestorList[j].ClientCommandQueue.RemoveAt(0);
                                                    }
                                                }
                                                catch (Exception ex)
                                                {

                                                }
                                            }
                                        }
                                        #endregion

                                        #region ADD COMMAND TO INVESTOR LOGIN WITH PASSWORD READ ONLY
                                        if (Business.Market.InvestorOnline != null)
                                        {
                                            for (int n = 0; n < Business.Market.InvestorOnline.Count; n++)
                                            {
                                                if (Business.Market.InvestorOnline[n].InvestorID == investorID && Business.Market.InvestorOnline[n].LoginKey != key)
                                                {
                                                    if (tempResult != null)
                                                    {
                                                        int countMessage = tempResult.Count;
                                                        for (int m = 0; m < countMessage; m++)
                                                        {
                                                            Business.Market.InvestorOnline[n].ClientCommandQueue.Add(tempResult[m]);
                                                        }
                                                    }
                                                }
                                                else
                                                {
                                                    if (Business.Market.InvestorOnline[n].InvestorID == investorID && Business.Market.InvestorOnline[n].LoginKey == key)
                                                    {
                                                        if (Business.Market.InvestorOnline[n].ClientCommandQueue != null)
                                                        {
                                                            for (int m = 0; m < Business.Market.InvestorOnline[n].ClientCommandQueue.Count; m++)
                                                            {
                                                                try
                                                                {
                                                                    if (Business.Market.InvestorOnline[n].ClientCommandQueue[0] != null)
                                                                    {
                                                                        result += Business.Market.InvestorOnline[n].ClientCommandQueue[0] + "▼";
                                                                        Business.Market.InvestorOnline[n].ClientCommandQueue.RemoveAt(0);
                                                                    }
                                                                    else
                                                                    {
                                                                        Business.Market.InvestorOnline[n].ClientCommandQueue.RemoveAt(0);
                                                                    }
                                                                }
                                                                catch (Exception ex)
                                                                {

                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        #endregion

                                        #region PROCESS DATA BACKUP
                                        if (port == 0)
                                        {
                                            string backupCommand = string.Empty;

                                            if (Business.Market.InvestorList[j].BackupQueue != null)
                                            {
                                                int countBackup = Business.Market.InvestorList[j].BackupQueue.Count;
                                                for (int n = 0; n < Business.Market.InvestorList[j].BackupQueue.Count; n++)
                                                {
                                                    if (Business.Market.InvestorList[j].BackupQueue[n].Key == keyConfirm)
                                                    {
                                                        Business.Market.InvestorList[j].BackupQueue.RemoveAt(n);
                                                        n--;
                                                    }
                                                    else
                                                    {
                                                        backupCommand += Business.Market.InvestorList[j].BackupQueue[n].CommandQueue + "▼";
                                                        Business.Market.InvestorList[j].BackupQueue.RemoveAt(n);
                                                        n--;
                                                    }
                                                }
                                            }

                                            if (backupCommand.EndsWith("▼"))
                                                backupCommand = backupCommand.Remove(backupCommand.Length - 1, 1);

                                            string keyBackup = DateTime.Now.Ticks.ToString();
                                            if (!string.IsNullOrEmpty(backupCommand))
                                                result += "▼" + backupCommand + ">" + keyBackup;
                                            else
                                                result += ">" + keyBackup;

                                            //ADD COMMAND TO BACKUP QUEUE OF INVESTOR
                                            Business.BackupQueue newBackupQueue = new Business.BackupQueue();
                                            newBackupQueue.Key = keyBackup;
                                            newBackupQueue.CommandQueue = resultBackup + backupCommand;
                                            Business.Market.InvestorList[j].BackupQueue.Add(newBackupQueue);
                                        }
                                        #endregion

                                        flag = true;
                                        isValidKey = true;
                                        break;
                                    }
                                }
                            }

                            if (!flag)
                            {
                                #region GET MESSAGE SERVER FROM INVESTOR ONLINE
                                if (Business.Market.InvestorOnline != null)
                                {
                                    for (int i = 0; i < Business.Market.InvestorOnline.Count; i++)
                                    {
                                        if (Business.Market.InvestorOnline[i].InvestorID == investorID && Business.Market.InvestorOnline[i].LoginKey == key)
                                        {
                                            if (Business.Market.InvestorOnline[i].ClientCommandQueue != null)
                                            {
                                                int countMessage = Business.Market.InvestorOnline[i].ClientCommandQueue.Count;
                                                for (int j = 0; j < Business.Market.InvestorOnline[i].ClientCommandQueue.Count; j++)
                                                {
                                                    try
                                                    {
                                                        if (Business.Market.InvestorOnline[i].ClientCommandQueue[0] != null)
                                                        {
                                                            result += Business.Market.InvestorOnline[i].ClientCommandQueue[0] + "▼";
                                                            resultBackup += Business.Market.InvestorOnline[i].ClientCommandQueue[0] + "▼";

                                                            Business.Market.InvestorOnline[i].ClientCommandQueue.RemoveAt(0);
                                                        }
                                                        else
                                                        {
                                                            Business.Market.InvestorOnline[i].ClientCommandQueue.RemoveAt(0);
                                                        }
                                                    }
                                                    catch (Exception ex)
                                                    {

                                                    }
                                                }
                                            }

                                            #region PROCESS DATA BACKUP
                                            if (port == 0)
                                            {
                                                string backupCommand = string.Empty;

                                                if (Business.Market.InvestorOnline[i].BackupQueue != null)
                                                {
                                                    int countBackup = Business.Market.InvestorOnline[i].BackupQueue.Count;
                                                    for (int n = 0; n < Business.Market.InvestorOnline[i].BackupQueue.Count; n++)
                                                    {
                                                        if (Business.Market.InvestorOnline[i].BackupQueue[n].Key == keyConfirm)
                                                        {
                                                            Business.Market.InvestorOnline[i].BackupQueue.RemoveAt(n);
                                                            n--;
                                                        }
                                                        else
                                                        {
                                                            backupCommand += Business.Market.InvestorOnline[i].BackupQueue[n].CommandQueue + "▼";
                                                            Business.Market.InvestorOnline[i].BackupQueue.RemoveAt(n);
                                                            n--;
                                                        }
                                                    }
                                                }

                                                if (backupCommand.EndsWith("▼"))
                                                    backupCommand = backupCommand.Remove(backupCommand.Length - 1, 1);

                                                string keyBackup = DateTime.Now.Ticks.ToString();
                                                if (!string.IsNullOrEmpty(backupCommand))
                                                    result += "▼" + backupCommand + ">" + keyBackup;
                                                else
                                                    result += ">" + keyBackup;

                                                //ADD COMMAND TO BACKUP QUEUE OF INVESTOR
                                                Business.BackupQueue newBackupQueue = new Business.BackupQueue();
                                                newBackupQueue.Key = keyBackup;
                                                newBackupQueue.CommandQueue = resultBackup + backupCommand;
                                                Business.Market.InvestorOnline[i].BackupQueue.Add(newBackupQueue);
                                            }
                                            #endregion

                                            isValidKey = true;
                                        }
                                    }
                                }
                                #endregion
                            }
                        }
                        #endregion
                    }
                }
                else
                {
                    #region SEARCH INVESTOR IN INVESTOR LIST OF CLASS MARKET
                    if (Business.Market.InvestorList != null)
                    {
                        bool flag = false;
                        int countInvestor = Business.Market.InvestorList.Count;
                        for (int j = 0; j < Business.Market.InvestorList.Count; j++)
                        {
                            if (Business.Market.InvestorList[j].LoginKey != null)
                            {
                                if (Business.Market.InvestorList[j].InvestorID == investorID &&
                                    Business.Market.InvestorList[j].LoginKey == key)
                                {
                                    #region CHECK STATUS INVESTOR
                                    if (!Business.Market.InvestorList[j].IsOnline)
                                    {
                                        if (Business.Market.InvestorList[j].IsLogout)
                                            return string.Empty;

                                        Business.Market.InvestorList[j].IsOnline = true;

                                        Business.Market.InvestorList[j].AddInvestorToInvestorOnline(Business.Market.InvestorList[j]);
                                    }
                                    #endregion

                                    Business.Market.InvestorList[j].LastConnectTime = DateTime.Now;
                                    Business.Market.InvestorList[j].InvestorIndex = j;

                                    //SEND COMMAND UPDATE INVESTOR INDEX
                                    if (Business.Market.InvestorList[j].ClientCommandQueue == null)
                                        Business.Market.InvestorList[j].ClientCommandQueue = new List<string>();

                                    string messageChangeIndex = "CII00434543$" + Business.Market.InvestorList[j].InvestorIndex;
                                    Business.Market.InvestorList[j].ClientCommandQueue.Add(messageChangeIndex);

                                    #region GET CLIENT COMMAND SERVER
                                    if (Business.Market.InvestorList[j].ClientCommandQueue != null)
                                    {
                                        int countMessage = Business.Market.InvestorList[j].ClientCommandQueue.Count;
                                        for (int n = 0; n < Business.Market.InvestorList[j].ClientCommandQueue.Count; n++)
                                        {
                                            try
                                            {
                                                if (Business.Market.InvestorList[j].ClientCommandQueue[0] != null)
                                                {
                                                    result += Business.Market.InvestorList[j].ClientCommandQueue[0] + "▼";
                                                    resultBackup += Business.Market.InvestorList[j].ClientCommandQueue[0] + "▼";

                                                    if (Business.Market.InvestorList[j].ClientCommandQueue[0] == "OLOFF14790251")
                                                    {
                                                        Business.Market.InvestorList[j].ClientCommandQueue.RemoveAt(0);
                                                        continue;
                                                    }

                                                    tempResult.Add(Business.Market.InvestorList[j].ClientCommandQueue[0]);
                                                    Business.Market.InvestorList[j].ClientCommandQueue.RemoveAt(0);
                                                }
                                                else
                                                {
                                                    Business.Market.InvestorList[j].ClientCommandQueue.RemoveAt(0);
                                                }
                                            }
                                            catch (Exception ex)
                                            {

                                            }
                                        }
                                    }
                                    #endregion

                                    #region ADD COMMAND TO INVESTOR LOGIN WITH PASSWORD READ ONLY
                                    if (Business.Market.InvestorOnline != null)
                                    {
                                        for (int n = 0; n < Business.Market.InvestorOnline.Count; n++)
                                        {
                                            if (Business.Market.InvestorOnline[n].InvestorID == investorID && Business.Market.InvestorOnline[n].LoginKey != key)
                                            {
                                                if (tempResult != null)
                                                {
                                                    int countMessage = tempResult.Count;
                                                    for (int m = 0; m < countMessage; m++)
                                                    {
                                                        Business.Market.InvestorOnline[n].ClientCommandQueue.Add(tempResult[m]);
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                if (Business.Market.InvestorOnline[n].InvestorID == investorID && Business.Market.InvestorOnline[n].LoginKey == key)
                                                {
                                                    if (Business.Market.InvestorOnline[n].ClientCommandQueue != null)
                                                    {
                                                        for (int m = 0; m < Business.Market.InvestorOnline[n].ClientCommandQueue.Count; m++)
                                                        {
                                                            try
                                                            {
                                                                if (Business.Market.InvestorOnline[n].ClientCommandQueue[0] != null)
                                                                {
                                                                    result += Business.Market.InvestorOnline[n].ClientCommandQueue[0] + "▼";
                                                                    Business.Market.InvestorOnline[n].ClientCommandQueue.RemoveAt(0);
                                                                }
                                                                else
                                                                {
                                                                    Business.Market.InvestorOnline[n].ClientCommandQueue.RemoveAt(0);
                                                                }
                                                            }
                                                            catch (Exception ex)
                                                            {

                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    #endregion

                                    #region PROCESS DATA BACKUP
                                    if (port == 0)
                                    {
                                        string backupCommand = string.Empty;

                                        if (Business.Market.InvestorList[j].BackupQueue != null)
                                        {
                                            int countBackup = Business.Market.InvestorList[j].BackupQueue.Count;
                                            for (int n = 0; n < Business.Market.InvestorList[j].BackupQueue.Count; n++)
                                            {
                                                if (Business.Market.InvestorList[j].BackupQueue[n].Key == keyConfirm)
                                                {
                                                    Business.Market.InvestorList[j].BackupQueue.RemoveAt(n);
                                                    n--;
                                                }
                                                else
                                                {
                                                    backupCommand += Business.Market.InvestorList[j].BackupQueue[n].CommandQueue + "▼";
                                                    Business.Market.InvestorList[j].BackupQueue.RemoveAt(n);
                                                    n--;
                                                }
                                            }
                                        }

                                        if (backupCommand.EndsWith("▼"))
                                            backupCommand = backupCommand.Remove(backupCommand.Length - 1, 1);

                                        string keyBackup = DateTime.Now.Ticks.ToString();
                                        if (!string.IsNullOrEmpty(backupCommand))
                                            result += "▼" + backupCommand + ">" + keyBackup;
                                        else
                                            result += ">" + keyBackup;

                                        //ADD COMMAND TO BACKUP QUEUE OF INVESTOR
                                        Business.BackupQueue newBackupQueue = new Business.BackupQueue();
                                        newBackupQueue.Key = keyBackup;
                                        newBackupQueue.CommandQueue = resultBackup + backupCommand;
                                        Business.Market.InvestorList[j].BackupQueue.Add(newBackupQueue);
                                    }
                                    #endregion

                                    flag = true;
                                    isValidKey = true;
                                    break;
                                }
                            }
                        }

                        if (!flag)
                        {
                            #region GET MESSAGE SERVER FROM INVESTOR ONLINE
                            if (Business.Market.InvestorOnline != null)
                            {
                                for (int i = 0; i < Business.Market.InvestorOnline.Count; i++)
                                {
                                    if (Business.Market.InvestorOnline[i].InvestorID == investorID && Business.Market.InvestorOnline[i].LoginKey == key)
                                    {
                                        if (Business.Market.InvestorOnline[i].ClientCommandQueue != null)
                                        {
                                            int countMessage = Business.Market.InvestorOnline[i].ClientCommandQueue.Count;
                                            for (int j = 0; j < Business.Market.InvestorOnline[i].ClientCommandQueue.Count; j++)
                                            {
                                                try
                                                {
                                                    if (Business.Market.InvestorOnline[i].ClientCommandQueue[0] != null)
                                                    {
                                                        result += Business.Market.InvestorOnline[i].ClientCommandQueue[0] + "▼";
                                                        resultBackup += Business.Market.InvestorOnline[i].ClientCommandQueue[0] + "▼";

                                                        Business.Market.InvestorOnline[i].ClientCommandQueue.RemoveAt(0);
                                                    }
                                                    else
                                                    {
                                                        Business.Market.InvestorOnline[i].ClientCommandQueue.RemoveAt(0);
                                                    }
                                                }
                                                catch (Exception ex)
                                                {

                                                }
                                            }
                                        }

                                        #region PROCESS DATA BACKUP
                                        if (port == 0)
                                        {
                                            string backupCommand = string.Empty;

                                            if (Business.Market.InvestorOnline[i].BackupQueue != null)
                                            {
                                                int countBackup = Business.Market.InvestorOnline[i].BackupQueue.Count;
                                                for (int n = 0; n < Business.Market.InvestorOnline[i].BackupQueue.Count; n++)
                                                {
                                                    if (Business.Market.InvestorOnline[i].BackupQueue[n].Key == keyConfirm)
                                                    {
                                                        Business.Market.InvestorOnline[i].BackupQueue.RemoveAt(n);
                                                        n--;
                                                    }
                                                    else
                                                    {
                                                        backupCommand += Business.Market.InvestorOnline[i].BackupQueue[n].CommandQueue + "▼";
                                                        Business.Market.InvestorOnline[i].BackupQueue.RemoveAt(n);
                                                        n--;
                                                    }
                                                }
                                            }

                                            if (backupCommand.EndsWith("▼"))
                                                backupCommand = backupCommand.Remove(backupCommand.Length - 1, 1);

                                            string keyBackup = DateTime.Now.Ticks.ToString();
                                            if (!string.IsNullOrEmpty(backupCommand))
                                                result += "▼" + backupCommand + ">" + keyBackup;
                                            else
                                                result += ">" + keyBackup;

                                            //ADD COMMAND TO BACKUP QUEUE OF INVESTOR
                                            Business.BackupQueue newBackupQueue = new Business.BackupQueue();
                                            newBackupQueue.Key = keyBackup;
                                            newBackupQueue.CommandQueue = resultBackup + backupCommand;
                                            Business.Market.InvestorOnline[i].BackupQueue.Add(newBackupQueue);
                                        }
                                        #endregion

                                        isValidKey = true;
                                    }
                                }
                            }
                            #endregion
                        }
                    }
                    #endregion
                }
            }
            else
            {
                #region ACCOUNT READ ONLY
                if (Business.Market.InvestorOnline != null)
                {
                    for (int i = 0; i < Business.Market.InvestorOnline.Count; i++)
                    {
                        if (Business.Market.InvestorOnline[i].InvestorID == investorID && Business.Market.InvestorOnline[i].LoginKey == key)
                        {
                            if (Business.Market.InvestorOnline[i].ClientCommandQueue != null)
                            {
                                int countMessage = Business.Market.InvestorOnline[i].ClientCommandQueue.Count;
                                for (int j = 0; j < countMessage; j++)
                                {
                                    try
                                    {
                                        if (Business.Market.InvestorOnline[i].ClientCommandQueue[0] != null)
                                        {
                                            result += Business.Market.InvestorOnline[i].ClientCommandQueue[0] + "▼";
                                            resultBackup += Business.Market.InvestorOnline[i].ClientCommandQueue[0] + "▼";

                                            Business.Market.InvestorOnline[i].ClientCommandQueue.RemoveAt(0);
                                        }
                                        else
                                        {
                                            Business.Market.InvestorOnline[i].ClientCommandQueue.RemoveAt(0);
                                        }
                                    }
                                    catch (Exception ex)
                                    {

                                    }
                                }
                            }

                            #region PROCESS DATA BACKUP
                            if (port == 0)
                            {
                                string backupCommand = string.Empty;

                                if (Business.Market.InvestorOnline[i].BackupQueue != null)
                                {
                                    int countBackup = Business.Market.InvestorOnline[i].BackupQueue.Count;
                                    for (int n = 0; n < Business.Market.InvestorOnline[i].BackupQueue.Count; n++)
                                    {
                                        if (Business.Market.InvestorOnline[i].BackupQueue[n].Key == keyConfirm)
                                        {
                                            Business.Market.InvestorOnline[i].BackupQueue.RemoveAt(n);
                                            n--;
                                        }
                                        else
                                        {
                                            backupCommand += Business.Market.InvestorOnline[i].BackupQueue[n].CommandQueue + "▼";
                                            Business.Market.InvestorOnline[i].BackupQueue.RemoveAt(n);
                                            n--;
                                        }
                                    }
                                }

                                if (backupCommand.EndsWith("▼"))
                                    backupCommand = backupCommand.Remove(backupCommand.Length - 1, 1);

                                string keyBackup = DateTime.Now.Ticks.ToString();

                                if (!string.IsNullOrEmpty(backupCommand))
                                    result += "▼" + backupCommand + ">" + keyBackup;
                                else
                                    result += ">" + keyBackup;

                                //ADD COMMAND TO BACKUP QUEUE OF INVESTOR
                                Business.BackupQueue newBackupQueue = new Business.BackupQueue();
                                newBackupQueue.Key = keyBackup;
                                newBackupQueue.CommandQueue = resultBackup + backupCommand;
                                Business.Market.InvestorOnline[i].BackupQueue.Add(newBackupQueue);
                            }
                            #endregion

                            isValidKey = true;
                        }
                    }
                }
                #endregion
            }

            #region REMOVE CHAR
            //if (result.Length > 1)
            //{
            //    result = result.Remove(result.Length - 1);
            //}
            #endregion

            if (!isValidKey)
            {
                result = "OLOFF14790251";
            }

            return result;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public static Business.Investor FacadeAddNewInvestor(int InvestorStatusID, int InvestorGroupID, string AgentID, double Balance, double Credit, string Code, string Pwd,
                                                double TaxRate, double Leverage, string Address, string Phone,
                                                string City, string Country, string Email, string ZipCode, string State,
                                                string NickName,string key)
        {
            Business.Investor objInvestor = new Business.Investor();
            objInvestor.InvestorStatusID = InvestorStatusID;
            //objInvestor.InvestorGroupInstance = TradingServer.Facade.FacadeGetInvestorGroupByInvestorGroupID(InvestorGroupID);

            string tempDefaultGroupName = string.Empty;

            if (Business.Market.MarketConfig != null)
            {
                int countMarketConfig = Business.Market.MarketConfig.Count;
                for (int i = 0; i < countMarketConfig; i++)
                {
                    if (Business.Market.MarketConfig[i].Code == "C34")
                    {
                        string[] subValue = Business.Market.MarketConfig[i].StringValue.Split('`');

                        #region PROCESS DOMAIN CLIENT
                        string[] subKey = key.Split('/');

                        string tempKey = string.Empty;

                        if (subKey.Length > 2)
                        {
                            tempKey = subKey[2];
                        }
                        else
                        {
                            tempKey = subKey[0];
                        }

                        tempKey = tempKey.Replace("http://", string.Empty);
                        tempKey = tempKey.Replace("www.", string.Empty);
                        tempKey = tempKey.Replace("/", string.Empty);
                        tempKey = tempKey.Replace("?", string.Empty);
                        #endregion

                        #region PROCESS DOMAIN SERVER
                        string[] subDomain = subValue[0].Split('/');
                        string tempDomainServer = string.Empty;
                        if (subDomain.Length == 4)
                        {
                            tempDomainServer = subDomain[2];
                        }
                        else
                        {
                            tempDomainServer = subDomain[0];
                        }

                        tempDomainServer = tempDomainServer.Replace("http://", string.Empty);
                        tempDomainServer = tempDomainServer.Replace("www.", string.Empty);
                        tempDomainServer = tempDomainServer.Replace("/", string.Empty);
                        tempDomainServer = tempDomainServer.Replace("?", string.Empty);
                        #endregion

                        if (key.ToUpper().Trim() == tempDomainServer.ToUpper().Trim())
                        {
                            tempDefaultGroupName = subValue[1];

                            break;
                        }
                    }
                }
            }

            if (string.IsNullOrEmpty(tempDefaultGroupName))
            {
                int countMarketConfig = Business.Market.MarketConfig.Count;
                for (int i = 0; i < countMarketConfig; i++)
                {
                    if (Business.Market.MarketConfig[i].Code == "C33")
                    {
                        tempDefaultGroupName = Business.Market.MarketConfig[i].StringValue;
                        break;
                    }
                }
            }

            bool isExists = false;
            double tempDepositDefault = 0;

            if (Business.Market.InvestorGroupList != null)
            {
                int count = Business.Market.InvestorGroupList.Count;
                for (int i = 0; i < count; i++)
                {
                    if (Business.Market.InvestorGroupList[i].Name.Trim().ToUpper() == tempDefaultGroupName.Trim().ToUpper())
                    {
                        if (Business.Market.InvestorGroupList[i].ParameterItems != null)
                        {
                            int countConfig = Business.Market.InvestorGroupList[i].ParameterItems.Count;
                            for (int j = 0; j < countConfig; j++)
                            {
                                if (Business.Market.InvestorGroupList[i].ParameterItems[j].Code == "G24")
                                {
                                    double.TryParse(Business.Market.InvestorGroupList[i].ParameterItems[j].StringValue, out tempDepositDefault);

                                    break;
                                }
                            }
                        }
                        objInvestor.InvestorGroupInstance = Business.Market.InvestorGroupList[i];
                        break;
                    }
                }
            }

            objInvestor.AgentID = AgentID;

            if (tempDepositDefault > 0)
                objInvestor.Balance = tempDepositDefault;
            else
                objInvestor.Balance = Balance;

            objInvestor.Credit = Credit;

            int ranCode = -1;

            //bool CheckCode = false;
            //while (!CheckCode)
            //{
            //    Random ran = new Random();
            //    ranCode = ran.Next(0000000, 9999999);

            //    CheckCode = TradingServer.Facade.FacadeGetInvestorByCode(ranCode.ToString());
            //}

            string rendCode = TradingServer.Model.TradingCalculate.Instance.GetNextRandomCode();

            bool CheckCode = false;
            CheckCode = TradingServer.Facade.FacadeGetInvestorByCode(rendCode);

            //objInvestor.Code = ranCode.ToString();
            objInvestor.Code = rendCode;
            objInvestor.PrimaryPwd = Pwd;
            objInvestor.ReadOnlyPwd = Pwd;
            objInvestor.PhonePwd = Pwd;
            objInvestor.IsDisable = false;
            objInvestor.TaxRate = TaxRate;
            objInvestor.Leverage = Leverage;
            objInvestor.Address = Address;
            objInvestor.Phone = Phone;
            objInvestor.City = City;
            objInvestor.Country = Country;
            objInvestor.Email = Email;
            objInvestor.ZipCode = "NaN";
            objInvestor.RegisterDay = DateTime.Now;
            objInvestor.InvestorComment = "Demo Account";
            objInvestor.State = "NaN";
            objInvestor.NickName = NickName;
            objInvestor.SendReport = true;
            objInvestor.AllowChangePwd = true;
            objInvestor.UserConfig = "";

            string primaryPwd = objInvestor.PrimaryPwd;

            string temp = TradingServer.Model.ValidateCheck.Encrypt(objInvestor.PrimaryPwd);
            objInvestor.PrimaryPwd = temp;
            objInvestor.ReadOnlyPwd = temp;
            objInvestor.PhonePwd = temp;

            double tempBalance = objInvestor.Balance;
            objInvestor.Balance = 0;

            objInvestor.InvestorID = TradingServer.Facade.FacadeAddNewInvestor(objInvestor);

            if (objInvestor.InvestorID > 0)
            {
                int resultProfileID = TradingServer.Facade.FacadeAddInvestorProfile(objInvestor);

                objInvestor.InvestorProfileID = resultProfileID;

                Business.Market.InvestorList.Add(objInvestor);

                TradingServer.Facade.FacadeAddDeposit(objInvestor.InvestorID, tempBalance, "[add deposit create account]");
            }

            //SEND MAIL IF CREATE NEW INVESTOR COMPLETE
            if (objInvestor.InvestorID > 0)
            {
                #region SEND MAIL CREATE ACCOUNT
                Model.MailConfig newMailConfig = new Model.MailConfig();
                newMailConfig = TradingServer.Facade.FacadeGetMailConfig(objInvestor);

                StringBuilder content = new StringBuilder();
                Business.ConfirmationTemplate newTemplate = new Business.ConfirmationTemplate();
                content = newTemplate.GetConfirmation();
                content.Replace("[#LinkLogo]", "http://et5.mpf.co.id/img/mpflogo.png");
                content.Replace("[#FullName]", objInvestor.NickName);
                content.Replace("[#AccountType]", "demo account");
                content.Replace("[#UserName]", objInvestor.Code);
                content.Replace("[#Password]", primaryPwd);
                content.Replace("[#Website]", "http://demo.efxgm.com");
                //content.Replace("[#Website]", Business.Market.CompanyWebsite);
                content.Replace("[#AccessLink]", "http://demo.efxgm.com");
                //content.Replace("[#AccessLink]", Business.Market.AccessLink);
                content.Replace("[#ServiceName]", "EFXGM Customer Service");
                //content.Replace("[#ServiceName]", Business.Market.ServiceName);
                content.Replace("[#MailSupport]", "mailto:[email protected]");
                //content.Replace("[#MailSupport]", Business.Market.MailSupport);
                content.Replace("[#EmailContact]", "*****@*****.**");
                //content.Replace("[#EmailContact]", Business.Market.MailContact);
                //content.Replace("[#CompanyName]", "PT. Millennium Penata Futures ");
                //content.Replace("[#CompanyIntroduct]", "is the first financial institution offering online-based  investment business in Indonesia. Through years of trial, we succeeded in finding an online system that provides data and news in realtime mode.");
                content.Replace("[#CompanyCopyright]", "EFXGM");
                //content.Replace("[#CompanyCopyright]", Business.Market.CompanyCopyright);

                TradingServer.Model.TradingCalculate.Instance.SendMail(objInvestor.Email, "CONFIRMATION EMAIL", content.ToString(), newMailConfig);
                #endregion
            }

            Business.Investor newInvestor = new Business.Investor();
            if (objInvestor.InvestorID > 0)
            {
                //newInvestor.Code = ranCode.ToString();
                newInvestor.Code = rendCode;
                newInvestor.PrimaryPwd = primaryPwd;
                newInvestor.ReadOnlyPwd = primaryPwd;
                newInvestor.PhonePwd = primaryPwd;
                newInvestor.IsDisable = false;
                newInvestor.TaxRate = TaxRate;
                newInvestor.Leverage = Leverage;
                newInvestor.Address = Address;
                newInvestor.Phone = Phone;
                newInvestor.City = City;
                newInvestor.Country = Country;
                newInvestor.Email = Email;
                newInvestor.ZipCode = "NaN";
                newInvestor.RegisterDay = DateTime.Now;
                newInvestor.InvestorComment = "Demo Account";
                newInvestor.State = "NaN";
                newInvestor.NickName = NickName;
                newInvestor.SendReport = true;
                newInvestor.InvestorID = objInvestor.InvestorID;
            }

            //SEND NOTIFY TO MANAGER
            //TradingServer.Facade.FacadeSendNotifyManagerRequest(3, newInvestor);
            //TradingServer.Facade.FacadeAutoSendMailRegistration(newInvestor);
            return newInvestor;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        internal static Business.Investor MapNotifyUpdateInfoAccount(string value)
        {
            Business.Investor result = new Investor();

            if (!string.IsNullOrEmpty(value))
            {
                string[] subValue = value.Split('$');
                if (subValue.Length == 2)
                {
                    string[] subParameter = subValue[1].Split('{');
                    if (subParameter.Length == 7)
                    {
                        if (Business.Market.InvestorList != null)
                        {
                            int count = Business.Market.InvestorList.Count;
                            for (int i = 0; i < count; i++)
                            {
                                if (Business.Market.InvestorList[i].Code.ToUpper().Trim() == subParameter[0].ToUpper().Trim())
                                {
                                    result = Business.Market.InvestorList[i];
                                    break;
                                }
                            }
                        }

                        result.Credit = double.Parse(subParameter[6]);
                        result.Balance = double.Parse(subParameter[1]) - result.Credit;
                        result.Equity = double.Parse(subParameter[2]);
                        result.Margin = double.Parse(subParameter[3]);
                        result.FreeMargin = double.Parse(subParameter[4]);
                        result.MarginLevel = double.Parse(subParameter[5]);
                    }
                }
            }

            return result;
        }
        public static Business.Investor FacadeAddNewInvestorWithMT4(int InvestorStatusID, int InvestorGroupID, string AgentID, double Balance, double Credit, string Code, string Pwd,
                                                double TaxRate, double Leverage, string Address, string Phone,
                                                string City, string Country, string Email, string ZipCode, string State,
                                                string NickName)
        {
            Business.Investor result = new Business.Investor();

            string tempDefaultGroupName = string.Empty;
            int countMarketConfig = Business.Market.MarketConfig.Count;
            for (int i = 0; i < countMarketConfig; i++)
            {
                if (Business.Market.MarketConfig[i].Code == "C33")
                {
                    tempDefaultGroupName = Business.Market.MarketConfig[i].StringValue;
                    break;
                }
            }

            string cmd = BuildCommandElement5ConnectMT4.Mode.BuildCommand.Instance.BuildCommandCreateInvestor(Balance, Leverage, Address, Phone, City, Country,
                                                                                                Email, ZipCode, State, NickName, tempDefaultGroupName,
                                                                                                Pwd);

            //string resultCmd = Business.Market.InstanceSocket.SendToMT4(Business.Market.DEFAULT_IPADDRESS, Business.Market.DEFAULT_PORT, cmd);
            string resultCmd = Element5SocketConnectMT4.Business.SocketConnect.Instance.SendSocket(cmd);

            if (!string.IsNullOrEmpty(resultCmd))
            {
                string[] subValue = resultCmd.Split('$');
                if (subValue.Length == 2)
                {
                    string[] subParameter = subValue[1].Split('{');
                    if (subParameter.Length == 4)
                    {
                        bool isSuccess = false;
                        if (int.Parse(subParameter[0]) == 1)
                            isSuccess = true;

                        if (isSuccess)
                        {
                            result.InvestorID = 1;
                            result.Code = subParameter[2];
                            result.PrimaryPwd = subParameter[3];
                        }
                    }
                }
            }

            return result;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="InvestorID"></param>
        /// <returns></returns>
        public static bool FacadeLogout(int InvestorID, int InvestorIndex, string key,string ipAddress)
        {
            bool Result = false;
            Business.Investor newInvestor = new Business.Investor();
            bool isPrimary = Business.Investor.investorInstance.CheckPrimaryInvestorOnline(InvestorID, Business.TypeLogin.Primary, key);
            //int countInvestor = Business.Investor.investorInstance.CountPrimaryInvestor(InvestorID);
            if (InvestorIndex != -1 && InvestorIndex <= TradingServer.Business.Market.InvestorList.Count - 1)
            {
                #region GET INVESTOR WITH INVESTOR INDEX
                newInvestor = Business.Market.InvestorList[InvestorIndex];
                if (newInvestor != null && newInvestor.InvestorID > 0)
                {
                    if (newInvestor.InvestorID == InvestorID)
                    {
                        if (isPrimary)
                        {
                            #region INVESTOR ID = INVESTOR ID
                            Business.Market.InvestorList[InvestorIndex].IsLogout = true;
                            Business.Market.InvestorList[InvestorIndex].IsOnline = false;

                            //SEND NOTIFY TO MANAGER SET INVESTOR LOGOUT
                            TradingServer.Facade.FacadeSendNotifyManagerRequest(2, TradingServer.Business.Market.InvestorList[InvestorIndex]);
                            #endregion
                        }

                        Result = true;
                    }
                    else
                    {
                        #region SEARCH INVESTOR IN INVESTOR LIST
                        if (TradingServer.Business.Market.InvestorList != null)
                        {
                            int count = TradingServer.Business.Market.InvestorList.Count;
                            for (int i = 0; i < count; i++)
                            {
                                if (TradingServer.Business.Market.InvestorList[i].InvestorID == InvestorID)
                                {
                                    if (isPrimary)
                                    {
                                        TradingServer.Business.Market.InvestorList[i].IsLogout = true;
                                        TradingServer.Business.Market.InvestorList[i].IsOnline = false;

                                        //SEND NOTIFY TO MANAGER SET INVESTOR LOGOUT
                                        TradingServer.Facade.FacadeSendNotifyManagerRequest(2, TradingServer.Business.Market.InvestorList[i]);
                                    }

                                    Result = true;
                                    break;
                                }
                            }
                        }
                        #endregion
                    }
                }
                #endregion
            }
            else
            {
                #region FORGET INVESTOR INDEX
                if (TradingServer.Business.Market.InvestorList != null)
                {
                    int count = TradingServer.Business.Market.InvestorList.Count;
                    for (int i = 0; i < count; i++)
                    {
                        if (TradingServer.Business.Market.InvestorList[i].InvestorID == InvestorID)
                        {
                            if (isPrimary)
                            {
                                TradingServer.Business.Market.InvestorList[i].IsLogout = true;
                                TradingServer.Business.Market.InvestorList[i].IsOnline = false;

                                //SEND NOTIFY TO MANAGER SET INVESTOR LOGOUT
                                TradingServer.Facade.FacadeSendNotifyManagerRequest(2, TradingServer.Business.Market.InvestorList[i]);
                            }

                            Result = true;
                            break;
                        }
                    }
                }
                #endregion
            }

            #region REMOVE INVESTOR IN INVESTOR ONLINE
            if (Result)
            {
                if (Business.Market.InvestorOnline != null && Business.Market.InvestorOnline.Count > 0)
                {
                    int count = Business.Market.InvestorOnline.Count;
                    for (int i = 0; i < count; i++)
                    {
                        if (Business.Market.InvestorOnline[i].InvestorID == InvestorID && Business.Market.InvestorOnline[i].LoginKey == key)
                        {
                            Business.Market.InvestorOnline[i].IsLogout = true;
                            break;
                        }
                    }
                }
            }
            #endregion

            return Result;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="InvestorID"></param>
        /// <returns></returns>
        public static Business.Investor FacadeGetInvestorByInvestor(int InvestorID)
        {
            Business.Investor Result = new Business.Investor();
            if (Business.Market.InvestorList != null)
            {
                int count = Business.Market.InvestorList.Count;
                for (int i = 0; i < count; i++)
                {
                    if (Business.Market.InvestorList[i].InvestorID == InvestorID)
                    {
                        #region Map Investor Account
                        Result.Address = Business.Market.InvestorList[i].Address;
                        Result.AgentID = Business.Market.InvestorList[i].AgentID;
                        Result.Balance = Business.Market.InvestorList[i].Balance;
                        Result.City = Business.Market.InvestorList[i].City;
                        Result.Code = Business.Market.InvestorList[i].Code;
                        Result.Comment = Business.Market.InvestorList[i].Comment;
                        Result.InvestorComment = Business.Market.InvestorList[i].InvestorComment;
                        Result.Country = Business.Market.InvestorList[i].Country;
                        Result.Credit = Business.Market.InvestorList[i].Credit;
                        Result.Email = Business.Market.InvestorList[i].Email;
                        Result.Equity = Business.Market.InvestorList[i].Equity;
                        Result.FirstName = Business.Market.InvestorList[i].FirstName;
                        Result.FreeMargin = Business.Market.InvestorList[i].FreeMargin;
                        Result.InvestorGroupInstance = Business.Market.InvestorList[i].InvestorGroupInstance;
                        Result.InvestorID = Business.Market.InvestorList[i].InvestorID;
                        Result.InvestorStatusID = Business.Market.InvestorList[i].InvestorStatusID;
                        Result.IsCalculating = Business.Market.InvestorList[i].IsCalculating;
                        Result.IsDisable = Business.Market.InvestorList[i].IsDisable;
                        Result.IsOnline = Business.Market.InvestorList[i].IsOnline;
                        Result.LastConnectTime = Business.Market.InvestorList[i].LastConnectTime;
                        Result.Leverage = Business.Market.InvestorList[i].Leverage;
                        Result.Margin = Business.Market.InvestorList[i].Margin;
                        Result.MarginLevel = Business.Market.InvestorList[i].MarginLevel;
                        Result.NickName = Business.Market.InvestorList[i].NickName;
                        Result.Phone = Business.Market.InvestorList[i].Phone;
                        Result.Profit = Business.Market.InvestorList[i].Profit;
                        Result.SecondAddress = Business.Market.InvestorList[i].SecondAddress;
                        Result.State = Business.Market.InvestorList[i].State;
                        Result.StatusCode = Business.Market.InvestorList[i].StatusCode;
                        Result.TaxRate = Business.Market.InvestorList[i].TaxRate;
                        Result.FreezeMargin = Business.Market.InvestorList[i].FreezeMargin;
                        Result.ReadOnly = Business.Market.InvestorList[i].ReadOnly;
                        Result.AllowChangePwd = Business.Market.InvestorList[i].AllowChangePwd;
                        Result.IDPassport = Business.Market.InvestorList[i].IDPassport;
                        #endregion

                        //update time last connect
                        Business.Investor.investorInstance.UpdateLastConnect(InvestorID, Business.Market.InvestorList[i].LoginKey);
                        break;
                    }
                }
            }

            return Result;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="InvestorID"></param>
        /// <returns></returns>
        public static Business.Investor FacadeGetInvestorByCode(string code)
        {
            Business.Investor Result = new Business.Investor();
            if (Business.Market.InvestorList != null)
            {
                int count = Business.Market.InvestorList.Count;
                for (int i = 0; i < count; i++)
                {
                    if (Business.Market.InvestorList[i].Code == code)
                    {
                        #region Map Investor Account
                        Result.Address = Business.Market.InvestorList[i].Address;
                        Result.AgentID = Business.Market.InvestorList[i].AgentID;
                        Result.Balance = Business.Market.InvestorList[i].Balance;
                        Result.City = Business.Market.InvestorList[i].City;
                        Result.Code = Business.Market.InvestorList[i].Code;
                        Result.Comment = Business.Market.InvestorList[i].Comment;
                        Result.InvestorComment = Business.Market.InvestorList[i].InvestorComment;
                        Result.Country = Business.Market.InvestorList[i].Country;
                        Result.Credit = Business.Market.InvestorList[i].Credit;
                        Result.Email = Business.Market.InvestorList[i].Email;
                        Result.Equity = Business.Market.InvestorList[i].Equity;
                        Result.FirstName = Business.Market.InvestorList[i].FirstName;
                        Result.FreeMargin = Business.Market.InvestorList[i].FreeMargin;
                        Result.InvestorGroupInstance = Business.Market.InvestorList[i].InvestorGroupInstance;
                        Result.InvestorID = Business.Market.InvestorList[i].InvestorID;
                        Result.InvestorStatusID = Business.Market.InvestorList[i].InvestorStatusID;
                        Result.IsCalculating = Business.Market.InvestorList[i].IsCalculating;
                        Result.IsDisable = Business.Market.InvestorList[i].IsDisable;
                        Result.IsOnline = Business.Market.InvestorList[i].IsOnline;
                        Result.LastConnectTime = Business.Market.InvestorList[i].LastConnectTime;
                        Result.Leverage = Business.Market.InvestorList[i].Leverage;
                        Result.Margin = Business.Market.InvestorList[i].Margin;
                        Result.MarginLevel = Business.Market.InvestorList[i].MarginLevel;
                        Result.NickName = Business.Market.InvestorList[i].NickName;
                        Result.Phone = Business.Market.InvestorList[i].Phone;
                        Result.Profit = Business.Market.InvestorList[i].Profit;
                        Result.SecondAddress = Business.Market.InvestorList[i].SecondAddress;
                        Result.State = Business.Market.InvestorList[i].State;
                        Result.StatusCode = Business.Market.InvestorList[i].StatusCode;
                        Result.TaxRate = Business.Market.InvestorList[i].TaxRate;
                        Result.FreezeMargin = Business.Market.InvestorList[i].FreezeMargin;
                        #endregion

                        break;
                    }
                }
            }

            return Result;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="InvestorID"></param>
        /// <param name="InvestorName"></param>
        /// <returns></returns>
        public static ClientBusiness.DataServer FacadeGetDataServer(int InvestorID, string InvestorName,int InvestorIndex)
        {
            ClientBusiness.DataServer Result = new ClientBusiness.DataServer();
            //Result.NumAllInvestorOnline = new int();
            //Result.NumUpdate = new ClientBusiness.ChangeCommandQueue();
            //Result.NumUpdateAnnouncement = new int();
            //Result.NumUpdateChat = new ClientBusiness.ChangeCommandQueue();
            //Result.NumUpdateNews = new int();
            //Result.NumUpdateOption = new ClientBusiness.ChangeCommandQueue();
            //Result.NumUpdatePending = new ClientBusiness.ChangeCommandQueue();
            Result.Tick = new List<Business.Tick>();
            Result.TimeServer = new DateTime();
            Result.Tick = new List<Business.Tick>();
            Result.ClientMessage = new List<string>();

            #region COMMENT CODE
            #region GET TICK
            if (Business.Market.SymbolList != null)
            {
                int count = Business.Market.SymbolList.Count;
                for (int i = 0; i < count; i++)
                {
                    if (Business.Market.SymbolList[i].TickValue != null)
                    {
                        Business.Tick newTick = new Business.Tick();
                        newTick = Business.Market.SymbolList[i].TickValue;
                        Result.Tick.Add(newTick);
                    }
                    else
                    {
                        Business.Tick newTick = new Business.Tick();
                        newTick.Ask = 0;
                        newTick.Bid = 0;
                        newTick.HighAsk = 0;
                        newTick.HighInDay = 0;
                        newTick.LowAsk = 0;
                        newTick.LowInDay = 0;
                        newTick.Status = "down";
                        newTick.SymbolName = Business.Market.SymbolList[i].Name;
                        newTick.TickTime = DateTime.Now;
                        newTick.SymbolID = Business.Market.SymbolList[i].SymbolID;

                        Result.Tick.Add(newTick);
                    }
                }
            }
            #endregion

            #region Get Message Server To Client
            Business.Investor newInvestor = new Business.Investor();
            if (InvestorIndex > 0 && InvestorIndex <= Business.Market.InvestorList.Count - 1)
            {
                newInvestor = Business.Market.InvestorList[InvestorIndex];

                if (newInvestor != null && newInvestor.InvestorID > 0)
                {
                    if (newInvestor.InvestorID == InvestorID)
                    {
                        if (!Business.Market.InvestorList[InvestorIndex].IsOnline)
                            Business.Market.InvestorList[InvestorIndex].IsOnline = true;

                        Business.Market.InvestorList[InvestorIndex].LastConnectTime = DateTime.Now;
                        if (newInvestor.ClientCommandQueue != null)
                        {
                            int count = newInvestor.ClientCommandQueue.Count;
                            for (int i = 0; i < count; i++)
                            {
                                Result.ClientMessage.Add(newInvestor.ClientCommandQueue[i]);
                            }

                            Business.Market.InvestorList[InvestorIndex].ClientCommandQueue.Clear();
                        }

                        Result.InvestorIndex = InvestorIndex;
                    }
                    else
                    {
                        #region SEARCH INVESTOR IN INVESTOR LIST OF CLASS MARKET
                        if (Business.Market.InvestorList != null)
                        {
                            int countInvestor = Business.Market.InvestorList.Count;
                            for (int j = 0; j < countInvestor; j++)
                            {
                                if (Business.Market.InvestorList[j].InvestorID == InvestorID)
                                {
                                    if (!Business.Market.InvestorList[j].IsOnline)
                                        Business.Market.InvestorList[j].IsOnline = true;

                                    Business.Market.InvestorList[j].LastConnectTime = DateTime.Now;
                                    if (Business.Market.InvestorList[j].ClientCommandQueue != null)
                                    {
                                        int countMessage = Business.Market.InvestorList[j].ClientCommandQueue.Count;
                                        for (int n = 0; n < countMessage; n++)
                                        {
                                            Result.ClientMessage.Add(Business.Market.InvestorList[j].ClientCommandQueue[n]);
                                        }
                                        Business.Market.InvestorList[j].ClientCommandQueue.Clear();
                                    }

                                    //Set Investor Index
                                    Result.InvestorIndex = j;

                                    break;
                                }
                            }
                        }
                        #endregion
                    }
                }
                else
                {
                    #region SEARCH INVESTOR IN INVESTOR LIST OF CLASS MARKET
                    if (Business.Market.InvestorList != null)
                    {
                        int countInvestor = Business.Market.InvestorList.Count;
                        for (int j = 0; j < countInvestor; j++)
                        {
                            if (Business.Market.InvestorList[j].InvestorID == InvestorID)
                            {
                                if (!Business.Market.InvestorList[j].IsOnline)
                                    Business.Market.InvestorList[j].IsOnline = true;

                                Business.Market.InvestorList[j].LastConnectTime = DateTime.Now;
                                if (Business.Market.InvestorList[j].ClientCommandQueue != null)
                                {
                                    int countMessage = Business.Market.InvestorList[j].ClientCommandQueue.Count;
                                    for (int n = 0; n < countMessage; n++)
                                    {
                                        Result.ClientMessage.Add(Business.Market.InvestorList[j].ClientCommandQueue[n]);
                                    }
                                    Business.Market.InvestorList[j].ClientCommandQueue.Clear();
                                }

                                Result.InvestorIndex = j;

                                break;
                            }
                        }
                    }
                    #endregion
                }
            }
            else
            {
                #region SEARCH INVESTOR IN INVESTOR LIST OF CLASS MARKET
                if (Business.Market.InvestorList != null)
                {
                    int countInvestor = Business.Market.InvestorList.Count;
                    for (int j = 0; j < countInvestor; j++)
                    {
                        if (Business.Market.InvestorList[j].InvestorID == InvestorID)
                        {
                            if (!Business.Market.InvestorList[j].IsOnline)
                                Business.Market.InvestorList[j].IsOnline = true;

                            Business.Market.InvestorList[j].LastConnectTime = DateTime.Now;
                            if (Business.Market.InvestorList[j].ClientCommandQueue != null)
                            {
                                int countMessage = Business.Market.InvestorList[j].ClientCommandQueue.Count;
                                for (int n = 0; n < countMessage; n++)
                                {
                                    Result.ClientMessage.Add(Business.Market.InvestorList[j].ClientCommandQueue[n]);
                                }
                                Business.Market.InvestorList[j].ClientCommandQueue.Clear();
                            }

                            Result.InvestorIndex = j;

                            break;
                        }
                    }
                }
                #endregion
            }
            #endregion
            #endregion

            return Result;
        }
 internal bool ManagerChangePass(int investorID, string code, string oldPass, string newPass)
 {
     bool result = false;
     Business.Investor investor = new Investor();
     investor = investor.LoginAgent(code, oldPass);
     if (investor != null)
     {
         result = TradingServer.Facade.FacadeUpdatePasswordByCode(code, newPass);
     }
     return result;
 }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="InvestorID"></param>
        /// <returns></returns>
        public static bool FacadeManualLogout(int InvestorID, int InvestorIndex, string key, string ipAddress)
        {
            bool Result = false;
            string userName = string.Empty;
            string pass = string.Empty;
            Business.Investor newInvestor = new Business.Investor();
            bool isPrimary = Business.Investor.investorInstance.CheckPrimaryInvestorOnline(InvestorID, Business.TypeLogin.Primary, key);

            if (InvestorIndex != -1 && InvestorIndex <= TradingServer.Business.Market.InvestorList.Count - 1)
            {
                #region GET INVESTOR WITH INVESTOR INDEX
                newInvestor = Business.Market.InvestorList[InvestorIndex];
                if (newInvestor != null && newInvestor.InvestorID > 0)
                {
                    if (newInvestor.InvestorID == InvestorID)
                    {
                        if (Business.Market.InvestorList[InvestorIndex].InvestorID == InvestorID)
                        {
                            if (isPrimary)
                            {
                                #region INVESTOR ID = INVESTOR ID

                                Business.Market.InvestorList[InvestorIndex].IsLogout = true;
                                Business.Market.InvestorList[InvestorIndex].IsOnline = false;
                                //Business.Market.InvestorList[InvestorIndex].LoginKey = string.Empty;
                                userName = Business.Market.InvestorList[InvestorIndex].Code;
                                pass = Business.Market.InvestorList[InvestorIndex].UnZipPwd;

                                //SEND NOTIFY TO MANAGER SET INVESTOR LOGOUT
                                TradingServer.Facade.FacadeSendNotifyManagerRequest(2, newInvestor);
                                #endregion
                            }

                            Result = true;
                        }
                    }
                    else
                    {
                        #region SEARCH INVESTOR IN INVESTOR LIST
                        if (TradingServer.Business.Market.InvestorList != null)
                        {
                            for (int i = 0; i < TradingServer.Business.Market.InvestorList.Count; i++)
                            {
                                if (TradingServer.Business.Market.InvestorList[i].InvestorID == InvestorID)
                                {
                                    if (isPrimary)
                                    {
                                        TradingServer.Business.Market.InvestorList[i].IsLogout = true;
                                        TradingServer.Business.Market.InvestorList[i].IsOnline = false;
                                        //TradingServer.Business.Market.InvestorList[i].LoginKey = string.Empty;
                                        userName = Business.Market.InvestorList[i].Code;
                                        pass = Business.Market.InvestorList[i].UnZipPwd;

                                        //SEND NOTIFY TO MANAGER SET INVESTOR LOGOUT
                                        TradingServer.Facade.FacadeSendNotifyManagerRequest(2, TradingServer.Business.Market.InvestorList[i]);
                                    }

                                    Result = true;
                                    break;
                                }
                            }
                        }
                        #endregion
                    }
                }
                #endregion
            }
            else
            {
                #region FORGET INVESTOR INDEX
                if (TradingServer.Business.Market.InvestorList != null)
                {
                    for (int i = 0; i < TradingServer.Business.Market.InvestorList.Count; i++)
                    {
                        if (TradingServer.Business.Market.InvestorList[i].InvestorID == InvestorID)
                        {
                            if (isPrimary)
                            {
                                TradingServer.Business.Market.InvestorList[i].IsLogout = true;
                                TradingServer.Business.Market.InvestorList[i].IsOnline = false;
                                //TradingServer.Business.Market.InvestorList[i].LoginKey = string.Empty;
                                userName = Business.Market.InvestorList[i].Code;
                                pass = Business.Market.InvestorList[i].UnZipPwd;

                                //SEND NOTIFY TO MANAGER SET INVESTOR LOGOUT
                                TradingServer.Facade.FacadeSendNotifyManagerRequest(2, TradingServer.Business.Market.InvestorList[i]);
                            }

                            Result = true;

                            break;
                        }
                    }
                }
                #endregion
            }

            #region REMOVE INVESTOR IN INVESTOR ONLINE
            if (Result)
            {
                if (Business.Market.InvestorOnline != null && Business.Market.InvestorOnline.Count > 0)
                {
                    for (int i = 0; i < Business.Market.InvestorOnline.Count; i++)
                    {
                        if (Business.Market.InvestorOnline[i].InvestorID == InvestorID && Business.Market.InvestorOnline[i].LoginKey == key)
                        {
                            if (!isPrimary)
                            {
                                userName = Business.Market.InvestorOnline[i].Code;
                                pass = Business.Market.InvestorOnline[i].UnZipPwd;
                            }

                            Business.Market.InvestorOnline[i].IsLogout = true;
                            Business.Market.InvestorOnline[i].IsOnline = false;

                            break;
                        }
                    }
                }
            }
            #endregion

            #region SEND COMMAND DISCONNECT NJ4X
            if (Result)
            {
                string nj4xDisconnect = NJ4XConnectSocket.MapNJ4X.Instance.MapDisconnectNJ4X(userName, pass);

                NJ4XConnectSocket.NJ4XConnectSocketAsync.Instance.SendNJ4X(nj4xDisconnect);
            }
            #endregion

            return Result;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="Code"></param>
        /// <param name="Pwd"></param>
        /// <returns></returns>
        internal Business.Agent AdminLogin(string Code, string Pwd,string ipAddress)
        {
            Business.Agent agent = new Agent();
            Business.Investor investor = new Investor();
            investor = investor.LoginAgent(Code, Pwd);
            if (investor != null)
            {
                agent = agent.GetAgentByInvestorID(investor.InvestorID);
                if (agent != null)
                {
                    bool checkIp = agent.CheckValidRangeIpAddress(ipAddress);
                    if (checkIp == false)
                    {
                        string content = "'" + Code + "': admin blocked by IP";
                        string comment = "[login admin]";
                        TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code);
                        return null;
                    }
                    for (int i = Business.Market.AdminList.Count - 1; i >= 0; i--)
                    {
                        if (Business.Market.AdminList[i].AgentID == agent.AgentID)
                        {
                            if (Business.Market.AdminList[i].IsAdmin && !Business.Market.AdminList[i].IsDisable)
                            {
                                Business.Market.AdminList[i].TimeSync = DateTime.Now;
                                Business.Market.AdminList[i].Ip = ipAddress;
                                return Business.Market.AdminList[i];
                            }
                            else return null;
                        }
                    }
                    agent.Code = Code;
                    agent.TimeSync = DateTime.Now;
                    agent.Ip = ipAddress;
                    agent.IsOnline = true;
                    agent.IAgentGroup = new List<Business.IAgentGroup>();
                    agent.IAgentGroup = Facade.FacadeGetIAgentGroupByAgentID(agent.AgentID);
                    agent.IAgentSecurity = new List<Business.IAgentSecurity>();
                    agent.IAgentSecurity = Facade.FacadeGetIAgentSecurityByAgentID(agent.AgentID);
                    List<Business.Permit> listPermit = new List<Business.Permit>();
                    listPermit = Facade.FacadeGetPermitByAgentID(agent.AgentID);
                    for (int i = listPermit.Count - 1; i >= 0; i--)
                    {
                        #region Enable Role
                        switch (listPermit[i].Role.Code)
                        {
                            case "R01":
                                agent.IsManager = true;
                                break;
                            case "R02":
                                agent.IsSuperviseTrades = true;
                                break;
                            case "R03":
                                agent.IsAdmin = true;
                                break;
                            case "R04":
                                agent.IsAccountant = true;
                                break;
                            case "R05":
                                agent.IsReports = true;
                                break;
                            case "R06":
                                agent.IsRiskManager = true;
                                break;
                            case "R07":
                                agent.IsInternalMail = true;
                                break;
                            case "R08":
                                agent.IsJournals = true;
                                break;
                            case "R09":
                                agent.IsSendNews = true;
                                break;
                            case "R10":
                                agent.IsMarketWatch = true;
                                break;
                            case "R11":
                                agent.IsConections = true;
                                break;
                            case "R12":
                                agent.IsPersonalDetails = true;
                                break;
                            case "R13":
                                agent.IsConfigServerPlugins = true;
                                break;
                            case "R14":
                                agent.IsAutomaticServerReports = true;
                                break;
                            case "R15":
                                agent.IsDealer = true;
                                break;
                            case "R16":
                                agent.IsEditDealer = true;
                                break;
                            case "R17":
                                agent.IsDownloadStatements = true;
                                break;
                        }

                        #endregion
                    }
                    if (agent.IsAdmin && !agent.IsDisable)
                    {
                        agent.AlertQueue = new List<PriceAlert>();
                        agent = this.GetAlertByAgent(agent);
                        Business.Market.AdminList.Add(agent);
                    }
                    else return null;
                }
            }
            return agent;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public static Business.Investor sFacadeAddNewInvestor(int InvestorStatusID, int InvestorGroupID, string AgentID, double Balance, double Credit, string Code, string Pwd,
                                                double TaxRate, double Leverage, string Address, string Phone,
                                                string City, string Country, string Email, string ZipCode,string State,
                                                string NickName)
        {
            if (Business.Market.IsRealSearver)
                return null;

            Business.Investor objInvestor = new Business.Investor();
            objInvestor.InvestorStatusID = InvestorStatusID;
            //objInvestor.InvestorGroupInstance = TradingServer.Facade.FacadeGetInvestorGroupByInvestorGroupID(InvestorGroupID);

            string tempDefaultGroupName = string.Empty;
            if (Business.Market.MarketConfig != null)
            {
                int countMarketConfig = Business.Market.MarketConfig.Count;
                for (int i = 0; i < countMarketConfig; i++)
                {
                    if (Business.Market.MarketConfig[i].Code == "C33")
                    {
                        tempDefaultGroupName = Business.Market.MarketConfig[i].StringValue;
                    }
                }
            }

            double tempDefaultDeposit = 0;

            bool isExists = false;
            if (Business.Market.InvestorGroupList != null)
            {
                int count = Business.Market.InvestorGroupList.Count;
                for (int i = 0; i < count; i++)
                {
                    if (Business.Market.InvestorGroupList[i].Name.Trim().ToUpper() == tempDefaultGroupName.Trim().ToUpper())
                    {
                        if (Business.Market.InvestorGroupList[i].ParameterItems != null)
                        {
                            int countConfig = Business.Market.InvestorGroupList[i].ParameterItems.Count;
                            for (int j = 0; j < countConfig; j++)
                            {
                                if (Business.Market.InvestorGroupList[i].ParameterItems[j].Code == "G24")
                                    double.TryParse(Business.Market.InvestorGroupList[i].ParameterItems[j].StringValue, out tempDefaultDeposit);
                            }
                        }

                        objInvestor.InvestorGroupInstance = Business.Market.InvestorGroupList[i];
                        break;
                    }
                }
            }

            objInvestor.AgentID = AgentID;

            if (tempDefaultDeposit > 0)
                objInvestor.Balance = tempDefaultDeposit;
            else
                objInvestor.Balance = Balance;

            objInvestor.Credit = Credit;

            int ranCode = -1;

            //bool CheckCode = false;
            //while (!CheckCode)
            //{
            //    Random ran = new Random();
            //    ranCode = ran.Next(0000000, 9999999);

            //    CheckCode = TradingServer.Facade.FacadeGetInvestorByCode(ranCode.ToString());
            //}

            string rendCode = TradingServer.Model.TradingCalculate.Instance.GetNextRandomCode();

            bool CheckCode = false;
            CheckCode = TradingServer.Facade.FacadeGetInvestorByCode(rendCode);

            //objInvestor.Code = ranCode.ToString();
            objInvestor.Code = rendCode;
            objInvestor.PrimaryPwd = Pwd;
            objInvestor.ReadOnlyPwd = Pwd;
            objInvestor.PhonePwd = Pwd;
            objInvestor.IsDisable = false;
            objInvestor.TaxRate = TaxRate;

            objInvestor.Leverage = Leverage;
            objInvestor.Address = Address;
            objInvestor.Phone = Phone;
            objInvestor.City = City;
            objInvestor.Country = Country;
            objInvestor.Email = Email;
            objInvestor.ZipCode = "NaN";
            objInvestor.RegisterDay = DateTime.Now;
            objInvestor.InvestorComment = "Demo Account";
            objInvestor.State = "NaN";
            objInvestor.NickName = NickName;
            objInvestor.SendReport = true;
            objInvestor.AllowChangePwd = true;
            objInvestor.UserConfig = "";

            string primaryPwd = objInvestor.PrimaryPwd;

            string temp = TradingServer.Model.ValidateCheck.Encrypt(objInvestor.PrimaryPwd);
            objInvestor.PrimaryPwd = temp;
            objInvestor.ReadOnlyPwd = temp;
            objInvestor.PhonePwd = temp;

            double tempBalance = objInvestor.Balance;
            objInvestor.Balance = 0;

            objInvestor.InvestorID = TradingServer.Facade.FacadeAddNewInvestor(objInvestor);

            if (objInvestor.InvestorID > 0)
            {
                int resultProfileID = TradingServer.Facade.FacadeAddInvestorProfile(objInvestor);

                objInvestor.InvestorProfileID = resultProfileID;

                Business.Market.InvestorList.Add(objInvestor);

                TradingServer.Facade.FacadeAddDeposit(objInvestor.InvestorID, tempBalance, "[add deposit create account]");
            }

            //SEND MAIL IF CREATE NEW INVESTOR COMPLETE
            if (objInvestor.InvestorID > 0)
            {
                #region SEND MAIL CREATE ACCOUNT
                Model.MailConfig newMailConfig = new Model.MailConfig();
                newMailConfig = TradingServer.Facade.FacadeGetMailConfig(objInvestor);

                //string header = "<!DOCTYPE html PUBLIC" + '"' + "-//W3C//DTD XHTML 1.0 Transitional//EN" + '"' + '"' + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd +" + '"' + ">" +
                //        "<html xmlns=" + '"' + "http://www.w3.org/1999/xhtml" + '"' + "><head><meta content=" + '"' + "text/html; charset=utf-8" + '"' + "http-equiv=" + '"' + "Content-Type" + '"' + "/>" +
                //        "<title>Confirmation Mail</title><style type=" + '"' + "text/css" + '"' + ">a{	text-decoration:none;color:#333333;	} a:hover{	color:#156a9d;text-decoration:underline;}</style> " +
                //        "<script type=" + '"' + "text/javascript" + '"' + "></script></head><body style=" + '"' + "font-family:Arial;font-size:12px;color:#333333;width:500px;margin-left:auto;margin-right:auto;" + '"' + ">" +
                //        "<div id=" + '"' + "header" + '"' + "style=" + '"' + "width:500px;height:70px;border-bottom:2px #dddddd solid;border-top:2px #dddddd solid;background-color:#f9f9f9;background-image:url('http://et5.mpf.co.id/img/mpflogo.png');background-repeat:no-repeat" + '"' + ">" +
                //        "</div><div style=" + '"' + "background-color:white;width:90%;color:#333333;margin:15px;" + '"' + "><b>Dear " +
                //        objInvestor.NickName + "</b>,<br/><br/>" +
                //        "<span style='color:#156a9d;font-weight:bold'>Your demo account has been activated !</span><br/><br/>" +
                //        "Please, keep your login credentials for future access :<br/><br/><table>";

                //string userandpass = "******" + objInvestor.Code + "</td></tr>" +
                //    "<tr><td style='width:100px'>Password :</td><td>" + primaryPwd + "</td></tr>";

                //string bottom = "<tr><td style='width:100px'>Access :</td><td><a href='http://et5.mpf.co.id'>http://et5.mpf.co.id</a></td></tr> " +
                //    "</table><br/><span style='color:#156a9d;font-weight:bold'>Best Regards,</span><br/>Millennium Penata Futures Customer Service<br/>" +
                //    "Contact us anytime: <a href='mailto:[email protected]'>[email protected]</a><br/><br/></div>" +
                //    "<div style='background-color:#f7f7f7;width:480px;border-top:2px #dddddd solid;border-bottom:2px #dddddd solid;padding:10px;'>" +
                //    "<span style='color:#156a9d;font-weight:bold'>PT. Millennium Penata Futures </span>is the first financial institution offering online-based  investment business in Indonesia. Through years of trial, we succeeded in finding an online system that provides data and news in realtime mode." +
                //    "</div><div style='width:490px;padding:5px;font-size:10px;text-align:right'>© Copyright 2011. PT. Millennium Penata Futures</div></body></html>";

                //string content = header + userandpass + bottom;

                StringBuilder content = new StringBuilder();
                Business.ConfirmationTemplate newTemplate = new Business.ConfirmationTemplate();
                content = newTemplate.GetConfirmation();
                content.Replace("[#LinkLogo]", "http://et5.mpf.co.id/img/mpflogo.png");
                content.Replace("[#FullName]", objInvestor.NickName);
                content.Replace("[#AccountType]", "demo account");
                content.Replace("[#UserName]", objInvestor.Code);
                content.Replace("[#Password]", primaryPwd);
                content.Replace("[#Website]", "http://et5.mpf.co.id");
                content.Replace("[#AccessLink]","http://et5.mpf.co.id");
                content.Replace("[#ServiceName]","Millennium Penata Futures Customer Service");
                content.Replace("[#MailSupport]","mailto:[email protected]");
                content.Replace("[#EmailContact]","*****@*****.**");
                content.Replace("[#CompanyName]","PT. Millennium Penata Futures ");
                content.Replace("[#CompanyIntroduct]","is the first financial institution offering online-based  investment business in Indonesia. Through years of trial, we succeeded in finding an online system that provides data and news in realtime mode.");
                content.Replace("[#CompanyCopyright]","PT. Millennium Penata Futures");

                TradingServer.Model.TradingCalculate.Instance.SendMail(objInvestor.Email, "CONFIRMATION EMAIL", content.ToString(), newMailConfig);
                #endregion
            }

            Business.Investor newInvestor = new Business.Investor();
            if (objInvestor.InvestorID > 0)
            {
                //newInvestor.Code = ranCode.ToString();
                newInvestor.Code = rendCode;
                newInvestor.PrimaryPwd = primaryPwd;
                newInvestor.ReadOnlyPwd = primaryPwd;
                newInvestor.PhonePwd = primaryPwd;
                newInvestor.IsDisable = false;
                newInvestor.TaxRate = TaxRate;
                newInvestor.Leverage = Leverage;
                newInvestor.Address = Address;
                newInvestor.Phone = Phone;
                newInvestor.City = City;
                newInvestor.Country = Country;
                newInvestor.Email = Email;
                newInvestor.ZipCode = "NaN";
                newInvestor.RegisterDay = DateTime.Now;
                newInvestor.InvestorComment = "Demo Account";
                newInvestor.State = "NaN";
                newInvestor.NickName = NickName;
                newInvestor.SendReport = true;
                newInvestor.InvestorID = objInvestor.InvestorID;
            }

            //SEND NOTIFY TO MANAGER
            //TradingServer.Facade.FacadeSendNotifyManagerRequest(3, newInvestor);
            //TradingServer.Facade.FacadeAutoSendMailRegistration(newInvestor);
            return newInvestor;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="Cmd"></param>
        /// <returns></returns>
        internal Business.Investor ExtractionInvestor(string Cmd)
        {
            Business.Investor Result = new Investor();
            if (!string.IsNullOrEmpty(Cmd))
            {
                string[] subParameter = Cmd.Split(',');
                if (subParameter.Length > 0)
                {
                    int investorStatusID = 5;
                    int investorGroupID = 0;
                    //int agentID = 0;

                    double balance = 0;
                    double credit = 0;
                    double taxRate = 0;
                    double leverage = 0;

                    bool isDisable = false;
                    bool AllowChangePwd = false;
                    bool ReadOnly = false;
                    bool SendReport = false;

                    //int.TryParse(subParameter[0], out investorStatusID);
                    int.TryParse(subParameter[0], out investorGroupID);
                    //int.TryParse(subParameter[1], out agentID);

                    double.TryParse(subParameter[2], out balance);
                    double.TryParse(subParameter[3], out credit);
                    double.TryParse(subParameter[9], out taxRate);
                    double.TryParse(subParameter[10], out leverage);

                    bool.TryParse(subParameter[8], out isDisable);
                    bool.TryParse(subParameter[21], out AllowChangePwd);
                    bool.TryParse(subParameter[22], out ReadOnly);
                    bool.TryParse(subParameter[23], out SendReport);

                    Result.InvestorStatusID = investorStatusID;
                    //Result.InvestorGroupInstance = TradingServer.Facade.FacadeGetInvestorGroupByInvestorGroupID(investorGroupID);

                    if (Business.Market.InvestorGroupList != null)
                    {
                        int countGroup = Business.Market.InvestorGroupList.Count;
                        for (int i = 0; i < countGroup; i++)
                        {
                            if (Business.Market.InvestorGroupList[i].InvestorGroupID == investorGroupID)
                            {
                                Result.InvestorGroupInstance = Business.Market.InvestorGroupList[i];
                                break;
                            }
                        }
                    }

                    if (subParameter[1] == "")
                    {
                        Result.AgentID = string.Empty;
                    }
                    else
                    {
                        Result.AgentID = subParameter[1];
                    }

                    if (balance > 0)
                    {
                        Result.Balance = balance;
                    }
                    else
                    {
                        if (Result.InvestorGroupInstance.ParameterItems != null)
                        {
                            int countConfig = Result.InvestorGroupInstance.ParameterItems.Count;
                            for (int i = 0; i < countConfig; i++)
                            {
                                if (Result.InvestorGroupInstance.ParameterItems[i].Code == "G24")
                                {
                                    double tempBalance = 0;
                                    double.TryParse(Result.InvestorGroupInstance.ParameterItems[i].StringValue, out tempBalance);
                                    Result.Balance = tempBalance;

                                    break;
                                }
                            }
                        }
                    }

                    Result.Credit = credit;

                    if (!string.IsNullOrEmpty(subParameter[4]))
                    {
                        Result.Code = subParameter[4];
                    }
                    else
                    {
                        //Random ran = new Random();
                        //int Code = ran.Next(0000000, 9999999);
                        //Result.Code = Code.ToString();
                        Result.Code = TradingServer.Model.TradingCalculate.Instance.GetNextRandomCode();
                    }

                    Result.PrimaryPwd = subParameter[5];
                    Result.ReadOnlyPwd = subParameter[6];
                    Result.PhonePwd = subParameter[7];
                    Result.IsDisable = isDisable;
                    Result.TaxRate = taxRate;
                    Result.Leverage = leverage;

                    //Investor Profile
                    DateTime registerDay = new DateTime();
                    DateTime.TryParse(subParameter[17], out registerDay);

                    Result.Address = subParameter[11];
                    Result.Phone = subParameter[12];
                    Result.City = subParameter[13];
                    Result.Country = subParameter[14];
                    Result.Email = subParameter[15];
                    Result.ZipCode = subParameter[16];
                    Result.RegisterDay = DateTime.Now;
                    Result.InvestorComment = subParameter[18];
                    Result.State = subParameter[19];
                    Result.NickName = subParameter[20];
                    Result.AllowChangePwd = AllowChangePwd;
                    Result.ReadOnly = ReadOnly;
                    Result.SendReport = SendReport;

                    if (subParameter.Length == 25)
                    {
                        Result.IDPassport = subParameter[24];
                    }
                    else
                    {
                        if (subParameter.Length > 25)
                        {
                            int investorID = -1;
                            int.TryParse(subParameter[24], out investorID);
                            Result.InvestorID = investorID;
                        }

                        if (subParameter.Length > 26)
                        {
                            int investorProfileID = -1;
                            int.TryParse(subParameter[25], out investorProfileID);
                            Result.InvestorProfileID = investorProfileID;

                            Result.IDPassport = subParameter[26];
                        }
                    }
                }
            }

            return Result;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="investorID"></param>
        /// <returns></returns>
        private static string GetNewTickOnInvestorOnline(int investorID, string key,int port)
        {
            string result = string.Empty;
            bool flagInvestor = false;

            #region GET TICK OF INVESTOR
            if (Business.Market.InvestorOnline != null)
            {
                int count = Business.Market.InvestorOnline.Count;
                for (int i = 0; i < Business.Market.InvestorOnline.Count; i++)
                {
                    if (Business.Market.InvestorOnline[i].LoginKey == null)
                    {
                        string content = "Login key of investor null: " + Business.Market.InvestorOnline[i].InvestorID + " Code: " +
                            Business.Market.InvestorOnline[i].Code;

                        TradingServer.Facade.FacadeAddNewSystemLog(5, content, "[login key null]", "", Business.Market.InvestorOnline[i].Code);
                    }

                    if (Business.Market.InvestorOnline[i].InvestorID == investorID && Business.Market.InvestorOnline[i].LoginKey == key)
                    {
                        #region COMMENT CODE
                        Business.Market.InvestorOnline[i].numTimeOut = 30;
                        if (Business.Market.InvestorOnline[i].TickInvestor != null &&
                            Business.Market.InvestorOnline[i].TickInvestor.Count > 0)
                        {
                            #region COMMENT
                            while (Business.Market.InvestorOnline[i].TickInvestor.Count > 0)
                            {
                                try
                                {
                                    if (Business.Market.InvestorOnline[i].TickInvestor[0] != null)
                                    {
                                        string time = "";
                                        if (port == 0)
                                            time = Business.Market.InvestorOnline[i].TickInvestor[0].TickTime + "▼";
                                        else
                                            time = Business.Market.InvestorOnline[i].TickInvestor[0].TickTime.Ticks + "▼";

                                        result += Business.Market.InvestorOnline[i].TickInvestor[0].Bid + "▼" +
                                            Business.Market.InvestorOnline[i].TickInvestor[0].HighInDay + "▼" +
                                            Business.Market.InvestorOnline[i].TickInvestor[0].LowInDay + "▼" +
                                            Business.Market.InvestorOnline[i].TickInvestor[0].Status + "▼" +
                                            Business.Market.InvestorOnline[i].TickInvestor[0].SymbolName + "▼" +
                                            //Business.Market.InvestorOnline[i].TickInvestor[0].TickTime.Ticks + "▼" +
                                            time +
                                            Business.Market.InvestorOnline[i].TickInvestor[0].Ask + "♦";

                                        Business.Market.InvestorOnline[i].TickInvestor.RemoveAt(0);
                                    }
                                    else
                                    {
                                        Business.Market.InvestorOnline[i].TickInvestor.RemoveAt(0);
                                    }
                                }
                                catch (Exception ex)
                                {

                                }
                            }
                            #endregion
                        }
                        #endregion

                        flagInvestor = true;
                        break;
                    }
                }
            }
            #endregion

            if (!flagInvestor)
            {
                if (Business.Market.InvestorList != null)
                {
                    int count = Business.Market.InvestorList.Count;
                    for (int i = 0; i < count; i++)
                    {
                        if (Business.Market.InvestorList[i].InvestorID == investorID && Business.Market.InvestorList[i].LoginKey == key)
                        {
                            Business.Investor newInvestor = new Business.Investor();
                            newInvestor.InvestorID = investorID;
                            newInvestor.LastConnectTime = DateTime.Now;
                            newInvestor.numTimeOut = 30;
                            newInvestor.TickInvestor = new List<Business.Tick>();
                            newInvestor.Code = Business.Market.InvestorList[i].Code;
                            newInvestor.IsLogout = false;
                            newInvestor.LoginKey = key;
                            newInvestor.InvestorGroupInstance = Business.Market.InvestorList[i].InvestorGroupInstance;

                            //set islogout for investor list
                            Business.Market.InvestorList[i].IsLogout = false;

                            if (Business.Market.InvestorList[i].InvestorGroupInstance.IsEnable && !Business.Market.InvestorList[i].IsDisable)
                            {
                                Business.Market.InvestorOnline.Add(newInvestor);
                                TradingServer.Facade.FacadeSendNotifyManagerRequest(1, newInvestor);
                            }

                            break;
                        }
                    }
                }
            }

            return result;
        }
        /// <summary>
        /// CLIENT LOGIN TRADING SYSTEM
        /// </summary>
        /// <param name="Code"></param>
        /// <param name="Pwd"></param>
        /// <returns></returns>
        internal List<string> LoginSystem(string Code, string Pwd)
        {
            List<string> Result = new List<string>();
            Business.Investor InvestorLogin = new Investor();
            InvestorLogin = TradingServer.Facade.FacadeLoginServer(Code, Pwd);
            if (InvestorLogin != null)
            {
                string tempLogin = string.Empty;
                tempLogin = "******" + Model.CommandFramework.CommandFrameworkInstance.ExtractInvestorToString(InvestorLogin);
                Result.Add(tempLogin);

                #region GET LIST IGROUP SECURITY CONFIG
                if (InvestorLogin.ListIGroupSecurity != null && InvestorLogin.ListIGroupSecurity.Count > 0)
                {
                    int countIGroupSecurity = InvestorLogin.ListIGroupSecurity.Count;
                    for (int i = 0; i < countIGroupSecurity; i++)
                    {
                        string MessageIGroupSecurity = "L002$" + Model.CommandFramework.CommandFrameworkInstance.ExtractIGroupSecurityToString(InvestorLogin.ListIGroupSecurity[i]);
                        MessageIGroupSecurity = MessageIGroupSecurity.Remove(MessageIGroupSecurity.Length - 1);

                        if (Business.Market.SecurityList != null)
                        {
                            int countSecurity = Business.Market.SecurityList.Count;
                            for (int n = 0; n < countSecurity; n++)
                            {
                                if (Business.Market.SecurityList[n].SecurityID == InvestorLogin.ListIGroupSecurity[i].SecurityID)
                                {
                                    string MessageSecurity = "S01$" + Business.Market.SecurityList[n].SecurityID + "," + Business.Market.SecurityList[n].Name + "," +
                                        Business.Market.SecurityList[n].Description + "," + Business.Market.SecurityList[n].MarketAreaID;

                                    Result.Add(MessageSecurity);

                                    break;
                                }
                            }
                        }

                        Result.Add(MessageIGroupSecurity);
                    }
                }
                #endregion

                #region GET LIST IGROUP SYMBOL CONFIG
                if (InvestorLogin.ListIGroupSymbol != null && InvestorLogin.ListIGroupSymbol.Count > 0)
                {
                    int countIGroupSymbol = InvestorLogin.ListIGroupSymbol.Count;
                    for (int j = 0; j < countIGroupSymbol; j++)
                    {
                        string MessageIGroupSymbol = "L003$" + Model.CommandFramework.CommandFrameworkInstance.ExtractIGroupSymbolToString(InvestorLogin.ListIGroupSymbol[j]);
                        MessageIGroupSymbol = MessageIGroupSymbol.Remove(MessageIGroupSymbol.Length - 1);

                        Result.Add(MessageIGroupSymbol);
                    }
                }
                #endregion

                #region GET LIST SYMBOL BY INVESTOR
                if (InvestorLogin.ListSymbol != null && InvestorLogin.ListSymbol.Count > 0)
                {
                    int countSymbol = InvestorLogin.ListSymbol.Count;
                    for (int n = 0; n < countSymbol; n++)
                    {
                        string MessageSymbol = "L004$" + Model.CommandFramework.CommandFrameworkInstance.ExtractSymbolToString(InvestorLogin.ListSymbol[n]);

                        Result.Add(MessageSymbol);
                    }
                }
                #endregion
            }
            else
            {
                string tempLogin = "******";
                Result.Add(tempLogin);
            }

            return Result;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="ipAddress"></param>
        /// <param name="code"></param>
        /// <returns></returns>
        public string AgentStringPort(string cmd, string ipAddress, string code)
        {
            string result = string.Empty;

            if (!string.IsNullOrEmpty(cmd))
            {
                string[] subValue = cmd.Split('$');
                switch (subValue[0])
                {
                    #region GET GROUP BY GROUP ID
                    case "GetGroupByGroupID":
                        {
                            int groupID = int.Parse(subValue[1]);
                            Business.InvestorGroup newGroup = new InvestorGroup();
                            if (Business.Market.InvestorGroupList != null)
                            {
                                int count = Business.Market.InvestorGroupList.Count;
                                for (int i = 0; i < count; i++)
                                {
                                    if (Business.Market.InvestorGroupList[i].InvestorGroupID == groupID)
                                    {
                                        newGroup = Business.Market.InvestorGroupList[i];
                                        break;
                                    }
                                }
                            }

                            string msg = subValue[0] + "$" + newGroup.InvestorGroupID + "{" + newGroup.Name + "{" + newGroup.Owner + "{" + newGroup.DefautDeposite;
                            result = msg;
                        }
                        break;
                    #endregion

                    #region GET SYMBOL CONFIG BY SYMBOL ID
                    case "GetSymbolConfigBySymbolID":
                        {
                            int symbolID = -1;
                            int.TryParse(subValue[1], out symbolID);
                            string temp = this.SelectTradingConfigBySymbolIDInSymbolList(symbolID);

                            result = subValue[0] + "$" + temp;
                        }
                        break;
                    #endregion

                    #region GET SECURITY
                    case "GetSecurity":
                        {
                            string temp = string.Empty;
                            temp = this.SelectSecurityInSecurityList();
                            result = subValue[0] + "$" + temp;
                        }
                        break;
                    #endregion

                    #region GET SECURITY CONFIG BY SECURITY ID
                    case "GetSecurityConfigBySecurityID":
                        {
                            string temp = string.Empty;
                            int SecurityID = -1;
                            int.TryParse(subValue[1], out SecurityID);
                            temp = this.SelectSecurityConfigBySecurityIDInSecurityList(SecurityID);
                            result = subValue[0] + "$" + temp;
                        }
                        break;
                    #endregion

                    #region GET IGROUPSECURITY BY GROUP ID
                    case "GetIGroupSecurityByGroupID":
                        {
                            string temp = string.Empty;
                            int InvestorGroupID = -1;
                            int.TryParse(subValue[1], out InvestorGroupID);

                            List<Business.IGroupSecurity> Result = new List<IGroupSecurity>();
                            if (Business.Market.IGroupSecurityList != null)
                            {
                                int countIGroupSecurity = Business.Market.IGroupSecurityList.Count;
                                for (int j = 0; j < countIGroupSecurity; j++)
                                {
                                    if (Business.Market.IGroupSecurityList[j].InvestorGroupID == InvestorGroupID)
                                    {
                                        Result.Add(Business.Market.IGroupSecurityList[j]);
                                    }
                                }
                            }
                            //Result = TradingServer.Facade.FacadeGetIGroupSecurityByInvestorGroupID(InvestorGroupID);
                            if (Result != null)
                            {
                                int countIGroupSecurity = Result.Count;
                                for (int n = 0; n < countIGroupSecurity; n++)
                                {
                                    temp += Result[n].IGroupSecurityID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "," +
                                                Result[n].SecurityID.ToString() + "|";
                                }
                            }

                            result = subValue[0] + "$" + temp;
                        }
                        break;
                    #endregion

                    #region GET IGROUP SECURITY CONFIG BY IGROUP SECURITY ID
                    case "GetIGroupSecurityConfigByIGroupSecurityID":
                        {
                            string temp = string.Empty;
                            int IGroupSecurityID = -1;
                            int.TryParse(subValue[1], out IGroupSecurityID);
                            temp = this.GetIGroupSecurityConfigByIGroupSecurityIDInIGroupSecurityList(IGroupSecurityID);
                            result = subValue[0] + "}" + temp;
                        }
                        break;
                    #endregion

                    #region GET IGROUP SYMBOL BY GROUP ID
                    case "GetIGroupSymbolByGroupID":
                        {
                            string temp = string.Empty;
                            int groupID = -1;
                            int.TryParse(subValue[1], out groupID);

                            List<Business.IGroupSymbol> Result = new List<IGroupSymbol>();
                            if (Business.Market.IGroupSymbolList != null)
                            {
                                int countIGroupSymbol = Business.Market.IGroupSymbolList.Count;
                                for (int j = 0; j < countIGroupSymbol; j++)
                                {
                                    if (Business.Market.IGroupSymbolList[j].InvestorGroupID == groupID)
                                    {
                                        Result.Add(Business.Market.IGroupSymbolList[j]);
                                    }
                                }
                            }

                            //Result = TradingServer.Facade.FacadeGetIGroupSymbolBySymbolID(SymbolID);
                            if (Result != null)
                            {
                                int countIGroupSymbol = Result.Count;
                                for (int n = 0; n < countIGroupSymbol; n++)
                                {
                                    temp += Result[n].IGroupSymbolID.ToString() + "," + Result[n].SymbolID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "|";
                                }
                            }

                            result = subValue[0] + "$" + temp;
                        }
                        break;
                    #endregion

                    #region GET IGROUP SYMBOL CONFIG BY IGROUP SYMBOL ID
                    case "GetIGroupSymbolConfigByIGroupSymbolID":
                        {
                            bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress);
                            if (checkip)
                            {
                                string temp = string.Empty;
                                int IGroupSymbolID = -1;
                                int.TryParse(subValue[1], out IGroupSymbolID);
                                temp = this.GetIGroupSymbolConfigByIGroupSymbolIDInIGroupSymbolList(IGroupSymbolID);
                                result = subValue[0] + "$" + temp;
                            }
                        }
                        break;
                    #endregion

                    #region ADD NEW INVESTOR
                    case "AddNewInvestor":
                        {
                            Business.Investor newInvestor = new Investor();

                            #region EXTRACT STRING TO OBJECT
                            string[] subParameter = subValue[1].Split('{');
                            if (subParameter.Length > 0)
                            {
                                int groupID = int.Parse(subParameter[0]);
                                newInvestor.AgentRefID = int.Parse(subParameter[1]);
                                newInvestor.Balance = 0;
                                newInvestor.Credit = 0;

                                if (!string.IsNullOrEmpty(subParameter[4]))
                                    newInvestor.Code = subParameter[4];
                                else
                                    newInvestor.Code = TradingServer.Model.TradingCalculate.Instance.GetNextRandomCode();

                                newInvestor.PrimaryPwd = subParameter[5];
                                newInvestor.ReadOnlyPwd = subParameter[6];
                                newInvestor.PhonePwd = subParameter[7];
                                newInvestor.IsDisable = bool.Parse(subParameter[8]);
                                newInvestor.TaxRate = double.Parse(subParameter[9]);
                                newInvestor.Leverage = double.Parse(subParameter[10]);
                                newInvestor.Address = subParameter[11];
                                newInvestor.Phone = subParameter[12];
                                newInvestor.City = subParameter[13];
                                newInvestor.Country = subParameter[14];
                                newInvestor.Email = subParameter[15];
                                newInvestor.ZipCode = subParameter[16];
                                newInvestor.RegisterDay = DateTime.Now;
                                newInvestor.InvestorComment = subParameter[18];
                                newInvestor.State = subParameter[19];
                                newInvestor.NickName = subParameter[20];
                                newInvestor.AllowChangePwd = bool.Parse(subParameter[21]);
                                newInvestor.ReadOnly = bool.Parse(subParameter[22]);
                                newInvestor.SendReport = bool.Parse(subParameter[23]);
                                newInvestor.IDPassport = subParameter[24];
                                newInvestor.InvestorStatusID = 5;
                                newInvestor.AgentID = "0";

                                if (Business.Market.InvestorGroupList != null)
                                {
                                    int countGroup = Business.Market.InvestorGroupList.Count;
                                    for (int i = 0; i < countGroup; i++)
                                    {
                                        if (Business.Market.InvestorGroupList[i].InvestorGroupID == groupID)
                                        {
                                            newInvestor.InvestorGroupInstance = Business.Market.InvestorGroupList[i];
                                            break;
                                        }
                                    }
                                }
                            }
                            #endregion

                            //Check Email Add Send Mail Confirm Create Account Complete
                            bool checkEmail = Model.TradingCalculate.Instance.IsEmail(newInvestor.Email);

                            if (checkEmail)
                            {
                                bool CheckCode = false;
                                CheckCode = TradingServer.Facade.FacadeGetInvestorByCode(newInvestor.Code);
                                if (CheckCode == true)
                                {
                                    double balance = newInvestor.Balance;
                                    newInvestor.Balance = 0;

                                    int resultAddNew = TradingServer.Facade.FacadeAddNewInvestor(newInvestor);

                                    //Add Investor To Investor List
                                    if (resultAddNew > 0)
                                    {
                                        newInvestor.InvestorID = resultAddNew;
                                        int resultProfileID = TradingServer.Facade.FacadeAddInvestorProfile(newInvestor);
                                        newInvestor.InvestorProfileID = resultProfileID;
                                        if (string.IsNullOrEmpty(newInvestor.AgentID))
                                            newInvestor.AgentID = "0";

                                        Business.Market.InvestorList.Add(newInvestor);

                                        //Deposit account
                                        newInvestor.Deposit(balance, resultAddNew, "deposit");
                                    }

                                    result = subValue[0] + "$" + resultAddNew.ToString() + "," + newInvestor.Code;

                                    //SEND NOTIFY TO MANAGER
                                    TradingServer.Facade.FacadeSendNotifyManagerRequest(3, newInvestor);

                                    #region INSERT SYSTEM LOG
                                    //INSERT SYSTEM LOG
                                    //'2222': new account '9942881' - ngthanhduc
                                    string status = "[Failed]";

                                    if (resultAddNew > 0)
                                        status = "[Success]";

                                    string content = "'" + code + "': new account '" + newInvestor.Code + "' - " + newInvestor.NickName + " " + status;
                                    string comment = "[add new account]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                    #endregion
                                }
                                else
                                {
                                    result = subValue[0] + "$Account exist";
                                    string content = "'" + code + "': new account '" + newInvestor.Code + "' - " + newInvestor.NickName + " failed(account exist)";
                                    string comment = "[add new account]";
                                    TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                }
                            }
                            else
                            {
                                result = subValue[0] + "$Invalid email";
                                string content = "'" + code + "': new account '" + newInvestor.Code + "' - " + newInvestor.NickName + " failed(invalid email)";
                                string comment = "[add new account]";
                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                            }
                        }
                        break;
                    #endregion

                    #region CREDIT IN
                    case "CreditIn":
                        {
                            string[] Parameter = subValue[1].Split(',');
                            if (Parameter.Length == 3)
                            {
                                bool ResultCredit = false;
                                int InvestorID = 0;
                                double Credit = 0;

                                int.TryParse(Parameter[0], out InvestorID);
                                bool parseCredit = double.TryParse(Parameter[1], out Credit);

                                Business.Investor tempInvestor = new Investor();
                                tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(InvestorID);

                                ResultCredit = TradingServer.Facade.FacadeAddCredit(InvestorID, Credit, Parameter[2]);

                                result = subValue[0] + "$" + ResultCredit + "," + InvestorID + "," + Credit;

                                #region INSERT SYSTEM LOG
                                //INSERT SYSTEM LOG
                                //'2222': account '9789300' withdrawal: 100000.00
                                string status = "[Success]";
                                if (!ResultCredit)
                                    status = "[Failed]";

                                string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Credit.ToString(), 2);
                                string content = "'Agent-" + code + "': account '" + tempInvestor.Code + "' credit in: " + tempCredit + " " + status;
                                string comment = "[credit in]";
                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                #endregion
                            }
                        }
                        break;
                    #endregion

                    #region CREDIT OUT
                    case "CreditOut":
                        {
                            string[] Parameter = subValue[1].Split(',');
                            if (Parameter.Length == 3)
                            {
                                bool ResultCredit = false;
                                int InvestorID = 0;
                                double Credit = 0;

                                int.TryParse(Parameter[0], out InvestorID);
                                bool parseCredit = double.TryParse(Parameter[1], out Credit);

                                Business.Investor tempInvestor = new Investor();
                                tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(InvestorID);

                                ResultCredit = TradingServer.Facade.FacadeSubCredit(InvestorID, Credit, Parameter[2]);
                                result = subValue[0] + "$" + ResultCredit + "," + InvestorID + "," + Credit;
                                #region INSERT SYSTEM LOG
                                //INSERT SYSTEM LOG
                                //'2222': account '9789300' withdrawal: 100000.00
                                string status = "[Success]";
                                if (!ResultCredit)
                                    status = "[Failed]";

                                string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Credit.ToString(), 2);
                                string content = "'Agent-" + code + "': account '" + tempInvestor.Code + "' credit out: " + tempCredit + " " + status;
                                string comment = "[credit out]";
                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                #endregion
                            }
                        }
                        break;
                    #endregion

                    #region DEPOSIT INVESTOR
                    case "AddDeposit":
                        {
                            string[] subParameter = subValue[1].Split('{');
                            if (subParameter.Length == 4)
                            {
                                bool resultDeposit = false;
                                int investorID = -1;
                                double money = 0;

                                int.TryParse(subParameter[0], out investorID);
                                bool parseMoney = double.TryParse(subParameter[1], out money);
                                Business.Investor newInvestor = new Investor();
                                if (investorID > 0 && parseMoney)
                                {
                                    newInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(investorID);

                                    resultDeposit = TradingServer.Facade.FacadeAddDeposit(investorID, money, subParameter[2]);
                                    result = subValue[0] + "$" + resultDeposit + "{" + investorID + "{" + money;
                                }
                                else
                                {
                                    result = subValue[0] + "$False{" + investorID + "{" + money;
                                }

                                #region INSERT SYSTEM LOG
                                //INSERT SYSTEM LOG
                                //'2222': account '9789300' withdrawal: 100000.00
                                string status = "[Success]";
                                if (!resultDeposit)
                                    status = "[Failed]";

                                string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(money.ToString(), 2);
                                string content = "'Agent-" + subParameter[3] + "': account '" + newInvestor.Code + "' deposit: " + tempCredit + " " + status;
                                string comment = "[deposit]";
                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                #endregion
                            }
                        }
                        break;
                    #endregion

                    #region WITHDRAWAL INVESTOR
                    case "Withdrawal":
                        {
                            string[] subParameter = subValue[1].Split('{');
                            if (subParameter.Length == 4)
                            {
                                bool resultDeposit = false;
                                int investorID = -1;
                                double money = 0;

                                int.TryParse(subParameter[0], out investorID);
                                bool parseMoney = double.TryParse(subParameter[1], out money);
                                Business.Investor newInvestor = new Investor();
                                if (investorID > 0 && parseMoney)
                                {
                                    newInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(investorID);

                                    resultDeposit = TradingServer.Facade.FacadeWithRawals(investorID, money, subParameter[2]);
                                    result = subValue[0] + "$" + resultDeposit + "{" + investorID + "{" + money;
                                }
                                else
                                {
                                    result = subValue[0] + "$False{" + investorID + "{" + money;
                                }

                                #region INSERT SYSTEM LOG
                                //INSERT SYSTEM LOG
                                //'2222': account '9789300' withdrawal: 100000.00
                                string status = "[Success]";
                                if (!resultDeposit)
                                    status = "[Failed]";

                                string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(money.ToString(), 2);
                                string content = "'Agent-" + subParameter[3] + "': account '" + newInvestor.Code + "' withdrawal: " + tempCredit + " " + status;
                                string comment = "[withdrawal]";
                                TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code);
                                #endregion
                            }
                        }
                        break;
                    #endregion

                    #region UPDATE INVESTOR
                    case "UpdateInvestor":
                        {
                            //add GroupID
                            //UpdateInvestor$Password{ReadPassword{PhonePassword{Address{Phone{City{Country{Email{ZipCode{State{NickName{IsReadOnly{IsDisable{
                            //AllowChangePassword{SendReport{InvestorComment{Leverage{TaxRate{IDPassport
                            string[] subParameter = subValue[1].Split('{');
                            if (subParameter.Length > 0)
                            {
                                Business.Investor newInvestor = new Investor();
                                newInvestor.PrimaryPwd = subParameter[0];
                                newInvestor.ReadOnlyPwd = subParameter[1];
                                newInvestor.PhonePwd = subParameter[2];
                                newInvestor.Address = subParameter[3];
                                newInvestor.Phone = subParameter[4];
                                newInvestor.City = subParameter[5];
                                newInvestor.Country = subParameter[6];
                                newInvestor.Email = subParameter[7];
                                newInvestor.ZipCode = subParameter[8];
                                newInvestor.State = subParameter[9];
                                newInvestor.NickName = subParameter[10];
                                newInvestor.ReadOnly = bool.Parse(subParameter[11]);
                                newInvestor.IsDisable = bool.Parse(subParameter[12]);
                                newInvestor.AllowChangePwd = bool.Parse(subParameter[13]);
                                newInvestor.SendReport = bool.Parse(subParameter[14]);
                                //newInvestor.ReadOnly = bool.Parse(subParameter[15]);
                                newInvestor.InvestorComment = subParameter[15];
                                newInvestor.Leverage = double.Parse(subParameter[16]);
                                newInvestor.TaxRate = double.Parse(subParameter[17]);
                                newInvestor.IDPassport = subParameter[18];
                                newInvestor.InvestorID = int.Parse(subParameter[19]);
                                newInvestor.InvestorStatusID = 5;
                                newInvestor.AgentID = "0";

                                int groupID = int.Parse(subParameter[20]);
                                if (Business.Market.InvestorGroupList != null)
                                {
                                    int count = Business.Market.InvestorGroupList.Count;
                                    for (int i = 0; i < count; i++)
                                    {
                                        if (Business.Market.InvestorGroupList[i].InvestorGroupID == groupID)
                                        {
                                            newInvestor.InvestorGroupInstance = Business.Market.InvestorGroupList[i];
                                            break;
                                        }
                                    }
                                }

                                if (Business.Market.InvestorList != null)
                                {
                                    int count = Business.Market.InvestorList.Count;
                                    for (int i = 0; i < count; i++)
                                    {
                                        if (Business.Market.InvestorList[i].InvestorID == newInvestor.InvestorID)
                                        {
                                            newInvestor.InvestorProfileID = Business.Market.InvestorList[i].InvestorProfileID;
                                            break;
                                        }
                                    }
                                }

                                newInvestor.Code = subParameter[21];

                                bool resultUpdate = TradingServer.Facade.FacadeUpdateInvestor(newInvestor, ipAddress, code);
                                bool resultUpdateProfile = TradingServer.Facade.FacadeUpdateInvestorProfile(newInvestor, ipAddress, code);

                                if (newInvestor.PrimaryPwd != "") resultUpdate = TradingServer.Facade.FacadeUpdatePasswordByCode(newInvestor.Code, newInvestor.PrimaryPwd);
                                if (newInvestor.ReadOnlyPwd != "") resultUpdate = TradingServer.Facade.FacadeUpdateReadPwdByCode(newInvestor.Code, newInvestor.ReadOnlyPwd);
                                if (newInvestor.PhonePwd != "") resultUpdate = TradingServer.Facade.FacadeUpdatePhonePwdByCode(newInvestor.Code, newInvestor.PhonePwd);

                                result = subValue[0] + "$" + resultUpdate.ToString();
                            }
                        }
                        break;
                    #endregion

                    #region GET INVESTOR ACCOUNT BY INVESTOR ID
                    case "GetInvestorAccountByInvestorID":
                        {
                            int investorID = int.Parse(subValue[1]);

                        }
                        break;
                    #endregion

                    #region GET SYMBOL BY SYMBOL ID
                    case "GetSymbolBySymbolID":
                        {
                            int symbolID = int.Parse(subValue[1]);
                            string temp = this.SelectSymbolByIDInSymbolList(symbolID);

                            result = subValue[0] + "$" + temp;
                        }
                        break;
                    #endregion

                    #region GET INVESTOR BY INVESTOR ID
                    case "GetInvestorByInvestorID":
                        {
                            int investorID = int.Parse(subValue[1]);
                            Business.Investor newInvestor = TradingServer.ClientFacade.FacadeGetInvestorByInvestor(investorID);

                            //GET CLOSE PL IN DAY, COMMISSION CLOSE IN DAY, SWAP CLOSE IN DAY
                            DateTime timeStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 00, 00, 00);
                            DateTime timeEnd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);

                            double plInDay = 0;
                            double commInDay = 0;
                            double swapInDay = 0;

                            List<Business.OpenTrade> listCommand = TradingServer.Facade.FacadeGetCommandHistoryWithTime(investorID, timeStart, timeEnd);
                            if (listCommand != null)
                            {
                                int count = listCommand.Count;
                                for (int i = 0; i < count; i++)
                                {
                                    if (listCommand[i].Type.ID == 1 || listCommand[i].Type.ID == 2)
                                    {
                                        plInDay += listCommand[i].Profit;
                                        commInDay += listCommand[i].Commission;
                                        swapInDay += listCommand[i].Swap;
                                    }
                                }
                            }

                            result = subValue[0] + "$" + newInvestor.Address + "{" + newInvestor.AgentRefID + "{" + newInvestor.AllowChangePwd + "{" + newInvestor.Balance + "{" +
                                        newInvestor.City + "{" + newInvestor.Code + "{" + newInvestor.Comment + "{" + newInvestor.Country + "{" + newInvestor.Credit + "{" +
                                        newInvestor.Email + "{" + newInvestor.Equity + "{" + newInvestor.FirstName + "{" + newInvestor.FreeMargin + "{" + newInvestor.FreezeMargin + "{" +
                                        newInvestor.IDPassport + "{" + newInvestor.InvestorComment + "{" + newInvestor.IsDisable + "{" + newInvestor.IsReadOnly + "{" +
                                        newInvestor.Leverage + "{" + newInvestor.Margin + "{" + newInvestor.MarginLevel + "{" + newInvestor.NickName + "{" + newInvestor.Phone + "{" +
                                        newInvestor.PhonePwd + "{" + newInvestor.PrimaryPwd + "{" + newInvestor.Profit + "{" + newInvestor.ReadOnlyPwd + "{" + newInvestor.RegisterDay + "{" +
                                        newInvestor.SendReport + "{" + newInvestor.State + "{" + newInvestor.ZipCode + "{" + plInDay + "{" + commInDay + "{" + swapInDay;
                        }
                        break;
                    #endregion

                    #region ADD INVESTOR TO AGENT
                    case "AddInvestorToAgent":
                        {
                            //AddInvestorToAgent$InvestorCode{AgentID{ListGroupOfAgent,ListGroupOfAgent,....
                            string[] subParameter = subValue[1].Split('{');
                            if (subParameter.Length >2)
                            {
                                List<int> listGroupAgent = new List<int>();
                                string[] subGroupAgent = subParameter[2].Split(',');

                                if (subGroupAgent.Length > 0)
                                {
                                    int countGroupAgent = subGroupAgent.Length;
                                    for (int i = 0; i < countGroupAgent; i++)
                                    {
                                        listGroupAgent.Add(int.Parse(subGroupAgent[i]));
                                    }
                                }

                                int agentID = int.Parse(subParameter[1]);
                                if (Business.Market.InvestorList != null)
                                {
                                    int count = Business.Market.InvestorList.Count;
                                    for (int i = 0; i < count; i++)
                                    {
                                        if (Business.Market.InvestorList[i].Code.Trim() == subParameter[0].Trim())
                                        {
                                            if (Business.Market.InvestorList[i].AgentRefID < 0)
                                            {
                                                bool isExits = false;
                                                if (listGroupAgent != null)
                                                {
                                                    int countGroupAgent = listGroupAgent.Count;
                                                    for (int j = 0; j < countGroupAgent; j++)
                                                    {
                                                        if (listGroupAgent[j] == Business.Market.InvestorList[i].InvestorGroupInstance.InvestorGroupID)
                                                        {
                                                            isExits = true;
                                                            break;
                                                        }
                                                    }
                                                }

                                                if (!isExits)
                                                    result = subValue[0] + "$False}GroupInvalid";
                                                else
                                                {
                                                    //UPDATE AGENTREFID TO DATABASE AND RAM
                                                    bool updateAgentRef = TradingServer.Facade.FacadeUpdateAgentRefID(Business.Market.InvestorList[i].InvestorID, agentID);
                                                    if (updateAgentRef)
                                                    {
                                                        Business.Market.InvestorList[i].AgentRefID = agentID;

                                                        string msg = Business.Market.InvestorList[i].InvestorID + "{" +
                                                        Business.Market.InvestorList[i].InvestorGroupInstance.InvestorGroupID + "{" +
                                                        agentID + Business.Market.InvestorList[i].Balance + "{" + Business.Market.InvestorList[i].Credit + "{" +
                                                        Business.Market.InvestorList[i].Code + "{" + Business.Market.InvestorList[i].PrimaryPwd + "{" +
                                                        Business.Market.InvestorList[i].ReadOnlyPwd + "{" + Business.Market.InvestorList[i].PhonePwd + "{" +
                                                        Business.Market.InvestorList[i].IsDisable + "{" + Business.Market.InvestorList[i].TaxRate + "{" +
                                                        Business.Market.InvestorList[i].Leverage + "{" + Business.Market.InvestorList[i].AllowChangePwd + "{" +
                                                        Business.Market.InvestorList[i].ReadOnly + "{" + Business.Market.InvestorList[i].Address + "{" +
                                                        Business.Market.InvestorList[i].Phone + "{" + Business.Market.InvestorList[i].City + "{" +
                                                        Business.Market.InvestorList[i].Country + "{" + Business.Market.InvestorList[i].Email + "{" +
                                                        Business.Market.InvestorList[i].ZipCode + "{" + Business.Market.InvestorList[i].RegisterDay + "{" +
                                                        Business.Market.InvestorList[i].Comment + "{" + Business.Market.InvestorList[i].State + "{" +
                                                        Business.Market.InvestorList[i].NickName + "{" + Business.Market.InvestorList[i].IDPassport;

                                                        result = subValue[0] + "$True}" + msg;
                                                    }
                                                    else
                                                        result = subValue[0] + "$False}SomeError";
                                                }
                                            }
                                            else
                                            {
                                                result = subValue[0] + "$False}AgentExits";
                                            }

                                            break;
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    #endregion

                    #region GET END OF DAY INFO INVESTOR ACCOUNT
                    case "GetEndOfDayAccount":
                        {
                            int investorID = int.Parse(subValue[1]);
                            if (investorID > 0)
                            {
                                //if (Business.Market.InvestorList != null)
                                //{
                                //    int count = Business.Market.InvestorList.Count;
                                //    for (int i = 0; i < count; i++)
                                //    {
                                //        if (Business.Market.InvestorList[i].InvestorID == investorID)
                                //        {
                                //            result = subValue[0] + "$" + Business.Market.InvestorList[i].FloatingPL + "{" +
                                //                Business.Market.InvestorList[i].MonthVolume + "{" + Business.Market.InvestorList[i].TimeSave;

                                //            break;
                                //        }
                                //    }
                                //}
                                if (Business.Market.ListEODAgent != null)
                                {
                                    int count = Business.Market.ListEODAgent.Count;
                                    for (int i = 0; i < count; i++)
                                    {
                                        if (Business.Market.ListEODAgent[i].InvestorID == investorID)
                                        {
                                            result = subValue[0] + "$" + Business.Market.ListEODAgent[i].FloatingPL + "{" +
                                                Business.Market.ListEODAgent[i].MonthVolume + "{" + DateTime.Now;

                                            break;
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    #endregion

                    #region GET MONTH SIZE
                    case "GetMonthSize":
                        {
                            double size = 0;
                            string[] subParameter = subValue[1].Split('{');
                            if (subParameter.Length > 0)
                            {
                                int investorID = int.Parse(subParameter[0]);
                                DateTime timeStart = DateTime.Parse(subParameter[1]);
                                DateTime timeEnd = DateTime.Parse(subParameter[2]);

                                List<Business.OpenTrade> listHistory = TradingServer.Facade.FacadeGetCommandHistoryWithTime(investorID, timeStart, timeEnd);
                                if (listHistory != null)
                                {
                                    int count = listHistory.Count;
                                    for (int i = 0; i < count; i++)
                                    {
                                        bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(listHistory[i].Type.ID);
                                        if (!isPending && listHistory[i].Type.ID != 13 && listHistory[i].Type.ID != 14 &&
                                            listHistory[i].Type.ID != 15 && listHistory[i].Type.ID != 16 && listHistory[i].Type.ID != 21)
                                            size += listHistory[i].Size;
                                    }
                                }
                            }

                            result = subValue[0] + "$" + size;
                        }
                        break;
                    #endregion

                    #region GET FLOATING PL
                    case "GetFloatingPL":
                        {
                            double floatingPL = 0;
                            string[] subParameter = subValue[1].Split('{');
                            if (subParameter.Length > 0)
                            {
                                int investorID = int.Parse(subParameter[0]);
                                DateTime timeStart = DateTime.Parse(subParameter[1]);
                                DateTime timeEnd = DateTime.Parse(subParameter[2]);

                                List<Business.OpenTrade> listHistory = TradingServer.Facade.FacadeGetCommandHistoryWithTime(investorID, timeStart, timeEnd);
                                if (listHistory != null)
                                {
                                    int count = listHistory.Count;
                                    for (int i = 0; i < count; i++)
                                    {
                                        bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(listHistory[i].Type.ID);
                                        if (!isPending && listHistory[i].Type.ID != 13 && listHistory[i].Type.ID != 14 &&
                                            listHistory[i].Type.ID != 15 && listHistory[i].Type.ID != 16 && listHistory[i].Type.ID != 21)
                                            floatingPL += listHistory[i].Profit;
                                    }
                                }
                            }

                            result = subValue[0] + "$" + floatingPL;
                        }
                        break;
                    #endregion

                    #region UPDATE CITY OF INVESTOR
                    case "UpdateCityInvestor":
                        {
                            string[] subParameter = subValue[1].Split('{');
                            if (subParameter.Length > 0)
                            {
                                int count = subParameter.Length;
                                for (int i = 0; i < count; i++)
                                {
                                    bool isComplete = false;
                                    string[] subData = subParameter[i].Split('|');
                                    if (subData.Length == 2)
                                    {
                                        int investorID = int.Parse(subData[0]);
                                        if (Business.Market.InvestorList != null)
                                        {
                                            int countInvestor = Business.Market.InvestorList.Count;
                                            for (int j = 0; j < countInvestor; j++)
                                            {
                                                if (Business.Market.InvestorList[i].InvestorID == investorID)
                                                {
                                                    Business.Market.InvestorList[i].City = subData[1];
                                                    isComplete = true;
                                                    break;
                                                }
                                            }
                                        }
                                    }

                                    if (!isComplete)
                                    {
                                        result = subValue[0] + "$" + false;
                                        return result;
                                    }
                                }
                            }
                        }
                        break;
                    #endregion

                    #region GET ALL TICK
                    case "GetAllTick":
                        {
                            StringBuilder tempResult = new StringBuilder();
                            List<Business.Tick> listTick = TradingServer.Facade.FacadeGetTickOnline();
                            if (listTick != null)
                            {
                                int count = listTick.Count;
                                tempResult.Append(subValue[0]);
                                tempResult.Append("$");

                                for (int i = 0; i < count; i++)
                                {
                                    tempResult.Append(listTick[i].Bid);
                                    tempResult.Append("{");
                                    tempResult.Append(listTick[i].Ask);
                                    tempResult.Append("{");
                                    tempResult.Append(listTick[i].HighInDay);
                                    tempResult.Append("{");
                                    tempResult.Append(listTick[i].LowInDay);
                                    tempResult.Append("{");
                                    tempResult.Append(listTick[i].Status);
                                    tempResult.Append("{");
                                    tempResult.Append(listTick[i].SymbolName);
                                    tempResult.Append("{");
                                    tempResult.Append(listTick[i].TickTime);
                                    tempResult.Append("[");
                                }

                                result = tempResult.ToString();

                                result.Remove(result.Length - 1);
                            }
                        }
                        break;
                    #endregion
                }
            }

            return result;
        }