void CheckForUpdates()
 {
     if (updateCheckState != UpdateCheckState.Stopped)
     {
         return;
     }
     try
     {
         Thread thread = new Thread(ThreadProc_DoCheckForUpdates);
         thread.Start();
         updateCheckState = UpdateCheckState.Checking;
     }
     catch { updateCheckResult = "~r~failed to check for updates"; }
 }
        void ThreadProc_DoCheckForUpdates()
        {
            try
            {
                WebClient client = new WebClient();
                client.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
                Stream       stream    = client.OpenRead(URL_VERSIONFILE);
                StreamReader reader    = new StreamReader(stream);
                string       latestVer = reader.ReadToEnd();
                if (SCRIPT_VERSION == latestVer)
                {
                    updateCheckResult = "~g~Speedometer is up to date";
                }
                else
                {
                    updateCheckResult = "~y~New version is available on gta5-mods.com";
                }
            }
            catch { updateCheckResult = "~r~failed to check for updates"; }

            updateCheckState = UpdateCheckState.Checked;
        }
예제 #3
0
        private void UpdateBadLinkLvItem(object sender, WatchTimerEventArgs arg)
        {
            if (!string.IsNullOrEmpty(CurrentBadLink)) //如果当前有执行任务,请记录到队列
            {
                if (!CurrentBadLink.Equals(arg.Url))
                {
                    if (!BadLinkQue.ContainsKey(arg.Url))
                    {
                        BadLinkQue.Add(arg.Url, arg);
                        foreach (ListViewItem lvi in lv404links.Items)
                        {
                            if (lvi.SubItems[0].Text.Equals(arg.Url))
                            {
                                lvi.SubItems[3].Text = "排队中";
                                lvi.BackColor        = Color.Yellow;
                                break;
                            }
                        }
                    }
                }

                return;
            }
            else
            {
                //BadLinkQue.Clear();
                //BadLinkQue.Add(arg.Url, arg);
            }

            foreach (ListViewItem lvi in lv404links.Items)
            {
                if (lvi.SubItems[0].Text.Equals(arg.Url))//&& lvi.SubItems[3].Text.Equals("空闲")
                {
                    lvi.SubItems[4].Text = arg.UpdateTime.ToString();
                    string Content = "";
                    try
                    {
                        Content = LoadPageContent(arg.Url);
                    }
                    catch (Exception e)
                    {
                        BLL.EmailQueue.Instance.AddEmailToDB("发生严重的问题,页面不能访问", string.Format("检查死链模板页面不能访问:{0},检测时间:{1},详细情况:{2}", arg.Url, DateTime.Now, e.Message));
                        continue;
                    }

                    Regex           reg     = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");
                    MatchCollection mc      = reg.Matches(Content);
                    Uri             baseUri = new Uri(arg.Url);
                    List <string>   urls    = new List <string>();

                    foreach (Match m in mc)
                    {
                        Uri uriPage = new Uri(baseUri, m.Groups["url"].Value);

                        string sUrl = uriPage.ToString();
                        //sUrl = XS.Core.WebUtils.UrlEncode(sUrl);
                        urls.Add(sUrl);
                    }

                    List <string> NUrls = (from i in urls select i).Distinct().ToList();

                    if (NUrls.Count > 0)
                    {
                        lvi.SubItems[5].Text = string.Format("找到{0}个网址,正在检查...", NUrls.Count);
                        lvi.SubItems[3].Text = "忙碌中";
                        lvi.BackColor        = Color.Red;
                        CurrentBadLink       = arg.Url;

                        foreach (string url in NUrls)  //载入所有要检查的地址
                        {
                            ListViewItem lvisub = new ListViewItem();
                            lvisub.BackColor        = Color.PowderBlue;
                            lvisub.SubItems[0].Text = string.Concat("--", url);
                            lvisub.SubItems.Add("");
                            lvisub.SubItems.Add("");
                            lvisub.SubItems.Add("等待中");
                            lvisub.SubItems.Add("");
                            lvisub.SubItems.Add("");
                            lv404links.Items.Add(lvisub);
                        }



                        thThreadCheckLink = new Thread(() =>
                        {
                            UpdateCheckState dlgUpdateCheckState = new UpdateCheckState(MtUpdateCheckState);
                            int badnum     = 0;
                            int currentnum = 0;
                            int countnum   = NUrls.Count;
                            foreach (string surl in NUrls)
                            {
                                //Thread.Sleep(1000);
                                currentnum++;
                                bool IsBadLink = false;
                                string url     = surl.Trim();
                                int istate     = 0;
                                string errinfo = string.Empty;
                                if (IsToCheck(url))
                                {
                                    istate = WebUtils.ValidateUrl(url, out errinfo);
                                    if (istate != 200)
                                    {
                                        badnum++;
                                        IsBadLink = true;
                                    }
                                }


                                lv404links.Invoke(dlgUpdateCheckState, IsBadLink ? 1 : 0, currentnum, countnum, url, false, istate, errinfo);
                            }

                            lv404links.Invoke(dlgUpdateCheckState, badnum, currentnum, countnum, arg.Url, true, 0, "");
                        });
                        thThreadCheckLink.ApartmentState = ApartmentState.STA;
                        thThreadCheckLink.Start();
                    }
                }
            }
        }
        void OnTick(object sender, EventArgs e)
        {
            menuPool.ProcessMenus();

            if (enableSaving)
            {
                bool isPausePressed = Function.Call <bool>(Hash.IS_DISABLED_CONTROL_JUST_PRESSED, 2, 199) ||
                                      Function.Call <bool>(Hash.IS_DISABLED_CONTROL_JUST_PRESSED, 2, 200); // pause or pause alternate button
                if (isPausePressed)
                {
                    SaveStats();
                }
            }

            if (updateCheckState == UpdateCheckState.Checked)
            {
                updateCheckState = UpdateCheckState.Stopped;
                UI.Notify(updateCheckResult);
            }

            Player player = Game.Player;

            if (player != null && player.CanControlCharacter && player.IsAlive && player.Character != null)
            {
                // update and draw
                if (player.Character.IsInVehicle() || onfootSpeedo || Utils.IsPlayerRidingDeer(player.Character))  // conditions to draw speedo
                {
                    // in veh or riding deer
                    float speed = 0;
                    if (player.Character.IsInVehicle())
                    {
                        speed = player.Character.CurrentVehicle.Speed;
                    }
                    else if (onfootSpeedo || Utils.IsPlayerRidingDeer(player.Character))
                    {
                        speed = GetSpeedFromPosChange(player.Character);
                    }

                    Update(speed);
                    Draw();

                    wid_accTimer.Update(speed);
                    wid_accTimer.Draw();
                    wid_maxSpeed.Update(speed);
                    wid_maxSpeed.Draw(useMph);

                    // update rainbow
                    if (rainbowMode != 0)
                    {
                        rainbowTimeCounter += Game.LastFrameTime;
                        if (rainbowTimeCounter > RAINBOW_FRAMETIME)
                        {
                            rainbowTimeCounter = 0;
                            rainbowHueBp       = (rainbowHueBp + (int)(1 * Math.Pow(2, rainbowMode - 1) * speed)) % 10000;
                            speedText.Color    = Utils.HSLA2RGBA((double)rainbowHueBp / 10000, 1, 0.5, forecolor.A / 255.0);
                        }
                    }
                }
                else
                {
                    // not in veh, not riding deer
                    if (wid_accTimer.State != AccelerationTimerState.Off)
                    {
                        wid_accTimer.Stop();
                    }
                    if (wid_maxSpeed.State != MaxSpeedState.Off)
                    {
                        wid_maxSpeed.Stop();
                    }
                }
            }

            if (player != null && player.Character != null)
            {
                prevPos = Game.Player.Character.Position;
            }
        }