aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Modules/Tango.PPC.Synchronization/packages.config
blob: 4cf1b485983ddd8ac14851918f233581f770ad8b (plain)
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.2.0" targetFramework="net461" />
  <package id="Expression.Blend.Sdk" version="1.0.2" targetFramework="net46" />
  <package id="FontAwesome.WPF" version="4.7.0.9" targetFramework="net46" />
  <package id="Google.Protobuf" version="3.4.1" targetFramework="net46" />
</packages>
0; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using Tango.PPC.Browser.Attributes;
using CefSharp;
using CefSharp.Wpf;
using Tango.Core.Helpers;
using System.Windows.Threading;

namespace Tango.PPC.Browser.Helpers
{
    public static class BoundObjectsHelper
    {
        private static DispatcherTimer _timer;
        private static Dispatcher _dispatcher;
        private static ChromiumWebBrowser _browser;

        private static List<String> _scripts = new List<string>();

        public static void RegisterAllBoundObjects(ChromiumWebBrowser browser, Dispatcher dispatcher)
        {
            _dispatcher = dispatcher;
            _browser = browser;

            _timer = new DispatcherTimer(DispatcherPriority.Background, dispatcher);
            _timer.Tick += _timer_Tick;
            _timer.Interval = TimeSpan.FromSeconds(2);
            _timer.Stop();

            foreach (var type in typeof(BoundObjectsHelper).Assembly.GetTypes().Where(x => x.GetCustomAttribute<BoundObjectAttribute>() != null))
            {
                var att = type.GetCustomAttribute<BoundObjectAttribute>();

                var script = EmbeddedResourceHelper.GetEmbeddedResourceText($"Tango.PPC.Browser.Scripts.{att.ScriptFile}");
                _scripts.Add(script);

                browser.JavascriptObjectRepository.Register(att.Name, Activator.CreateInstance(type), true);

                browser.FrameLoadEnd += Browser_FrameLoadEnd;
            }
        }

        private static void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
        {
            _timer.Stop();
            _timer.Start();
        }

        private static void _timer_Tick(object sender, EventArgs e)
        {
            try
            {
                _timer.Stop();

                _dispatcher.BeginInvoke(new Action(() =>
                {
                    foreach (var script in _scripts)
                    {
                        _browser.GetMainFrame().ExecuteJavaScriptAsync(script);
                    }
                }));
            }
            catch
            {
                _timer.Start();
            }
        }
    }
}