コード例 #1
0
        public void TestMethod2()
        {
            var a = new[]
            {
                new AddrPort("omsg101", 2815),
                new AddrPort("omsg102", 2828),
                new AddrPort("omsg103", 2841),
                new AddrPort("omsg104", 2854),
                new AddrPort("omsg101", 2816),
                new AddrPort("omsg102", 2829),
                new AddrPort("omsg103", 2842),
                new AddrPort("omsg104", 2855),
                new AddrPort("omsg101", 2817),
                new AddrPort("omsg102", 2830),
                new AddrPort("omsg103", 2843),
                new AddrPort("omsg104", 2856),
                new AddrPort("omsg105", 2867),
                new AddrPort("omsg106", 2880),
                new AddrPort("omsg105", 2868),
                new AddrPort("omsg106", 2881),
                new AddrPort("omsg105", 2869),
                new AddrPort("omsg106", 2882),
            };
            var b = new[]
            {
                new AddrPort("omsg106", 2882),
                new AddrPort("omsg101", 2815),
            };
            var ret1 = ProviderAddrPortResolver.Concat(ProviderAddrPortResolver.CreateEmptyCircle(), a);
            var ret2 = ProviderAddrPortResolver.Concat(ret1.Circle, b);

            Assert.IsTrue(ProviderAddrPortResolver.IsCompleted(ret2.Circle));
        }
コード例 #2
0
        public void TestMethod8()
        {
            var list1 = new List <AddrPort>();

            list1.Add(new AddrPort("msg104", 2838));
            list1.Add(new AddrPort("msg104", 2839));
            list1.Add(new AddrPort("msg104", 2840));
            list1.Add(new AddrPort("msg104", 2841));
            list1.Add(new AddrPort("msg104", 2842));
            list1.Add(new AddrPort("msg104", 2843));

            var list2 = new List <AddrPort>();

            list2.Add(new AddrPort("msg104", 2838));
            list2.Add(new AddrPort("msg104", 2839));


            var list = ProviderAddrPortResolver.OuterJoin(list1, list2).ToList();

            Assert.AreEqual(list[0], new AddrPort("msg104", 2838));
            Assert.AreEqual(list[1], new AddrPort("msg104", 2839));
            Assert.AreEqual(list[2], new AddrPort("msg104", 2840));
            Assert.AreEqual(list[3], new AddrPort("msg104", 2841));
            Assert.AreEqual(list[4], new AddrPort("msg104", 2842));
            Assert.AreEqual(list[5], new AddrPort("msg104", 2843));
        }
コード例 #3
0
        public void TestMethod6()
        {
            var list1 = new List <AddrPort>();

            list1.Add(new AddrPort("msg101", 2805));
            list1.Add(new AddrPort("msg101", 2806));
            list1.Add(new AddrPort("msg101", 2807));
            list1.Add(new AddrPort("msg101", 2808));

            var list2 = new List <AddrPort>();

            list2.Add(new AddrPort("msg101", 2808));
            list2.Add(new AddrPort("msg101", 2809));
            list2.Add(new AddrPort("msg101", 2810));
            list2.Add(new AddrPort("msg101", 2811));


            var list = ProviderAddrPortResolver.OuterJoin(list1, list2).ToList();

            Assert.AreEqual(list[0], new AddrPort("msg101", 2805));
            Assert.AreEqual(list[1], new AddrPort("msg101", 2806));
            Assert.AreEqual(list[2], new AddrPort("msg101", 2807));
            Assert.AreEqual(list[3], new AddrPort("msg101", 2808));
            Assert.AreEqual(list[4], new AddrPort("msg101", 2809));
            Assert.AreEqual(list[5], new AddrPort("msg101", 2810));
            Assert.AreEqual(list[6], new AddrPort("msg101", 2811));
        }
コード例 #4
0
        public void TestMethod3()
        {
            var a = new[]
            {
                new AddrPort("omsg103", 2843),
                new AddrPort("omsg104", 2856),
                new AddrPort("omsg105", 2867),
                new AddrPort("omsg106", 2880),
                new AddrPort("omsg105", 2868),
                new AddrPort("omsg106", 2881),
                new AddrPort("omsg105", 2869),
                new AddrPort("omsg106", 2882),
            };
            var b = new[]
            {
                new AddrPort("omsg106", 2882),
                new AddrPort("omsg101", 2815),
            };
            var c = new[]
            {
                new AddrPort("omsg101", 2815),
                new AddrPort("omsg102", 2828),
                new AddrPort("omsg103", 2841),
                new AddrPort("omsg104", 2854),
            };

            var d = new[]
            {
                new AddrPort("omsg104", 2854),
                new AddrPort("omsg101", 2816),
                new AddrPort("omsg102", 2829),
                new AddrPort("omsg103", 2842),
                new AddrPort("omsg104", 2855),
                new AddrPort("omsg101", 2817),
                new AddrPort("omsg102", 2830),
                new AddrPort("omsg103", 2843),
            };
            var ret0 = ProviderAddrPortResolver.CreateEmptyCircle();
            var ret1 = ProviderAddrPortResolver.Concat(ret0, a);
            var ret2 = ProviderAddrPortResolver.Concat(ret1.Circle, b);
            var ret3 = ProviderAddrPortResolver.Concat(ret2.Circle, c);
            var ret4 = ProviderAddrPortResolver.Concat(ret3.Circle, d);

            Assert.IsTrue(ProviderAddrPortResolver.IsCompleted(ret4.Circle));
            Assert.IsTrue(ret1.NotResolved.Count() == 0);
            Assert.IsTrue(ret2.NotResolved.Count() == 0);
            Assert.IsTrue(ret3.NotResolved.Count() == 0);
            Assert.IsTrue(ret4.NotResolved.Count() == 0);
        }
コード例 #5
0
 public void TestMethod1()
 {
     var resolver = new ProviderAddrPortResolver();
     var t = new AddrPort("omsg101", 2805);
     var k = new AddrPort("omsg102", 2818);
     var g = new AddrPort("omsg103", 2831);
     var ret = ProviderAddrPortResolver.Concat(ProviderAddrPortResolver.CreateEmptyCircle(), new[] { t, k, g });
     var a = new Elem<AddrPort>(t);
     var b = new Elem<AddrPort>(k);
     var c = new Elem<AddrPort>(g);
     var circle = ProviderAddrPortResolver.CreateEmptyCircle();
     circle = ProviderAddrPortResolver.InsertNext(circle, a);
     circle = ProviderAddrPortResolver.InsertNext(circle, b);
     circle = ProviderAddrPortResolver.InsertNext(circle, c);
     Assert.AreEqual(ret.Circle.ToStr(), circle.ToStr());
 }
コード例 #6
0
        public void TestMethod1()
        {
            var resolver = new ProviderAddrPortResolver();
            var t        = new AddrPort("omsg101", 2805);
            var k        = new AddrPort("omsg102", 2818);
            var g        = new AddrPort("omsg103", 2831);
            var ret      = ProviderAddrPortResolver.Concat(ProviderAddrPortResolver.CreateEmptyCircle(), new[] { t, k, g });
            var a        = new Elem <AddrPort>(t);
            var b        = new Elem <AddrPort>(k);
            var c        = new Elem <AddrPort>(g);
            var circle   = ProviderAddrPortResolver.CreateEmptyCircle();

            circle = ProviderAddrPortResolver.InsertNext(circle, a);
            circle = ProviderAddrPortResolver.InsertNext(circle, b);
            circle = ProviderAddrPortResolver.InsertNext(circle, c);
            Assert.AreEqual(ret.Circle.ToStr(), circle.ToStr());
        }
コード例 #7
0
        public void TestMethod4()
        {
            var a = new[]
            {
                new AddrPort("omsg103", 2843),
                new AddrPort("omsg104", 2856),
                new AddrPort("omsg105", 2867),
                new AddrPort("omsg106", 2880),
                new AddrPort("omsg105", 2868),
                new AddrPort("omsg106", 2881),
                new AddrPort("omsg105", 2869),
                new AddrPort("omsg106", 2882),
            };
            var b = new[]
            {
                new AddrPort("omsg101", 2815),
                new AddrPort("omsg102", 2828),
                new AddrPort("omsg103", 2841),
                new AddrPort("omsg104", 2854),
            };
            var c = new[]
            {
                new AddrPort("omsg106", 2882),
                new AddrPort("omsg101", 2815),
            };
            var d = new[]
            {
                new AddrPort("omsg104", 2854),
                new AddrPort("omsg101", 2816),
                new AddrPort("omsg102", 2829),
                new AddrPort("omsg103", 2842),
                new AddrPort("omsg104", 2855),
                new AddrPort("omsg101", 2817),
                new AddrPort("omsg102", 2830),
                new AddrPort("omsg103", 2843),
            };
            var ret0 = ProviderAddrPortResolver.CreateEmptyCircle();
            var list = new List <IEnumerable <AddrPort> >()
            {
                a, b, c, d
            };
            int before;
            int after;
            var tmp = new List <IEnumerable <AddrPort> >();

            do
            {
                before = list.Count;
                Console.WriteLine($"before={before}");
                foreach (var arr in list)
                {
                    var ret = ProviderAddrPortResolver.Concat(ret0, arr);
                    if (ret.NotResolved.Count() != 0)
                    {
                        tmp.Add(ret.NotResolved);
                    }
                    ret0 = ret.Circle;
                }
                list  = tmp;
                after = list.Count;
                Console.WriteLine($"after={after}");
            } while (before != after);
            Console.WriteLine(ret0.ToStr());
            Assert.IsTrue(ProviderAddrPortResolver.IsCompleted(ret0));
        }
コード例 #8
0
        public async Task Start(IProgress <MyProgress> progress, CancellationToken ct)
        {
            var url1          = "http://live.nicovideo.jp/";
            var url2          = "http://www.chikuwachan.com/live/";
            var liveIdList    = new List <string>();
            var availBrowsers = new[] { ryu_s.MyCommon.Browser.BrowserType.Chrome, ryu_s.MyCommon.Browser.BrowserType.Firefox, ryu_s.MyCommon.Browser.BrowserType.IE };
            //var availBrowsers = new[] { ryu_s.MyCommon.Browser.BrowserType.IE };
            var circle         = ProviderAddrPortResolver.CreateEmptyCircle();
            var liveContextDic = new Dictionary <string, LiveContext>();
            var provider_type  = ryu_s.NicoLibrary.Provider_Type.Community;
            /// <summary>
            /// 一つしか分かっていない
            /// </summary>
            var One = Settings.Instance.One;// new List<List<AddrPort>>();
            /// <summary>
            /// 一部に欠けがある
            /// </summary>
            var Shortage = Settings.Instance.Shortage;// new List<List<AddrPort>>();
            /// <summary>
            /// 連続している
            /// </summary>
            var Sequentially = Settings.Instance.Sequentially;// new List<List<AddrPort>>();
            var t            = Task.Factory.StartNew(() =>
            {
                do
                {
                    var idSources = new[] { url1, url2 };
                    foreach (var idSource in idSources)
                    {
                        var idList = GetLiveId(idSource).Result;
                        liveIdList.AddRange(idList);
                    }
                    liveIdList = liveIdList.Select(s => s).Distinct().ToList();

                    //各ブラウザごとにplayerstatusを取得する。
                    foreach (var browser in availBrowsers)
                    {
                        progress.Report(new MyProgress {
                            Circle = circle.ToStr(), Status = CreateStatusView(Shortage, One, Sequentially, liveContextDic, liveIdList, browser)
                        });
                        foreach (var live_id in liveIdList)
                        {
                            Console.WriteLine(live_id);
                            if (!liveContextDic.ContainsKey(live_id))
                            {
                                liveContextDic.Add(live_id, new LiveContext(live_id, true));
                            }
                            var context = liveContextDic[live_id];
                            if (!context.IsBroadcasting)
                            {
                                continue;
                            }
                            //5分以内に同じ放送にアクセスしない。座席が変わることを期待して。
                            if (context.LastAccessDic.ContainsKey(browser) && context.LastAccessDic[browser].AddMinutes(5) > DateTime.Now)
                            {
                                continue;
                            }
                            if (!context.LastAccessDic.ContainsKey(browser))
                            {
                                context.LastAccessDic.Add(browser, new DateTime(0));
                            }
                            try
                            {
                                var playerstatus = GetPlayerStatusTest(live_id, browser, null).Result;
                                System.Diagnostics.Debug.WriteLine($"{playerstatus.user.room_label}, {playerstatus.user.room_seetno}");
                                if (playerstatus.stream.Provider_Type == provider_type && !context.RoomList.Select(room => room.room_label).Contains(playerstatus.user.room_label))
                                {
                                    context.RoomList.Add(new Room4(playerstatus.user.room_label, playerstatus.ms));
                                }
                            }
                            catch (AggregateException ex)
                            {
                                context.IsBroadcasting = false;
                            }
                            catch (Exception ex)
                            {
                                context.IsBroadcasting = false;
                            }
                            context.LastAccessDic[browser] = DateTime.Now;
                            Task.WaitAll(Task.Delay(100));
                        }
                        Task.WaitAll(Task.Delay(1000));
                    }
                    Console.WriteLine("roominfo collection completed");
                    foreach (var liveContext in liveContextDic.Select(pair => pair.Value))
                    {
                        var listlist = liveContext.ToList();
                        foreach (var m in listlist)
                        {
                            if (m.Count == 0)
                            {
                                continue;
                            }
                            if (m.Count == 1)
                            {
                                One.Add(m);
                            }
                            else if (m.Where(s => s == null).Count() > 0)
                            {
                                Shortage.Add(m);
                            }
                            else
                            {
                                Sequentially.Add(m);
                            }
                        }
                    }
                    try {
                        ProviderAddrPortResolver.Distinct(One);
                        ProviderAddrPortResolver.Distinct(Shortage);
                        ProviderAddrPortResolver.Distinct(Sequentially);
                        ProviderAddrPortResolver.ComplementShortage(Shortage, Shortage, Sequentially);
                        ProviderAddrPortResolver.ComplementShortage(Sequentially, Shortage, Sequentially);
                        Console.WriteLine($"Shortage.Count={One.Count}");
                        Console.WriteLine($"One.Count={Shortage.Count}");
                        Console.WriteLine($"Sequentially.Count={Sequentially.Count}");


                        //ひと通り済んだら
                        var c = ProviderAddrPortResolver.Concat(circle, Shortage);
                        var k = ProviderAddrPortResolver.Concat(circle, Sequentially);
                        //面倒だから全部Shortageに入れちゃう。重複もなんのその。
                        Shortage.AddRange(c.NotResolved.Select(b => b.ToList()));
                        Shortage.AddRange(k.NotResolved.Select(b => b.ToList()));
                        Console.WriteLine($"circle.count={circle.Count}");
                    }catch (Exception ex)
                    {
                        ryu_s.MyCommon.Logging.LogException(ryu_s.MyCommon.LogLevel.error, ex);
                    }
                } while (!ProviderAddrPortResolver.IsCompleted(circle));
            }, ct);

            await t;

            Console.WriteLine(circle.ToStr());
        }