コード例 #1
0
        private static async void Screenshot(string filename)
        {
            // Create the offscreen Chromium browser.
            using (var browser = new CefSharp.OffScreen.ChromiumWebBrowser())
            {
                browser.LoadHtml("<html><head></head><body></body></html>", "http://rendering/");
                browser.LoadHtml(Monster.ValloricStatBlock(), "http://rendering/");

                saveFilename = filename;

                await Task.Delay(500);

                int width  = 0;
                int height = 0;

                while (width == 0)
                {
                    width = BrowserInfo.BrowserWidth(browser);
                    System.Threading.Thread.Sleep(100);
                }

                while (height == 0)
                {
                    height = BrowserInfo.BrowserHeight(browser);
                    System.Threading.Thread.Sleep(100);
                }

                browser.Size = new Size(width, height);

                await Task.Delay(500);

                await browser.ScreenshotAsync().ContinueWith(DisplayBitmap);
            }
        }
コード例 #2
0
        public UserControlWebPage()
        {
            InitializeComponent();

            var assembly = Assembly.GetExecutingAssembly();
            var resourceName = "WebPaparazzi.resize_image.js";

            using (Stream stream = assembly.GetManifestResourceStream(resourceName))
            using (StreamReader reader = new StreamReader(stream))
            {
                _resize_script = reader.ReadToEnd();
            }

            _browser = new ChromiumWebBrowser("")
            {
                Dock = DockStyle.Fill
            };
            _offScreenBrowser = new CefSharp.OffScreen.ChromiumWebBrowser("");
            _offScreenBrowser.Size = PaparazziResolutionConverter.DefaultSize;
            _offScreenBrowser.FrameLoadEnd += offScreenBrowser_FrameLoadEnd;

            this.panelBrowser.Controls.Add(_browser);
            _browser.AddressChanged += OnBrowserAddressChanged;
            _browser.FrameLoadEnd += browser_FrameLoadEnd;
            _browser.IsBrowserInitializedChanged += browser_IsBrowserInitializedChanged;
        }
コード例 #3
0
ファイル: OffscreenWebView.cs プロジェクト: xeddmc/Playnite
 public OffscreenWebView()
 {
     browser = new CefSharp.OffScreen.ChromiumWebBrowser(automaticallyCreateBrowser: false);
     browser.LoadingStateChanged += Browser_LoadingStateChanged;
     browser.BrowserInitialized  += Browser_BrowserInitialized;
     browser.CreateBrowser();
     browserInitializedEvent.WaitOne(5000);
 }
コード例 #4
0
        public ChromiumBrowser()
        {
            browser         = new CefSharp.OffScreen.ChromiumWebBrowser();
            initializeEvent = new ManualResetEventSlim(false);

            browser.BrowserInitialized += Browser_BrowserInitialized;
            initializeEvent.Wait();
        }
コード例 #5
0
ファイル: OffscreenWebView.cs プロジェクト: xeddmc/Playnite
        public OffscreenWebView(WebViewSettings settings)
        {
            browser = new CefSharp.OffScreen.ChromiumWebBrowser(automaticallyCreateBrowser: false);
            browser.LoadingStateChanged += Browser_LoadingStateChanged;
            browser.BrowserInitialized  += Browser_BrowserInitialized;
            var brwSet = new BrowserSettings
            {
                Javascript       = settings.JavaScriptEnabled ? CefState.Enabled : CefState.Disabled,
                ApplicationCache = settings.CacheEnabled ? CefState.Enabled : CefState.Disabled
            };

            browser.CreateBrowser(null, brwSet);
            browserInitializedEvent.WaitOne(5000);
        }
コード例 #6
0
        public static void ActionAt(string urlz, string js)
        {
            using (BrowserSettings offscreen_setting = new BrowserSettings())
            {
                offscreen_setting.DefaultEncoding     = "UTF-8";
                offscreen_setting.WindowlessFrameRate = 5;
                using (CefSharp.OffScreen.ChromiumWebBrowser tempBrowser = new CefSharp.OffScreen.ChromiumWebBrowser(urlz, offscreen_setting))
                {
                    tempBrowser.RequestHandler  = new UA_RequestHandler();
                    tempBrowser.LifeSpanHandler = new CustomLifeSpanHandler();
                    tempBrowser.Size            = new Size(10, 10);
                    tempBrowser.FrameLoadEnd   += new EventHandler <FrameLoadEndEventArgs>((Object sender, FrameLoadEndEventArgs e) =>
                    {
                        if (!e.Frame.IsValid)
                        {
                            return;
                        }

                        if (e.Url == Urls.olympicangel["event_end"])
                        {
                            Safe.Invoke(() =>
                            {
                                tempBrowser.Dispose();
                            });
                            GC.Collect();
                            return;
                        }

                        if (e.Frame.IsMain)
                        {
                            if (!js.Contains(" ") && css_js.js.ContainsKey(js))
                            {
                                js = css_js.js[js];
                            }

                            if (tempBrowser.CanExecuteJavascriptInMainFrame)
                            {
                                tempBrowser.ExecuteScriptAsyncWhenPageLoaded(js);
                            }
                        }
                    });
                }
            }
        }
コード例 #7
0
        private void Initialize(BrowserSettings settings = null)
        {
            browser = new CefSharp.OffScreen.ChromiumWebBrowser(automaticallyCreateBrowser: false);
            browser.LoadingStateChanged += Browser_LoadingStateChanged;
            browser.BrowserInitialized  += Browser_BrowserInitialized;
            if (settings != null)
            {
                browser.CreateBrowser(null, settings);
            }
            else
            {
                browser.CreateBrowser();
            }

            if (!browserInitializedEvent.WaitOne(30000))
            {
                logger.Error("Failed to initialize OffscreenWebView in timely manner.");
            }
        }
コード例 #8
0
ファイル: WebApiClient.cs プロジェクト: tjhrulz/Playnite
 public WebApiClient()
 {
     browser = new CefSharp.OffScreen.ChromiumWebBrowser(automaticallyCreateBrowser: false);
     browser.BrowserInitialized += Browser_BrowserInitialized;
     browser.CreateBrowser(IntPtr.Zero);
 }
コード例 #9
0
        private static async void Screenshot(string filename)
        {
            // Create the offscreen Chromium browser.
            using (var browser = new CefSharp.OffScreen.ChromiumWebBrowser())
            {
                browser.LoadHtml("<html><head></head><body></body></html>", "http://rendering/");
                browser.LoadHtml(Monster.ValloricStatBlock(), "http://rendering/");

                saveFilename = filename;
                
                await Task.Delay(500);

                int width = 0;
                int height = 0;

                while (width == 0)
                {
                    width = BrowserInfo.BrowserWidth(browser);
                    System.Threading.Thread.Sleep(100);
                }

                while (height == 0)
                {
                    height = BrowserInfo.BrowserHeight(browser);
                    System.Threading.Thread.Sleep(100);
                }

                browser.Size = new Size(width, height);
                
                await Task.Delay(500);
                await browser.ScreenshotAsync().ContinueWith(DisplayBitmap);
            }
        }
コード例 #10
0
        /// <summary>
        /// 控制台模式程序入口。
        /// </summary>
        private void ConsoleMain(string[] args)
        {
            string             outputMatchCollectionPath = null, outputLogPath = null, lastOption = "";
            Action <string>    next = null;
            List <string>      requiredArguments = new List <string>();
            MatchConfiguration conf;

            Match[] matches         = null;

            Logger = new ConsoleLogger();

            try
            {
                // 解析参数
                foreach (var arg in args.Skip(1))
                {
                    switch (arg)
                    {
                    case "-h":
                        Console.WriteLine(StringResources.TITLE + " " + Assembly.GetEntryAssembly().GetName().Version);
                        Console.WriteLine(String.Format(StringResources.CONSOLE_HELP, args[0]));
                        return;

                    case "-o":
                        if (next != null)
                        {
                            throw new FormatException(
                                      String.Format(StringResources.CONSOLE_MISSING_ARGUMENT, lastOption));
                        }
                        next = file =>
                        {
                            if (File.Exists(file))
                            {
                                try
                                {
                                    using (var s = File.Open(file, FileMode.Open))
                                    {
                                        var f = new BinaryFormatter();
                                        matches = f.Deserialize(s) as Match[];
                                    }
                                }
                                catch (Exception e)
                                {
                                    throw new FormatException(
                                              StringResources.BAD_MATCH_COLLECTION_FORMAT + ": " + e.Message);
                                }
                            }
                            outputMatchCollectionPath = file;
                        };
                        break;

                    case "-l":
                        if (next != null)
                        {
                            throw new FormatException(
                                      String.Format(StringResources.CONSOLE_MISSING_ARGUMENT, lastOption));
                        }
                        next = file => outputLogPath = file;
                        break;

                    case "-u":
                        if (next != null)
                        {
                            throw new FormatException(
                                      String.Format(StringResources.CONSOLE_MISSING_ARGUMENT, lastOption));
                        }
                        next = url => BotzoneProtocol.Credentials.BotzoneCopiedURL = url;
                        break;

                    case "--simple-io":
                        LocalProgramRunner.IsSimpleIO = true;
                        break;

                    default:
                        if (next != null)
                        {
                            next(arg);
                            next = null;
                        }
                        else
                        {
                            requiredArguments.Add(arg);
                        }
                        break;
                    }
                    lastOption = arg;
                }
                if (next != null)
                {
                    throw new FormatException(
                              String.Format(StringResources.CONSOLE_MISSING_ARGUMENT, lastOption));
                }
                if (requiredArguments.Count < 2)
                {
                    throw new FormatException(StringResources.CONSOLE_BAD_FORMAT);
                }

                // 生成对局配置
                conf = new MatchConfiguration
                {
                    Game = new Game
                    {
                        Name        = requiredArguments[0],
                        PlayerCount = requiredArguments.Count - 1
                    }
                };
                for (int i = 0; i < conf.Count; i++)
                {
                    string arg = requiredArguments[i + 1];
                    if (File.Exists(arg))
                    {
                        conf[i].Type = PlayerType.LocalAI;
                    }
                    else if (arg.Length == 24 && arg.All(c => c >= '0' && c <= '9' || c >= 'a' && c <= 'f'))
                    {
                        conf[i].Type = PlayerType.BotzoneBot;
                    }
                    else
                    {
                        throw new FormatException(
                                  String.Format(StringResources.CONSOLE_BAD_ID, arg));
                    }
                    conf[i].ID = arg;
                }
                if (!conf.IsValid)
                {
                    throw new FormatException(conf.ValidationString);
                }
            }
            catch (FormatException e)
            {
                Logger.Log(LogLevel.Error, e.Message);
                Console.WriteLine(String.Format(StringResources.CONSOLE_HELP, args[0]));
                return;
            }

            if (conf.IsLocalMatch)
            {
                Logger.Log(LogLevel.Info, StringResources.CONSOLE_LOCALMATCH);
                Cef.Initialize(new CefSettings
                {
                    Locale = CultureInfo.CurrentCulture.Name
                });
                var tcs = new TaskCompletionSource <object>();
                var b   = new CefSharp.OffScreen.ChromiumWebBrowser();
                BotzoneProtocol.CurrentBrowser = b;
                b.BrowserInitialized          += delegate
                {
                    tcs.SetResult(null);
                };
                tcs.Task.Wait();
            }
            else
            {
                Logger.Log(LogLevel.Info, StringResources.CONSOLE_BOTZONEMATCH);
                if (!BotzoneProtocol.Credentials.IsValid)
                {
                    Logger.Log(LogLevel.Error, StringResources.CONSOLE_BAD_LOCALAI_URL);
                    Console.WriteLine(String.Format(StringResources.CONSOLE_HELP, args[0]));
                    return;
                }
            }

            try
            {
                // 创建并开始对局
                var matchTask = conf.CreateMatch();
                matchTask.Wait();
                var match = matchTask.Result;
                Console.CancelKeyPress += delegate
                {
                    match.AbortMatch().Wait();
                };
                match.RunMatch().Wait();

                string logJson = JsonConvert.SerializeObject(match.Logs);
                if (outputLogPath != null)
                {
                    using (var sw = new StreamWriter(outputLogPath))
                    {
                        sw.WriteLine(logJson);
                    }
                }

                if (outputMatchCollectionPath != null)
                {
                    using (var s = File.Open(outputMatchCollectionPath, FileMode.Create))
                    {
                        var tempMatches = new Match[matches?.Length ?? 0];
                        matches?.CopyTo(tempMatches, 0);
                        tempMatches[tempMatches.Length - 1] = match;
                        var f = new BinaryFormatter();
                        f.Serialize(s, tempMatches);
                    }
                }

                Console.WriteLine(logJson);
                Console.WriteLine(
                    (match.Status == MatchStatus.Finished ? "finished " : "aborted ") +
                    String.Join(" ", match.Scores));
            }
            catch (Exception e)
            {
                Logger.Log(LogLevel.Error, e.Message);
                Console.WriteLine("error");
            }
            finally
            {
                Cef.Shutdown();
            }
        }
コード例 #11
0
        // The task that creates the PNG.
        private static async void Screenshot(string filename)
        {
            // Create the offscreen Chromium browser.
            using (var browser = new CefSharp.OffScreen.ChromiumWebBrowser())
            {                
                browser.LoadHtml("<html><head></head><body></body></html>", "http://rendering/");

                switch (Help.TemplateName)
                {
                    case "Valloric's Statblock":
                        browser.LoadHtml(Monster.ValloricStatBlock(), "http://rendering/");
                        break;
                    case "AshenGT's Statblock":
                        browser.LoadHtml(Monster.AshenGTStatBlock(), "http://rendering/");
                        break;
                    case "Custom Statblock":
                        browser.LoadHtml(Monster.CustomStatBlock(), "http://rendering/");
                        break;
                    case "Future":
                        browser.LoadHtml(Monster.FutureStatBlock(), "http://rendering/");
                        break;
                }

                saveFilename = filename;                                
                await Help.Delay(500);
                
                int width = (Monster.width + (Monster.width * Monster.columns)) + 40;
                int height = 0;                
                
                while (height == 0)
                {
                    height = BrowserInfo.BrowserHeight(browser);
                    System.Threading.Thread.Sleep(100);
                }

                browser.Size = new Size(width, height);

                await Help.Delay(500);
                await browser.ScreenshotAsync().ContinueWith(DisplayBitmap);
            }
        }