public BrowserProcessConfig CombinedConfig(BrowserProcessConfig fromScriptConfig)
        {
            var ConfigDefault = CallbackGetBrowserProcessConfigDefault?.Invoke();

            fromScriptConfig = fromScriptConfig ?? ConfigDefault ?? new BrowserProcessConfig();

            fromScriptConfig.ChromeExePath         = IfEmptyReplaceWith(fromScriptConfig.ChromeExePath, ConfigDefault?.ChromeExePath);
            fromScriptConfig.UserDataDir           = IfEmptyReplaceWith(fromScriptConfig.UserDataDir, ConfigDefault?.UserDataDir);
            fromScriptConfig.AddressTcpRangeBoundA = fromScriptConfig.AddressTcpRangeBoundA ?? ConfigDefault?.AddressTcpRangeBoundA;
            fromScriptConfig.AddressTcpRangeBoundB = fromScriptConfig.AddressTcpRangeBoundB ?? ConfigDefault?.AddressTcpRangeBoundB;

            return(fromScriptConfig);
        }
        public IResultOrError <IBrowserProcess> GetProcessForScript(
            BrowserProcessConfig fromScriptConfig,
            Func <BrowserProcessConfig, IResultOrError <IBrowserProcess> > callbackProcessFromConfig)
        {
            var Config = CombinedConfig(fromScriptConfig);

            if (!(0 < Config?.ChromeExePath?.Length))
            {
                throw new ArgumentException("no path to chrome.exe supplied.", "ChromeExePath");
            }

            var Process = callbackProcessFromConfig(Config);

            var BeginTime = Bib3.Glob.StopwatchZaitMiliSictInt();

            if (Process.Failed())
            {
                return(Process);
            }

            for (;;)
            {
                System.Threading.Thread.Sleep(111);

                var Duration = Bib3.Glob.StopwatchZaitMiliSictInt() - BeginTime;

                if (GetProcessForScriptDelayMax < Duration)
                {
                    break;
                }

                try
                {
                    var BrowsersIds = Process?.Result?.GetBrowsersIds();

                    if (!(BrowsersIds?.Result).IsNullOrEmpty())
                    {
                        break;                          //	connection to process is already possible.
                    }
                }
                catch
                {
                }
            }

            return(Process);
        }
Пример #3
0
        public BrowserProcessCreation(
            IApp browserServiceInterface,
            BrowserProcessConfig browserProcessConfig,
            string url = null)
        {
            try
            {
                if (null == browserServiceInterface)
                {
                    throw new NullReferenceException("Browser service interface not available.");
                }

                BrowserProcessOrError =
                    browserServiceInterface.ReuseOrCreateProcess(browserProcessConfig);

                Thread.Sleep(1444);

                BrowserProcessErrorMessage = BrowserProcessOrError?.Error?.Message;

                BrowserProcess = BrowserProcessOrError?.Result;

                BrowserConnectionOrError = BrowserProcess?.ReuseOrOpenConnection();

                BrowserConnectionErrorMessage = BrowserConnectionOrError?.Error?.Message;

                BrowserConnection = BrowserConnectionOrError?.Result;

                if (null != BrowserConnection && 0 < url?.Length)
                {
                    Thread.Sleep(444);
                    BrowserConnection.Document.Result.locationHref = url;
                }

                BrowserAddressTcp = BrowserConnection?.BrowserAddressTcp;
            }
            catch (Exception Exception)
            {
                this.Exception = Exception;
            }
        }
 public IResultOrError <IBrowserProcess> CreateProcess(BrowserProcessConfig fromScriptConfig) =>
 GetProcessForScript(fromScriptConfig, Base.CreateProcess);