public string GetG2CompanyId(string strUserName, string strPassword, int portNo)
        {
            Hashtable  sessionList = (Hashtable)Application["m_sessionList"];
            DSResponse response    = new DSResponse();

            //Retrieve application constants
            string strConnStr = (string)Context.Cache["CONN_STR"];

            string  strErrMsg = "";
            BSLUser objUser   = GetUser(strUserName, strPassword, ref strErrMsg);

            if (objUser == null)
            {
                response.G2MgrResponse.AddG2MgrResponseRow("", strErrMsg, 1);
                return(response.GetXml());
            }

            G2Process p = (G2Process)sessionList[portNo];

            if ((p == null) || (p.HasExited))
            {
                response.G2MgrResponse.AddG2MgrResponseRow("", "G2 is not running on specified port.", 1);
            }
            else
            {
                response.G2MgrResponse.AddG2MgrResponseRow(p.companyId.ToString(), "", 0);
            }

            return(response.GetXml());
        }
        private void p_Exited(object sender, EventArgs e)
        {
            Hashtable sessionList = (Hashtable)Application["m_sessionList"];
            G2Process p           = (G2Process)sender;
            int       portNo      = p.portNo;

            if (sessionList.Contains(portNo))
            {
                sessionList.Remove(portNo);
                Application["m_sessionList"] = sessionList;
            }
        }
        public string StopAll(string strUserName, string strPassword)
        {
            Hashtable  sessionList = (Hashtable)Application["m_sessionList"];
            DSResponse response    = new DSResponse();

            //Retrieve application constants
            string strConnStr = (string)Context.Cache["CONN_STR"];

            string  strErrMsg = "";
            BSLUser objUser   = GetUser(strUserName, strPassword, ref strErrMsg);

            if (objUser == null)
            {
                response.G2MgrResponse.AddG2MgrResponseRow("", strErrMsg, 1);
                return(response.GetXml());
            }

            if (!objUser.IsGensymAdmin)
            {
                response.G2MgrResponse.AddG2MgrResponseRow("",
                                                           "Method reserved for internal use.", 1);
                return(response.GetXml());
            }

            foreach (object o in sessionList.Keys)
            {
                G2Process p = (G2Process)sessionList[o];
                if ((p != null) && (!p.HasExited))
                {
                    try
                    {
                        p.Kill();
                    }
                    catch (Exception ex) {}
                }
            }

            sessionList.Clear();
            Application["m_sessionList"] = sessionList;

            response.G2MgrResponse.AddG2MgrResponseRow("Stopped all.", "", 0);
            return(response.GetXml());
        }
        public string StopG2(string strUserName, string strPassword, int portNo)
        {
            Hashtable  sessionList = (Hashtable)Application["m_sessionList"];
            DSResponse response    = new DSResponse();

            //Retrieve application constants
            //string strConnStr = (string)Context.Cache["CONN_STR"];

            string  strErrMsg = "";
            BSLUser objUser   = GetUser(strUserName, strPassword, ref strErrMsg);

            if (objUser == null)
            {
                response.G2MgrResponse.AddG2MgrResponseRow("", strErrMsg, 1);
                return(response.GetXml());
            }

            if (!objUser.IsGensymAdmin)
            {
                response.G2MgrResponse.AddG2MgrResponseRow("",
                                                           "Method reserved for internal use.", 1);
                return(response.GetXml());
            }

            G2Process p = (G2Process)sessionList[portNo];

            if (p == null)
            {
                response.G2MgrResponse.AddG2MgrResponseRow("Stopped", "", 0);
                return(response.GetXml());
            }

            /*BSLCompany objCompany = objUser.GetCompany();
             * if (p.companyId != objCompany.TCompanies[0].coId)
             * {
             *      response.G2MgrResponse.AddG2MgrResponseRow("",
             *              "Process wasn't running under user's company Id.", 1);
             *      return response.GetXml();
             * }*/

            if (p.HasExited)
            {
                sessionList.Remove(portNo);
                Application["m_sessionList"] = sessionList;
                response.G2MgrResponse.AddG2MgrResponseRow("Stopped", "", 0);
                return(response.GetXml());
            }

            try
            {
                p.Kill();
                sessionList.Remove(portNo);
                Application["m_sessionList"] = sessionList;
                response.G2MgrResponse.AddG2MgrResponseRow("Stopped", "", 0);
            }
            catch (Exception ex)
            {
                response.G2MgrResponse.AddG2MgrResponseRow("", ex.Message, 1);
                LogMsg("StopG2 " + ex.Message);
            }

            return(response.GetXml());
        }
        private bool ShellG2(int portNo, BSLCompany objCompany, ref string strErrMsg)
        {
            LogMsg("ShellG2: ShellG2 called.");
            Hashtable sessionList = (Hashtable)Application["m_sessionList"];

            //Retrieve application constants
            string strG2Path     = (string)Context.Cache["G2_PATH"];
            string strOKPath     = (string)Context.Cache["OK_PATH"];
            string strLogPath    = (string)Context.Cache["LOG_PATH"];
            string strG2DataPath = (string)Context.Cache["G2_DATA_PATH"];
            string strG2KB       = (string)Context.Cache["G2_KB"];

            //string strConnStr = (string)Context.Cache["CONN_STR"];

            LogMsg("ShellG2: Retrieved application constants.");

            //Retrieve company-specific data from database.
            string strOKFileName  = objCompany.TCompanies[0].okFileName;
            string strLogFileName = objCompany.TCompanies[0].logFileName;
            string strDataDirName = objCompany.TCompanies[0].rootDirName;

            string strRootDir = strG2DataPath + (!strG2DataPath.EndsWith("\\") ? "\\" : "") +
                                strDataDirName;

            LogMsg("ShellG2: Read company-specific data.");

            //Build G2 command line arguments
            string strArgs = "-tcpport " + portNo + " -tcpipexact";

            //strArgs += " -ok \"" + strOKPath + (!strOKPath.EndsWith("\\") ? "\\" : "") + strOKFileName + "\"";
            strArgs += " -log \"" + strLogPath + (!strLogPath.EndsWith("\\") ? "\\" : "") + strLogFileName + "\"";
            strArgs += " -root-dir \"" + strRootDir + "\"";
            strArgs += " -kb \"" + strG2KB + "\"";
            strArgs += " -nowindow";

            try
            {
                ProcessStartInfo si = new ProcessStartInfo();
                si.FileName         = "\"" + strG2Path + (!strG2Path.EndsWith("\\") ? "\\" : "") + "g2.exe\"";         // "g2.exe\""; // "start-g2.bat\""
                si.WorkingDirectory = strG2Path;
                si.Arguments        = strArgs;

                LogMsg("ShellG2: Process command line: " + si.FileName);

                LogMsg("ShellG2: Process command line args: " + strArgs);

                LogMsg("ShellG2: Process Working Dir: " + si.WorkingDirectory);

                si.WindowStyle     = ProcessWindowStyle.Normal;
                si.UseShellExecute = false;
                si.EnvironmentVariables.Add("G2_OK", strOKPath + (!strOKPath.EndsWith("\\") ? "\\" : "") + strOKFileName);

                /*
                 * si.EnvironmentVariables.Add("G2_MODULE_SEARCH_PATH",
                 *      " '%SITE_%' '%G2IHOME_%\sites\Optegrity\kbs'
                 * '%G2IHOME_%\sites\e-SCOR\kbs' '%G2IHOME_%\sites\ReThink\kbs'
                 * '%G2IHOME_%\sites\DevSite\kbs' '%G2IHOME_%\kbs' '%G2HOME_%\g2\kbs\utils'
                 * '%G2HOME_%\activexlink' '%G2HOME_%\odbc' '%G2HOME_%\pi'
                 * '%G2HOME_%\opclink\kbs' '%G2HOME_%\protools\kbs' '%G2HOME_%\gw'
                 * '%G2HOME_%\corbalink\kbs' '%G2HOME_%\javalink\kbs' '%G2HOME_%\tw2\kbs' "
                 * set G2_MODULE_SEARCH_PATH=" '%G2IHOME_%\sites\Optegrity\kbs'
                 * '%G2IHOME_%\sites\e-SCOR\kbs' '%G2IHOME_%\sites\ReThink\kbs'
                 * '%G2IHOME_%\sites\DevSite\kbs' '%G2IHOME_%\kbs' 'C:\bt\kbs'
                 * '%G2HOME_%\activexlink\kbs' '%G2HOME_%\odbc\kbs' '%G2HOME_%\pi'
                 * '%G2HOME_%\opclink\kbs' '%G2HOME_%\jmail\kbs' '%G2HOME_%\jms\kbs'
                 * '%G2HOME_%\protools\kbs' '%G2HOME_%\gw' '%G2HOME_%\corbalink\kbs'
                 * '%G2HOME_%\javalink\kbs' '%G2HOME_%\tw2\kbs' '%G2HOME_%\g2\kbs\utils'
                 * '%G2HOME_%\g2\kbs\demos' " />
                 */

                G2Process p = new G2Process(objCompany.TCompanies[0].coId, portNo);
                p.StartInfo           = si;
                p.Exited             += new EventHandler(p_Exited);
                p.EnableRaisingEvents = true;
                //p.SynchronizingObject = this.Contain;

                LogMsg("ShellG2: Calling Start.");
                if (!p.Start())
                {
                    LogMsg("ShellG2: Process failed to start.");
                    strErrMsg = "Process failed to start.";
                    return(false);
                }

                LogMsg("ShellG2: Calling WaitForInputIdle.");
                p.WaitForInputIdle(20000);
                LogMsg("ShellG2: Adding process to list.");
                sessionList.Add(portNo, p);
                LogMsg("ShellG2: Saving list.");
                Application["m_sessionList"] = sessionList;
                LogMsg("ShellG2: Returning 'true'.");
                return(true);
            }
            catch (Exception ex)
            {
                strErrMsg = ex.Message;
                LogMsg("ShellG2: " + ex.Message);
                return(false);
            }
        }