亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hxdllclient.pas

?? 一個基于Socket的在線更新程序
?? PAS
字號:
unit hxDllClient;

interface

uses
  Windows, Forms, Dialogs, Classes, SysUtils, hxUpdate, hxClasses, hxFileRes;

type
  ThxDllClient = class(TObject)
  private
    FDownloadProgress: TDownloadProgress;
    FTotalSize: Integer;
    FWorking: Boolean;
    FNewVersions: TVersionList;
    FOldVersions: TVersionList;
    FClient: ThxUpdateClient;
    FHost: string;
    FPort: Integer;
    FProjectName: string;
    FProxyInfo: TProxyInfo;
    procedure DoDownloadFileList(Sender: TObject; DownloadStatus: TDownloadStatus;
      const WorkCount: Integer);
    procedure DoDownloadFiles(Sender: TObject; DownloadStatus: TDownloadStatus;
      const WorkCount: Integer);
    procedure RefreshNewFileList(ResTree: TResTree; var TotalSize: Integer);
    function GetOldVersion(FileName: string): TVersion;
    function GetNewVersion(FileName: string): TVersion;
    procedure SetActive(const Value: Boolean);
    function GetActive: Boolean;
  public
    constructor Create;
    destructor Destroy; override;
    function CheckNewVersion: Boolean;
    procedure UpdateProduct(DownloadProgress: TDownloadProgress);

    property Host: string read FHost write FHost;
    property Port: Integer read FPort write FPort;
    property ProxyInfo: TProxyInfo read FProxyInfo write FProxyInfo;
    property ProjectName: string read FProjectName write FProjectName;
    property OldVersions: TVersionList read FOldVersions;
    property NewVersions: TVersionList read FNewVersions; 
    property Active: Boolean read GetActive write SetActive;
  end;

implementation

{ ThxDllClient }

function ThxDllClient.CheckNewVersion: Boolean;
var
  T: Cardinal;
begin
  Active:= True;
  T:= GetTickCount;

  FClient.DownloadFileList(DoDownloadFileList);
  while GetTickCount - T < G_TimeOut do
  begin
    if not FWorking then
    begin
      Result:= FTotalSize <> 0;
      Active:= False;
      Exit;
    end;
    if Application.Terminated then
      Break;
    Application.ProcessMessages;
  end;
  raise Exception.Create('網絡超時,無法連接到LiveUpdate服務器!');
end;

constructor ThxDllClient.Create;
var
  VerName: string;
begin
  FNewVersions:= TVersionList.Create('');
  VerName:= ExtractFilePath(Application.ExeName) + ProjectName + '.ver';
  //VerName:= StringReplace(Application.ExeName, '.exe', '.ver', [rfReplaceAll]);
  FOldVersions:= TVersionList.Create(VerName);
  FTotalSize:= 0;
  FWorking:= True;
  FClient:= nil;
  FDownloadProgress:= nil;
  FProjectName:= ProjectName;
end;

destructor ThxDllClient.Destroy;
begin
  FOldVersions.Free;
  if Assigned(FClient) then
    FClient.Free;
  inherited Destroy;
end;

procedure ThxDllClient.DoDownloadFileList(Sender: TObject;
  DownloadStatus: TDownloadStatus; const WorkCount: Integer);
begin
  case DownloadStatus of
    dsBegin:
    begin
    end;
    dsFileData:
    begin
    end;
    dsEnd:
    begin
      FTotalSize:= 0;
      RefreshNewFileList((Sender as TDownloadFileListThread).ResTree, FTotalSize);
      FWorking:= False;
    end;
  end;
end;

procedure ThxDllClient.DoDownloadFiles(Sender: TObject; DownloadStatus: TDownloadStatus;
  const WorkCount: Integer);
var
  FileName: string;
  NewVersion: TVersion;
begin
  FileName:= (Sender as TDownloadFilesThread).DownloadFileName;
  case DownloadStatus of
    dsBegin, dsFileBegin, dsFileData, dsEnd:
    begin
      if Assigned(FDownloadProgress) then
        FDownloadProgress(DownloadStatus, FileName, WorkCount);
    end;
    dsFileEnd:  //更新版本號
    begin
      NewVersion:= GetNewVersion(FileName);
      FOldVersions.Update(FileName, NewVersion);
      if Assigned(FDownloadProgress) then
        FDownloadProgress(dsFileEnd, FileName, WorkCount);
    end;
  end;
end;

function ThxDllClient.GetActive: Boolean;
begin
  Result:= FClient.Active;
end;

function ThxDllClient.GetNewVersion(FileName: string): TVersion;
var
  Index: Integer;
begin
  Index:= FNewVersions.IndexOf(FileName);
  if Index <> -1 then
    Result:= FNewVersions.Items[Index]^.Version;
end;

function ThxDllClient.GetOldVersion(FileName: string): TVersion;
var
  Index: Integer;
begin
  Index:= FOldVersions.IndexOf(FileName);
  if Index <> -1 then
    Result:= FOldVersions[Index].Version
  else
    Result:= 'Unknown';
end;

procedure ThxDllClient.RefreshNewFileList(ResTree: TResTree;
  var TotalSize: Integer);

  procedure TravelTree(Node: TNode);
  var
    I: Integer;
    pInfo: PResInfo;
  begin
    if Node = nil then Exit;
    pInfo:= PResInfo(Node.Data);
    if pInfo^.ResType = rtFile then
    begin
      if not SameVersion(pInfo^.Version, GetOldVersion(pInfo^.DownloadURL)) then
      begin
        FNewVersions.Update(pInfo^.DownloadURL, pInfo^.Version);
        Inc(TotalSize, pInfo^.FileSize);
      end;
    end;

    for I:= 0 to Node.Count - 1 do
      TravelTree(Node.Children[I]);
  end;

var
  I: Integer;
  Node: TNode;
begin
  FNewVersions.Clear;
  Node:= ResTree.RootNode;
  for I:= 0 to Node.Count - 1 do
    TravelTree(Node.Children[I]);
end;
procedure ThxDllClient.SetActive(const Value: Boolean);
var
  T: Cardinal;
begin
  if FProjectName = '' then
    raise Exception.Create('Dll未初始化,必須先調用Init函數進行初始化!');

  if not Assigned(FClient) then
    FClient:= ThxUpdateClient.Create(FProjectName);

  if FClient.Active <> Value then
  begin
    if not FClient.Active then
    begin
      T:= GetTickCount;
      FClient.ProxyInfo:= FProxyInfo;
      FClient.Open(Host, Port);
      //異步轉為同步
      while GetTickCount - T < 60000 do
      begin
        if FClient.Active = True then Exit;
        Application.ProcessMessages;
      end;
      raise Exception.CreateFmt('連接超時,錯誤碼是%d', [GetLastError]);
    end
    else
      FClient.Close;
  end;
end;

procedure ThxDllClient.UpdateProduct(DownloadProgress: TDownloadProgress);
var
  I: Integer;
  slFiles: TStrings;
begin
  Active:= True;
  Assert(FClient.Active = True);
  FDownloadProgress:= DownloadProgress;
  if Assigned(FDownloadProgress) then
    FDownloadProgress(dsBegin, '', FTotalSize);

  slFiles:= TStringList.Create;
  try
    for I:= 0 to FNewVersions.Count - 1 do
      slFiles.Add(FNewVersions[I].FileName);
    FClient.DownloadFiles(slFiles, DoDownloadFiles);
  finally
    slFiles.Free;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成av人片| 亚洲欧洲成人自拍| 色天天综合色天天久久| 国产高清精品网站| 久久国产精品无码网站| 精品一区二区在线免费观看| 麻豆精品久久久| 美女视频网站黄色亚洲| 麻豆精品新av中文字幕| 麻豆91精品91久久久的内涵| 久久国产精品第一页| 老司机午夜精品| 国产精品综合一区二区| 国产一区二区精品久久91| 韩国v欧美v亚洲v日本v| 懂色av一区二区三区免费观看| 国产69精品久久久久777| 从欧美一区二区三区| 国产成人精品亚洲午夜麻豆| a美女胸又www黄视频久久| 成人性生交大片免费看视频在线| 99久久精品情趣| 在线观看国产91| 欧美一区二区福利视频| 欧美不卡一二三| 国产精品情趣视频| 一区二区三区在线高清| 蜜桃视频免费观看一区| 国产成人综合精品三级| 91蜜桃免费观看视频| 91精品欧美福利在线观看| 久久综合久久久久88| 中文字幕亚洲欧美在线不卡| 亚洲一区在线观看网站| 韩国av一区二区三区| 91老师国产黑色丝袜在线| 69久久99精品久久久久婷婷| 中文字幕乱码一区二区免费| 亚洲午夜电影网| 成人一区二区在线观看| 欧美日韩在线播| 欧美国产国产综合| 婷婷综合久久一区二区三区| jlzzjlzz欧美大全| 日韩一区二区三区视频在线观看| 中文av一区特黄| 免费观看一级欧美片| 99riav久久精品riav| 日韩三级在线观看| 亚洲视频一区二区在线观看| 久久疯狂做爰流白浆xx| 欧美综合一区二区| 中文字幕国产一区二区| 久久国产精品露脸对白| 色久优优欧美色久优优| 国产视频一区在线观看| 日本亚洲电影天堂| 欧美午夜片在线看| 国产精品卡一卡二卡三| 国产伦精品一区二区三区免费迷 | 国产成人精品免费一区二区| 欧美亚洲一区二区三区四区| 亚洲国产高清aⅴ视频| 毛片av一区二区| 欧美日韩久久久一区| 亚洲欧美色综合| 成人美女在线观看| 久久久综合激的五月天| 精品在线你懂的| 制服丝袜在线91| 日韩精品乱码av一区二区| 在线影视一区二区三区| 亚洲女同一区二区| 懂色av中文字幕一区二区三区| 26uuu欧美| 国产一区日韩二区欧美三区| 日韩欧美aaaaaa| 国产综合一区二区| 日韩欧美亚洲一区二区| 日韩不卡在线观看日韩不卡视频| 欧美人狂配大交3d怪物一区| 亚洲午夜精品久久久久久久久| 欧美在线观看视频一区二区三区| 一区二区三区精密机械公司| 91蜜桃视频在线| 亚洲综合视频在线| 欧美美女网站色| 久久超碰97人人做人人爱| 日韩欧美国产高清| 国产老肥熟一区二区三区| 久久综合色综合88| 丁香网亚洲国际| 日韩理论片一区二区| 欧美性猛交xxxx乱大交退制版 | 色婷婷激情综合| 亚洲女厕所小便bbb| 欧洲av一区二区嗯嗯嗯啊| 亚洲一区自拍偷拍| 欧美一卡二卡三卡四卡| 国产麻豆9l精品三级站| 国产精品久99| 91精品在线免费| 国产一区二区三区在线观看免费 | 一二三区精品视频| 精品视频免费看| 激情av综合网| 中文字幕一区二区三区色视频| 91福利视频网站| 久久91精品国产91久久小草| 日本一区二区不卡视频| 欧美在线免费播放| 国产一区二区影院| 1区2区3区精品视频| 日韩欧美的一区| 成人动漫在线一区| 亚洲国产精品人人做人人爽| 久久蜜桃av一区二区天堂| 91碰在线视频| 国产一区二区美女诱惑| 一区二区三区日韩在线观看| xnxx国产精品| 欧美日韩一区二区三区在线看| 国产精品一二二区| 午夜精彩视频在线观看不卡| 日本一区二区视频在线观看| 欧美精品丝袜中出| 99精品在线观看视频| 国产真实乱偷精品视频免| 亚洲成av人影院| 中文字幕日韩欧美一区二区三区| 亚洲精品在线免费播放| 欧美日韩国产区一| 91国偷自产一区二区三区成为亚洲经典 | 国产精品18久久久久久久久久久久| 亚洲精品国产a| 国产欧美日韩综合精品一区二区 | 欧美一级欧美三级在线观看| 91网站黄www| 国产jizzjizz一区二区| 男人的天堂亚洲一区| 亚洲精品免费在线观看| 中文字幕成人网| 26uuu国产日韩综合| 欧美日韩免费不卡视频一区二区三区| 国产成人av电影在线| 日本91福利区| 日韩不卡一区二区| 亚洲一区二区免费视频| 亚洲视频精选在线| 亚洲欧洲av一区二区三区久久| 久久久精品tv| 久久丝袜美腿综合| 精品久久久久香蕉网| 欧美成人a在线| 精品久久一区二区| 欧美tk—视频vk| 欧美成人a∨高清免费观看| 国产夜色精品一区二区av| xfplay精品久久| 国产日韩欧美不卡在线| 国产午夜精品一区二区三区视频| 精品国产伦一区二区三区观看体验| 日韩久久免费av| 精品成人在线观看| 久久精品日韩一区二区三区| 精品久久国产97色综合| 久久夜色精品国产欧美乱极品| 2020国产精品久久精品美国| 久久久99久久精品欧美| 国产亚洲成年网址在线观看| 国产精品久久久久久久第一福利 | 91超碰这里只有精品国产| 欧美日本在线观看| 91麻豆精品国产91久久久| 欧美白人最猛性xxxxx69交| 久久综合久久综合久久| 亚洲国产精品ⅴa在线观看| 国产精品网站一区| 一区二区三区日韩精品视频| 五月婷婷综合在线| 国产一区二区在线影院| 99久久99久久综合| 欧美亚洲国产一卡| 日韩精品一区二区三区四区视频 | 亚洲精品视频在线观看网站| 午夜精品久久久久久久久久| 日本不卡的三区四区五区| 国产主播一区二区| 91蝌蚪porny| 91麻豆精品国产91久久久资源速度| 日韩免费观看高清完整版| 中文字幕在线观看一区二区| 午夜精品久久久久久久久久| 国产精品一区二区三区网站| 欧美亚洲自拍偷拍| 久久综合九色综合97婷婷女人 | 久久伊人中文字幕| 洋洋av久久久久久久一区| 精品一区二区三区在线播放视频| 成人免费看的视频|