public Task Test_HTMLBinding_Stress_Collection_CreateBinding(JavascriptBindingMode imode, TestPerformanceKind context, TestContext ipath = TestContext.Index) 
        {
            int r = 100;
            var datacontext = new TwoList();
            datacontext.L1.AddRange(Enumerable.Range(0, r).Select(i => new Skill()));

            var stopWatch = new Stopwatch();
            stopWatch.Start();

            var test = new TestInContext() 
            {
                Path = ipath,
                Bind = (win) => HTML_Binding.Bind(win, datacontext, imode),
                Test = (mb) => 
                {
                    stopWatch.Stop();
                    var ts = stopWatch.ElapsedMilliseconds;
                    _Logger.Info($"Perf: {((double) (ts)) / 1000} sec for {r} iterations");

                    var js = mb.JSRootObject;

                    var col = GetSafe(() => GetCollectionAttribute(js, "L1"));
                    col.GetArrayLength().Should().Be(r);

                    CheckVsExpectation(ts, context);
                }
            };
            return RunAsync(test);
        }
Example #2
0
        private Task Test_HTMLBinding_Stress_Collection_CreateBinding(JavascriptBindingMode imode, TestPerformanceKind context, TestContext ipath = TestContext.Index)
        {
            var r           = 100;
            var datacontext = new TwoList();

            datacontext.L1.AddRange(Enumerable.Range(0, r).Select(i => new Skill()));

            var stopWatch = new Stopwatch();

            stopWatch.Start();

            var test = new TestInContext()
            {
                Path = ipath,
                Bind = (win) => HtmlBinding.Bind(win, datacontext, imode),
                Test = (mb) =>
                {
                    stopWatch.Stop();
                    var ts = stopWatch.ElapsedMilliseconds;
                    _Logger.Info($"Perf: {((double)(ts)) / 1000} sec for {r} iterations");

                    var js = mb.JsRootObject;

                    var col = GetSafe(() => GetCollectionAttribute(js, "L1"));
                    col.GetArrayLength().Should().Be(r);

                    CheckVsExpectation(ts, context);
                }
            };

            return(RunAsync(test));
        }
 private void FillAllKeys()
 {
     AllKeys = new TwoList <string, string>();
     AllKeys.Add("F1", "F1");
     AllKeys.Add("F2", "F2");
     AllKeys.Add("F3", "F3");
     AllKeys.Add("F4", "F4");
     AllKeys.Add("F5", "F5");
     AllKeys.Add("F6", "F6");
     AllKeys.Add("F7", "F7");
     AllKeys.Add("F8", "F8");
     AllKeys.Add("Tab", "Tab");
     AllKeys.Add("D1", "1");
     AllKeys.Add("D2", "2");
     AllKeys.Add("D3", "3");
     AllKeys.Add("D4", "4");
     AllKeys.Add("D5", "5");
     AllKeys.Add("D6", "6");
     AllKeys.Add("D7", "7");
     AllKeys.Add("D8", "8");
     AllKeys.Add("D9", "9");
     AllKeys.Add("NumPad5", "Pet Atk");
     AllKeys.Add("NumPad6", "Pet Skill 1");
     AllKeys.Add("NumPad7", "Pet Skill 2");
     AllKeys.Add("NumPad8", "Pet Skill 3");
     AllKeys.Add("NumPad9", "Pet Skill 4");
 }
Example #4
0
        /// <summary>
        /// Bufea
        /// </summary>
        /// <param name="cancelOnFocus">Indica si se debe cancelar el proceso cuando el pj es focuseado</param>
        /// <param name="keys">listado de Keys-CastTime para los buffs</param>
        public bool DoBuff(bool cancelOnFocus, TwoList <Keys, int> keys)
        {
            foreach (var key in keys)
            {
                // disparo el skill
                this.Client.Manager.KeyPress(key.V1);

                // espero a que termine de bufear
                var start = DateTime.Now;
                do
                {
                    Thread.Sleep(300);
                    if (cancelOnFocus)
                    {
                        var target = this.Client.Mem.Link.NPC.GetById(this.Client.Mem.Link.PJInfo.Data.TargetId);
                        if (target?.IsMob ?? false)
                        {
                            return(false);
                        }
                    }
                } while (start.AddMilliseconds(key.V2) > DateTime.Now);
            }

            return(true);
        }
 private void FillPartys()
 {
     Partys = new TwoList <string, string>();
     Partys.Add("NumPad0", "Party 1");
     Partys.Add("NumPad1", "Party 2");
     Partys.Add("NumPad2", "Party 3");
     Partys.Add("NumPad3", "Party 4");
     Partys.Add("NumPad4", "Party 5");
 }
        public async Task Stress_Collection_Update_From_Javascript()
        {
            int r           = 100;
            var datacontext = new TwoList();

            datacontext.L1.AddRange(Enumerable.Range(0, r).Select(i => new Skill()));

            var test = new TestInContextAsync()
            {
                Path = TestContext.Simple,
                Bind = (win) => HTML_Binding.Bind(win, datacontext, JavascriptBindingMode.TwoWay),
                Test = async(mb) =>
                {
                    var js = mb.JSRootObject;

                    var col1 = GetCollectionAttribute(js, "L1");
                    col1.GetArrayLength().Should().Be(r);

                    var col2 = GetCollectionAttribute(js, "L2");
                    col2.GetArrayLength().Should().Be(0);

                    var l2c = GetAttribute(js, "L2");
                    l2c.Should().NotBeNull();

                    var javascript        = "window.app = function(value,coll){var args = []; args.push(0); args.push(0); for (var i = 0; i < value.length; i++) { args.push(value[i]);} coll.splice.apply(coll, args);  console.log(value.length); console.log(coll.length);};";
                    IJavascriptObject res = null;
                    bool ok = _WebView.Eval(javascript, out res);
                    ok.Should().BeTrue();

                    bool notok     = true;
                    var  stopWatch = new Stopwatch();
                    stopWatch.Start();

                    DoSafe(() => Call(_WebView.GetGlobal(), "app", col1, l2c));
                    while (notok)
                    {
                        await Task.Delay(100);

                        notok = datacontext.L2.Count != r;
                    }
                    stopWatch.Stop();
                    long ts = stopWatch.ElapsedMilliseconds;

                    _Logger.Info($"Perf: {((double) (ts)) / 1000} sec for {r} iterations");
                    CheckVsExpectation(ts, TestPerformanceKind.TwoWay_Collection_Update_From_Javascript);
                }
            };

            await RunAsync(test);
        }
 private void FillTimes()
 {
     Times = new TwoList <int, string>();
     Times.Add(0, "off");
     Times.Add(120, "faster");
     Times.Add(500, "0.5s");
     for (var i = 1; i <= 59; i++)
     {
         Times.Add(i * 1000, $"{i}s");                              // segs
     }
     for (var i = 1; i <= 59; i++)
     {
         Times.Add(i * 60000, $"{i}m");                             // mins
     }
 }
        public async Task Stress_Collection_Update_From_Javascript() 
        {
            int r = 100;
            var datacontext = new TwoList();
            datacontext.L1.AddRange(Enumerable.Range(0, r).Select(i => new Skill()));

            var test = new TestInContextAsync() 
            {
                Path = TestContext.Simple,
                Bind = (win) => HTML_Binding.Bind(win, datacontext, JavascriptBindingMode.TwoWay),
                Test = async (mb) => 
                {
                    var js = mb.JSRootObject;

                    var col1 = GetCollectionAttribute(js, "L1");
                    col1.GetArrayLength().Should().Be(r);

                    var col2 = GetCollectionAttribute(js, "L2");
                    col2.GetArrayLength().Should().Be(0);

                    var l2c = GetAttribute(js, "L2");
                    l2c.Should().NotBeNull();

                    var javascript = "window.app = function(value,coll){var args = []; args.push(0); args.push(0); for (var i = 0; i < value.length; i++) { args.push(value[i]);} coll.splice.apply(coll, args);  console.log(value.length); console.log(coll.length);};";
                    IJavascriptObject res = null;
                    bool ok = _WebView.Eval(javascript, out res);
                    ok.Should().BeTrue();

                    bool notok = true;
                    var stopWatch = new Stopwatch();
                    stopWatch.Start();

                    DoSafe(() => Call(_WebView.GetGlobal(), "app", col1, l2c));
                    while (notok) 
                    {
                        await Task.Delay(100);
                        notok = datacontext.L2.Count != r;
                    }
                    stopWatch.Stop();
                    long ts = stopWatch.ElapsedMilliseconds;

                    _Logger.Info($"Perf: {((double) (ts)) / 1000} sec for {r} iterations");
                    CheckVsExpectation(ts, TestPerformanceKind.TwoWay_Collection_Update_From_Javascript);
                }
            };

            await RunAsync(test);
        }
Example #9
0
        private void _DoAutoSpot(object input)
        {
            var config  = ((DAL.CuentaConfig)input).AutoSpot;
            var atkKeys = ((DAL.CuentaConfig)input).AutoKey.Keys;

            uint?target       = 0;
            var  lastBuffTime = DateTime.MinValue;

            while (true)
            {
                //ETAPA 0: BUFF
                if (config.HasBuff && target == 0 && lastBuffTime.AddSeconds(config.BuffExpireTime / 1000) < DateTime.Now)
                {
                    var skills = new TwoList <Keys, int>(config.BuffKey.GetKey(), config.BuffCastTime);
                    if (this.Client.Action.Skills.DoBuff(true, skills))
                    {
                        lastBuffTime = DateTime.Now;
                    }
                }

                // ETAPA 1: BUSCAR TARGET
                while (target == 0)
                {
                    Thread.Sleep(500);

                    if (this.Client.Mem.Base1?.PJInfo == null)
                    {
                        this.OnAutoSpotStatusChange?.Invoke(this, false);
                        return;
                    }

                    if (500000 < (target = this.Client.Mem.Base1?.PJInfo?.Data.TargetId))
                    {
                        break;
                    }

                    // modos de seleción de Target
                    if (config.AssistMob > 0)
                    {
                        // Selección por dbCode
                        var mob = this.Client.Mem.Link.NPC.GetAll().Where(p => p.IsMob && p.Data.dbCode == config.AssistMob).OrderBy(p => p.Data.DistAlPJ).FirstOrDefault();
                        if (mob != null)
                        {
                            this.Client.Mem.Link.PJInfo.SetTarget(mob.Data.Id); // lo marca pero es intargeteable
                        }
                    }
                    else if (!string.IsNullOrEmpty(config.AssistKey) && config.AssistKey != "Tab")
                    {
                        // Seleccion por asistencia (con tecla de assist)
                        var tecla = (int)Keys.NumPad0;
                        for (var partynum = 1; partynum <= 5; partynum++)
                        {
                            this.Client.Manager.KeyPress((Keys)(tecla + partynum - 1));
                            Thread.Sleep(500);

                            if (0 < (target = this.Client.Mem.Base1?.PJInfo?.Data.TargetId))
                            {
                                this.Client.Manager.KeyPress(config.AssistKey.GetKey());
                                Thread.Sleep(1000);
                                target = this.Client.Mem.Base1?.PJInfo?.Data.TargetId;
                            }

                            if (target < 500000) // es un pj
                            {
                                target = 0;
                            }

                            if (target > 0)
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        // Seleccion por TAB
                        lock (this.Client.Mem.Base1.PJInfo)
                            if (0 == (target = this.Client.Mem.Base1?.PJInfo?.Data.TargetId))
                            {
                                this.Client.Manager.KeyPress(Keys.Tab);
                            }
                    }
                }

                // ETAPA 2: ATACAR
                var atkrunning = false;
                while (target > 0)
                {
                    if (!atkrunning)
                    {
                        lock (AutoSpotKeysThreads)
                        {
                            foreach (var key in atkKeys)
                            {
                                AutoSpotKeysThreads.Add(key.Key.GetKey(), new Thread(_DoAutoKey));
                                AutoSpotKeysThreads[key.Key.GetKey()].Start(new { key = key.Key.GetKey(), time = key.Time });
                            }
                        }
                        atkrunning = true;
                    }

                    Thread.Sleep(500);

                    if (this.Client.Mem.Base1?.PJInfo == null)
                    {
                        StopAutoSpotAtk();
                        this.OnAutoSpotStatusChange?.Invoke(this, false);
                        return;
                    }

                    lock (this.Client.Mem.Base1.PJInfo)
                        target = this.Client.Mem.Base1?.PJInfo?.Data.TargetId;
                }
                StopAutoSpotAtk();

                // ETAPA: AUTO-PICK
                var time = DateTime.Now;
                while (config.HasPick && time.AddSeconds(config.PickTime / 1000) > DateTime.Now && target == 0)
                {
                    this.Client.Manager.KeyPress(config.PickKey.GetKey()); //picking
                    Thread.Sleep(100);

                    if (this.Client.Mem.Base1?.PJInfo == null)
                    {
                        this.OnAutoSpotStatusChange?.Invoke(this, false);
                        return;
                    }

                    lock (this.Client.Mem.Base1.PJInfo)
                        target = this.Client.Mem.Base1?.PJInfo?.Data.TargetId;
                }
            }
        }