示例#1
0
        static bool CanReuseProcess(
            this IBrowserProcess process,
            Interface.BrowserProcessConfig browserProcessConfig = null)
        {
            try
            {
                if (null == process)
                {
                    return(false);
                }

                if (null != browserProcessConfig)
                {
                    if (process?.Config?.ConfigMatchForReuse(browserProcessConfig) ?? false)
                    {
                        return(false);
                    }
                }

                {
                    var Connection = process?.ReuseConnection()?.Result;

                    if (null != Connection)
                    {
                        return(true);
                    }
                }

                var SetBrowserId = process?.GetBrowsersIds();

                if (SetBrowserId.Failed())
                {
                    return(false);
                }

                foreach (var BrowserId in (SetBrowserId?.Result).EmptyIfNull())
                {
                    if (!(BrowserId?.ConnectionOffered ?? false))
                    {
                        continue;
                    }

                    using (var Connection = process?.OpenConnection(BrowserId)?.Result)
                    {
                        if (Connection?.IsOpen ?? false)
                        {
                            return(true);
                        }
                    }
                }
            }
            catch { }

            return(false);
        }
示例#2
0
        static public IResultOrError <IBrowserProcess> ReuseOrCreateProcess(
            this IApp app,
            Interface.BrowserProcessConfig browserProcessConfig = null)
        {
            var Process = app?.ReuseProcess(browserProcessConfig);

            if (!(Process?.Result).CanReuseProcess(browserProcessConfig))
            {
                Process?.Result?.Kill();

                Process = app?.CreateProcess(browserProcessConfig);
            }

            return(Process);
        }
示例#3
0
        static public Interface.BrowserProcessConfig BrowserProcessConfigDefaultCreate(
            Interface.BrowserProcessConfig @default,
            string userDataDir)
        {
            @default = @default ?? new Interface.BrowserProcessConfig();

            @default.UserDataDir   = userDataDir;
            @default.ChromeExePath = @default.ChromeExePath ?? WindowsGoogleChromeStatic.ChromeExePathFromSystem;

            if ([email protected] && [email protected])
            {
                @default.AddressTcpRangeBoundA = ExeConfig.RemoteControlAddressTcpDefaultBoundA;
            }

            return(@default);
        }