Exemplo n.º 1
0
        private void CallbackServer(List <Object_Server> servers, Action <object[]> callback)
        {
            var tmpList = CloneObjectServers(servers);

            Parallel.ForEach(tmpList, server =>
            {
                try
                {
                    if (IsOver || ctsSwitch.Token.IsCancellationRequested)
                    {
                        return;
                    }
                    RefreshServerList(4, server);
                    var obj = new Object_IP()
                    {
                        Ip = server.Ip
                    };
                    obj.HttpSetSpeed();
                    if (!obj.IsNotValid && !obj.IsForbidden)
                    {
                        obj.HttpSetSpeed();
                    }
                    var o = new object[2];
                    o[0]  = server;
                    o[1]  = obj;
                    callback(o);
                }
                catch
                {
                }
            });
        }
Exemplo n.º 2
0
        /// <summary>
        /// 切换服务器
        /// </summary>
        /// <param name="objp">切换前的服务器</param>
        /// <param name="callback">切换后的服务器</param>
        /// <param name="flag">是否为手动切换</param>
        private void ServerSwitch(CancellationToken token, Object_IP objp, Action <Object_IP> callback, bool flag = false)
        {
            DeterMineCall(() =>
            {
                if (flag)
                {
                    objp.HttpSetSpeed();
                    switchSeed++;

                    if (objp.Speed != null)
                    {
                        hostAction.AddDnsResolve(objp.Ip, domain);
                        callback(objp);
                    }
                }
                else
                {
                    if (dnsListTmp.Count <= 0)
                    {
                        AddSwitchListViewItem("没有可用的服务器,请重启关闭本窗口重新启动并测试。", Color.Red, "");
                        ctsListen.Cancel();
                        ctsSwitch.Cancel();
                        return;
                    }
                    for (int i = switchSeed; i < dnsListTmp.Count; i++)
                    {
                        if (token.IsCancellationRequested)
                        {
                            return;
                        }
                        objp.Ip = dnsListTmp[i].Ip;
                        objp.HttpSetSpeed();
                        switchSeed++;

                        if (objp.Speed != null)
                        {
                            hostAction.AddDnsResolve(objp.Ip, domain);
                            callback(objp);
                            break;
                        }
                    }
                    if (objp.Speed != null)
                    {
                        AddSwitchListViewItem("切换完成 [{0}] ,响应速度={1}秒", Color.Green, new object[] { objp.Ip, objp.Speed.Value.TotalSeconds.ToString("#0.00") });
                    }
                }
            });
        }
Exemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="objp">手动切换的IP对象,自动切换请置空</param>
        /// <param name="callback"></param>
        /// <param name="flag">手否是手动切换</param>
        public void AutoSwitchCDN(Object_IP objp, Action <string> callback, bool flag = false)
        {
            if (_index == -1)
            {
                _index = 0;
            }
            if (flag)
            {
                objp.HttpSetSpeed();
                //if (objp.Speed != null)
                //{
                hostAction.AddDnsResolve(objp.Ip, _domain);
                callback(string.Format("自动切换完成 [{0}]", objp.Ip));
                //}
            }
            else
            {
                if (CDN_List.Count <= 0)
                {
                    callback("没有可以切换的服务器...");
                    return;
                }
                for (int i = _index; i < CDN_List.Count; i++)
                {
                    var obj = new Object_IP();
                    obj.Ip = CDN_List[i].Ip;
                    //obj.HttpSetSpeed();
                    _index++;

                    //if (obj.Speed != null)
                    //{
                    hostAction.AddDnsResolve(obj.Ip, _domain);
                    callback(string.Format("自动切换完成 [{0}] ", obj.Ip));
                    break;
                    //}
                }
                if (_index >= CDN_List.Count / 2)
                {
                    _index = 0;
                }
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="objp">手动切换的IP对象,自动切换请置空</param>
        /// <param name="callback"></param>
        /// <param name="flag">手否是手动切换</param>
        public void AutoSwitchCDN(Object_IP objp, Action<string> callback, bool flag = false)
        {
            if (_index == -1)
                _index = 0;
            if (flag)
            {
                objp.HttpSetSpeed();
                //if (objp.Speed != null)
                //{
                    hostAction.AddDnsResolve(objp.Ip, _domain);
                    callback(string.Format("自动切换完成 [{0}]", objp.Ip));
                //}
            }
            else
            {
                if (CDN_List.Count <= 0)
                {
                    callback("没有可以切换的服务器...");
                    return;
                }
                for (int i = _index; i < CDN_List.Count; i++)
                {
                    var obj = new Object_IP();
                    obj.Ip = CDN_List[i].Ip;
                    //obj.HttpSetSpeed();
                    _index++;

                    //if (obj.Speed != null)
                    //{
                        hostAction.AddDnsResolve(obj.Ip, _domain);
                        callback(string.Format("自动切换完成 [{0}] ", obj.Ip));
                        break;
                    //}
                }
                if (_index >= CDN_List.Count/2)
                    _index = 0;
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// 监听方法
        /// </summary>
        private void ListenMethod(object token)
        {
            var ct = (CancellationToken)token;

            if (ct.IsCancellationRequested)
            {
                return;
            }
            lock (locker)
            {
                var    localhost = new Object_IP();
                string hostLine  = hostAction.GetCacheServerIP(domain);
                if (ipAddress != null)
                {
                    localhost.Ip = ipAddress.ToString();
                    ipAddress    = null;
                }
                else
                {
                    localhost.Ip = hostLine == "" ? domain : hostLine.Replace(" " + domain, "");
                }
                localhost.HttpSetSpeed();

                hostAction.AddDnsResolve(localhost.Ip, domain);

                if (localhost.Speed == null)
                {
                    timeOutCount++;
                    if (timeOutCount + lowCount < 2)
                    {
                        AddSwitchListViewItem("服务器 [{0}] 操作超时,已记录 [{1}] 次,连续累计超时或过慢2次则进行切换...", Color.FromArgb(192, 0, 192), localhost.Ip, timeOutCount + lowCount);
                    }
                    else
                    {
                        AddSwitchListViewItem("服务器 [{0}] 操作超时,正在切换...", Color.FromArgb(192, 0, 192), localhost.Ip);
                        ServerSwitch(ct, localhost, (obj) => localhost = obj);
                        timeOutCount = 0;
                    }
                }
                else
                {
                    if (localhost.Speed.Value.TotalSeconds > 1)//小于1秒,为正常速度
                    {
                        lowCount++;
                        if (timeOutCount + lowCount < 3)
                        {
                            AddSwitchListViewItem("服务器 [{0}] 速度过慢,响应速度={1}秒,已记录 [{2}] 次,连续累计超时或过慢3次则进行切换...", Color.FromArgb(192, 0, 192), localhost.Ip, localhost.Speed.Value.TotalSeconds.ToString("#0.00"), timeOutCount + lowCount);
                        }
                        else
                        {
                            AddSwitchListViewItem("服务器 [{0}] 速度过慢,响应速度={1}秒,正在切换...", Color.FromArgb(192, 0, 192), localhost.Ip, localhost.Speed.Value.TotalSeconds.ToString("#0.00"));
                            ServerSwitch(ct, localhost, (obj) => localhost = obj);
                            lowCount = 0;
                        }
                    }
                    else
                    {
                        AddSwitchListViewItem("服务器 [{0}] 正常,响应速度={1}秒", Color.Green, localhost.Ip, localhost.Speed.Value.TotalSeconds.ToString("#0.00"));
                        timeOutCount = 0;
                        lowCount     = 0;
                    }
                }
            }
            Thread.Sleep(10000);
            ListenMethod(token);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 切换服务器
        /// </summary>
        /// <param name="objp">切换前的服务器</param>
        /// <param name="callback">切换后的服务器</param>
        /// <param name="flag">是否为手动切换</param>
        private void ServerSwitch(CancellationToken token, Object_IP objp, Action<Object_IP> callback,bool flag=false)
        {
            DeterMineCall(() =>
            {
                if (flag)
                {
                    objp.HttpSetSpeed();
                    switchSeed++;

                    if (objp.Speed != null)
                    {
                        hostAction.AddDnsResolve(objp.Ip, domain);
                        callback(objp);
                    }
                }
                else
                {
                    if (dnsListTmp.Count <= 0)
                    {
                        AddSwitchListViewItem("没有可用的服务器,请重启关闭本窗口重新启动并测试。", Color.Red, "");
                        ctsListen.Cancel();
                        ctsSwitch.Cancel();
                        return;
                    }
                    for (int i = switchSeed; i < dnsListTmp.Count; i++)
                    {
                        if (token.IsCancellationRequested)
                        {
                            return;
                        }
                        objp.Ip = dnsListTmp[i].Ip;
                        objp.HttpSetSpeed();
                        switchSeed++;

                        if (objp.Speed != null)
                        {
                            hostAction.AddDnsResolve(objp.Ip, domain);
                            callback(objp);
                            break;
                        }
                    }
                    if (objp.Speed != null)
                    {
                        AddSwitchListViewItem("切换完成 [{0}] ,响应速度={1}秒", Color.Green, new object[] { objp.Ip, objp.Speed.Value.TotalSeconds.ToString("#0.00") });
                    }
                }
            });
        }
Exemplo n.º 7
0
        /// <summary>
        /// 监听方法
        /// </summary>
        private void ListenMethod(object token)
        {
            var ct = (CancellationToken)token;
            if (ct.IsCancellationRequested)
            {
                return;
            }
            lock (locker)
            {
                var localhost = new Object_IP();
                string hostLine = hostAction.GetCacheServerIP(domain);
                if (ipAddress != null)
                {
                    localhost.Ip = ipAddress.ToString();
                    ipAddress = null;
                }
                else
                {
                    localhost.Ip = hostLine == "" ? domain : hostLine.Replace(" " + domain, "");
                }
                localhost.HttpSetSpeed();

                hostAction.AddDnsResolve(localhost.Ip, domain);

                if (localhost.Speed == null)
                {
                    timeOutCount++;
                    if (timeOutCount + lowCount < 2)
                    {
                        AddSwitchListViewItem("服务器 [{0}] 操作超时,已记录 [{1}] 次,连续累计超时或过慢2次则进行切换...", Color.FromArgb(192, 0, 192), localhost.Ip, timeOutCount + lowCount);
                    }
                    else
                    {
                        AddSwitchListViewItem("服务器 [{0}] 操作超时,正在切换...", Color.FromArgb(192, 0, 192), localhost.Ip);
                        ServerSwitch(ct, localhost, (obj) => localhost = obj);
                        timeOutCount = 0;
                    }
                }
                else
                {
                    if (localhost.Speed.Value.TotalSeconds > 1)//小于1秒,为正常速度
                    {
                        lowCount++;
                        if (timeOutCount + lowCount < 3)
                        {
                            AddSwitchListViewItem("服务器 [{0}] 速度过慢,响应速度={1}秒,已记录 [{2}] 次,连续累计超时或过慢3次则进行切换...", Color.FromArgb(192, 0, 192), localhost.Ip, localhost.Speed.Value.TotalSeconds.ToString("#0.00"), timeOutCount + lowCount);
                        }
                        else
                        {
                            AddSwitchListViewItem("服务器 [{0}] 速度过慢,响应速度={1}秒,正在切换...", Color.FromArgb(192, 0, 192), localhost.Ip, localhost.Speed.Value.TotalSeconds.ToString("#0.00"));
                            ServerSwitch(ct, localhost, (obj) => localhost = obj);
                            lowCount = 0;
                        }
                    }
                    else
                    {
                        AddSwitchListViewItem("服务器 [{0}] 正常,响应速度={1}秒", Color.Green, localhost.Ip, localhost.Speed.Value.TotalSeconds.ToString("#0.00"));
                        timeOutCount = 0;
                        lowCount = 0;
                    }
                }
            }
            Thread.Sleep(10000);
            ListenMethod(token);
        }
Exemplo n.º 8
0
 private void CallbackServer(List<Object_Server> servers, Action<object[]> callback)
 {
     var tmpList = CloneObjectServers(servers);
     Parallel.ForEach(tmpList, server =>
     {
         try
         {
             if (IsOver || ctsSwitch.Token.IsCancellationRequested)
                 return;
             RefreshServerList(4, server);
             var obj = new Object_IP() {Ip = server.Ip};
             obj.HttpSetSpeed();
             if (!obj.IsNotValid && !obj.IsForbidden)
                 obj.HttpSetSpeed();
             var o = new object[2];
             o[0] = server;
             o[1] = obj;
             callback(o);
         }
         catch
         {
         }
     });
 }