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

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

?? itignet.pas

?? autoupdate 1.02 source code
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit itignet;

interface

uses Windows, Messages, Classes, Dialogs, ShellAPI,
     Forms, WinBinFile, Progress, ItigOptions, SysUtils, postfile;

type TDebugMethod = procedure(S : String) of object;

const WM_THREAD_COMPLETE = WM_USER + 2;
// used by TestConnect
const CONNECT_OK = 0;
const CONNECT_CERT_NOT_INSTALLED = 1;

const wtExit = 'EXIT';

// Possible values for ResultCode
const irOK = 0;
const irError = 1;
const irCancel = 2;
const irReady = 3;
const irTryAgain = 4;

type
   TItigNet = class;
   TRPCContext = class;

   TRPCMethod = procedure(Context : TRPCContext) of object;

   TMethodPointer = class
   public
      Method : TMethod;

      procedure SetMethod(p : Pointer);
      procedure GetMethod(p : Pointer);
   end;

   TRPCContext = class
   public
      Network : TItigNet;
      Post : TPostFile;
      Results : TStringList;
      Keys : TStringList;
      Values : TStringList;

      constructor Create(Net : TItigNet);
      destructor Destroy; override;

      procedure AddKeyValue(Key : String; Value : String);
      procedure Execute(FileName : String);
      procedure ReceiveFile(FileName : String; ReceiveFileName : String);
   end;


   TItigNet = class(TThread, IProgress)
   public

      ResultCode : Integer;

      Option : TItigOptions;

      constructor Create(fHandle : hWnd; fDebugMethod : TDebugMethod; fGetProxyMethod : TGetProxyFunction);
      destructor Destroy; override;
      procedure ThreadComplete(var Message: TMessage);
      procedure WaitEvent(Handle : THandle);

      function GetResult : Integer;
      procedure ClearResult;
      function GetErrorMsg: String;

      procedure BeginExecute(Action : String; progress: IProgress);
      procedure Execute; override;
      procedure GotMessage;

      //Autodial code
      function isConnected: Boolean;
      function Dial: Boolean;
      procedure Hangup;

      procedure Debug(S : String);

      procedure OpenLogFile;
      procedure Log(S : String);
      procedure CloseLogFile;
      procedure RegisterRPC(Name : String; Method : TRPCMethod);

   private
      RPCMethods : TStringList;
      DebugMethod : TDebugMethod;
      Handle : hWnd;
      //ThreadAction : Integer;
      ThreadAction : String;

      Prog : IProgress;
      ErrorMessage : String;
      ShuttingDown : Boolean;

      Event1 : THandle;
      Event2 : THandle;
      MainThreadID : DWORD;

   //
   // for thread safe debug
   DebugString : String;
   ptVal : Integer;
   ptMsg : String;

      procedure ThreadDebug;
      procedure DecodeResults(Keys : TStringList; Values : TStringList; Results : TStringList);

      // This is a thread safe implementation of the IProgress interface
        procedure setMessage(msg: String);
        procedure setNoActions(toVal: Integer);
        procedure setPos(Position: Integer);
        procedure actionDone();
        procedure Done;
        procedure setPhases(toPhases: integer);
        procedure phaseDone;
        function GetHandle : hWnd;
        function IsCancelled : Boolean;
      //
       function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
       function _AddRef: Integer; stdcall;
       function _Release: Integer; stdcall;
       //
         procedure ptSetMessage;
         procedure ptSetNoAct;
         procedure ptSetPos;
         procedure ptActionDone;
         procedure ptDone;
         procedure tpSetPhases;
         procedure tpPhaseDone;

      procedure TestRPC(Context : TRPCContext);
   end;



implementation

uses WinInet, FileCtrl;

// call like this mp.SetMethod(@@MyMethod)
procedure TMethodPointer.SetMethod(p : Pointer);
begin
   CopyMemory(@Method, p, sizeof(TMethod));
end;

// call like this mp.GetMethod(@@MyMethod)
procedure TMethodPointer.GetMethod(p : Pointer);
begin
   CopyMemory(p, @Method, sizeof(TMethod));
end;

constructor TRPCContext.Create(Net : TItigNet);
begin
   Network := Net;
   Results := TStringList.Create;

   Post := TPostFile.Create(Net.Option, Net.DebugMethod, Net);
   Keys := TStringList.Create;
   Values := TStringList.Create;
   Post.ScriptName := Net.Option.GetScriptName;

end;

destructor TRPCContext.Destroy;
begin
   Keys.Free;
   Values.Free;
   Results.Free;
   Post.Free;
end;

procedure TRPCContext.AddKeyValue(Key : String; Value : String);
begin
   Keys.Add(Key);
   Values.Add(Value);
end;

procedure TRPCContext.Execute(FileName : String);
begin
   Post.Post(Keys, Values, FileName, Results);
   Network.DecodeResults(Keys, Values, Results);
end;

procedure TRPCContext.ReceiveFile(FileName : String; ReceiveFileName : String);
begin
   Post.ReceiveFile(Keys, Values, FileName, ReceiveFileName, Results);
   Network.DecodeResults(Keys, Values, Results);
end;


procedure TItigNet.Debug(S : String);
begin
   if not ShuttingDown then
   begin
      if Assigned(DebugMethod) then
      begin
         if GetCurrentThreadId = MainThreadID then
         begin
            DebugMethod(S);
         end
         else
         begin
            DebugString := S;
            Synchronize(ThreadDebug);
         end;
      end;
   end;
end;

procedure TItigNet.ThreadDebug;
begin
   DebugMethod(DebugString);
end;

constructor TItigNet.Create(fHandle : hWnd; fDebugMethod : TDebugMethod; fGetProxyMethod : TGetProxyFunction);
begin
   MainThreadID := GetCurrentThreadID; 
   ShuttingDown := False;
   Event1 := CreateEvent(nil, True, False, nil);
   Event2 := CreateEvent(nil, True, False, nil);

   inherited Create(False);

   OpenLogFile;

   Handle := fHandle;
   DebugMethod := fDebugMethod;

   Option := TItigOptions.Create;
   Option.GetProxyMethod := fGetProxyMethod;
   Option.LoadInternet;

   ResultCode := irReady;

   RPCMethods := TStringList.Create;

   RegisterRPC('TEST', TestRPC);

//   Resume;

end;

procedure TItigNet.TestRPC(Context : TRPCContext);
begin
   Debug('Test works!');
end;

destructor TItigNet.Destroy;
var
   i : Integer;
begin
   WaitEvent(Event1);
   CloseHandle(Event2);
   CloseHandle(Event1);

   CloseLogFile;

   for i := 0 to RPCMethods.Count - 1 do
   begin
      RPCMethods.Objects[i].Free;
   end;
   RPCMethods.Free;
   RPCMethods := nil;

   inherited Destroy;
end;

procedure TItigNet.ThreadComplete(var Message: TMessage);
begin
//   Debug('ThreadComplete message');
end;


procedure TItigNet.DecodeResults(Keys : TStringList; Values : TStringList; Results : TStringList);
var
   i : Integer;
   Temp : String;
   p : Integer;
   NewKey : String;
   NewValue : String;
   ExplicitError : Boolean;
begin
   Keys.Clear;
   Values.Clear;
   // check for status...  If there is no status then ResultCode will
   // be irError.  It is and error if a script does not return a status
   ErrorMessage := 'The script did not return a status code';
   ResultCode := irError;
   ExplicitError := False;

   for i := 0 to Results.Count - 1 do
   begin
      if Length(Results[i]) > 0 then
      begin
         Temp := Results[i];
         if Temp[1] = '+' then
         begin
            Delete(Temp, 1, 1);
            p := pos(': ', Temp);
            NewKey := Copy(Temp, 1, p - 1);
            Delete(Temp, 1, p + 1);
            NewValue := Temp;

            Keys.Add(NewKey);
            Values.Add(NewValue);

            if NewKey = 'status' then
            begin
               if NewValue = 'Success' then
               begin
                  ResultCode := irOK;
               end
               else if NewValue = 'Error' then
               begin
                  if not ExplicitError then
                  begin
                     ErrorMessage := 'Script reported an error';
                  end;
                  ResultCode := irError;
               end;
            end
            else if NewKey = 'error' then
            begin
               ErrorMessage := NewValue;
               ExplicitError := True;
            end;

         end;
      end;
   end;

   if ResultCode <> irOK then
   begin
      Debug(Results.Text);
   end;

   if ExplicitError then
   begin
      ResultCode := irError; // sometimes we get an error and success...
   end;

{   for i := 0 to Keys.Count - 1 do
   begin
      Debug('Key -' + Keys[i] + '- Value -' + Values[i] + '-');
   end;}
end;



procedure TItigNet.WaitEvent(Handle : THandle);
var
   R : DWORD;
begin
   if GetCurrentThreadId = MainThreadID then
   begin
     Debug('Wait Handle');
     R := WaitForSingleObject(Handle, 0);
     if R = WAIT_OBJECT_0 then
     begin
        Debug('Clear Handle');
     end
     else
     begin
        while True do
        begin
           Application.ProcessMessages;
           Debug('Handle is not signaled....  waiting up to 1 second...');
           R := WaitForSingleObject(Handle, 100);
           if R = WAIT_OBJECT_0 then
           begin
              Debug('Clear Handle');
              break;
           end
        end;
     end;
   end
   else
   begin
      Debug('Wait Handle');
      WaitForSingleObject(Handle, INFINITE);
   end;
   ResetEvent(Handle);
end;

//This is the main method of the InfoIn class
procedure TItigNet.BeginExecute(Action : String; progress: IProgress);
begin
   if ShuttingDown then
   begin
      raise Exception.Create('ITIGNet component is already shutting down');
   end;
   if Assigned(Progress) then
   begin
      Handle := progress.GetHandle;
   end
   else
   begin
      Handle := 0;
   end;
   ThreadAction := Action;
   try
      Prog := Progress;
   except
      on E : Exception do
      begin
         ShowMessage('How can there be an exception here?' + E.Message);
      end;
   end;

   if Action = wtExit then
   begin
      ShuttingDown := True;
   end;

   Debug('Set E2');
   SetEvent(Event2);
end;

procedure TItigNet.GotMessage;
begin
   WaitEvent(Event1);
end;

// This is the start of the work thread.
procedure TItigNet.Execute;
var
   Quit: Boolean;
   i : Integer;
   Method : TRPCMethod;
   MethodPointer : TMethodPointer;
   Context : TRPCContext;
begin
   Quit := false;

   WaitEvent(Event2);

   while not Quit do
   begin
      ErrorMessage := 'Unknown Error';
      try
         Debug('IAA Executing');

         if ResultCode <> irReady then
         begin
            Debug('Execute called when ResultCode is not Ready');
         end;

         // look up the method name in the list of methods...
         if Assigned(RPCMethods) then
         begin
            for i := 0 to RPCMethods.Count - 1 do
            begin
               if RPCMethods[i] = ThreadAction then
               begin
                  // call the test method...
                  MethodPointer := TMethodPointer(RPCMethods.Objects[i]);
                  MethodPointer.GetMethod(@@Method);

                  // set up the context for the RPC call
                  Context := TRPCContext.Create(self);
                  try
                     Method(Context);
                  finally
                     Context.Free;
                  end;
               end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品高清在线| 亚洲成人动漫在线观看| 欧美日韩亚州综合| 国产成人午夜精品影院观看视频 | 久久久久久久综合日本| 色哦色哦哦色天天综合| 黄页网站大全一区二区| 一区二区三区在线观看国产| 精品理论电影在线观看| 91福利在线看| 成人av免费网站| 九九精品视频在线看| 亚洲一区二区在线观看视频| 国产欧美va欧美不卡在线| 欧美狂野另类xxxxoooo| 91亚洲精品一区二区乱码| 国产在线国偷精品免费看| 午夜视频在线观看一区| 亚洲精品写真福利| 国产精品久久久久永久免费观看| 日韩免费视频一区| 555www色欧美视频| 欧美日韩你懂得| 91久久奴性调教| 成人av在线一区二区三区| 国产综合久久久久久鬼色| 日本在线不卡视频| 午夜在线成人av| 亚洲影院在线观看| 亚洲另类在线一区| 亚洲三级理论片| 中文字幕在线免费不卡| 国产精品久久久久久久蜜臀| 国产视频一区在线播放| 久久久噜噜噜久久中文字幕色伊伊| 欧美一区二区三区在线观看| 欧美另类久久久品| 精品国产91乱码一区二区三区| 7777精品伊人久久久大香线蕉的| 欧美综合一区二区三区| 在线亚洲免费视频| 欧美日韩一区二区三区在线看| 欧美自拍偷拍午夜视频| 一本一本大道香蕉久在线精品| 91在线观看一区二区| 91亚洲精品久久久蜜桃网站| 99麻豆久久久国产精品免费| 91免费观看视频在线| 色噜噜久久综合| 在线观看区一区二| 欧美日韩成人在线一区| 欧美一级片在线看| 精品播放一区二区| 国产欧美久久久精品影院| 中文字幕在线播放不卡一区| 亚洲日本va在线观看| 亚洲一二三四区| 日本伊人精品一区二区三区观看方式| 另类专区欧美蜜桃臀第一页| 国产一区二区91| 99久久久久久99| 欧美日韩一区二区电影| 日韩欧美在线观看一区二区三区| 精品国产髙清在线看国产毛片| 国产亚洲一区二区三区| 国产精品国产自产拍在线| 亚洲综合久久av| 蜜乳av一区二区三区| 国产寡妇亲子伦一区二区| 99麻豆久久久国产精品免费优播| 欧美三日本三级三级在线播放| 91精品国产色综合久久久蜜香臀| 久久久777精品电影网影网 | 91精品在线麻豆| 精品久久人人做人人爰| 亚洲国产精品高清| 一区二区三区国产| 麻豆一区二区三区| 99精品欧美一区二区三区小说 | 国产成人综合在线| 一本色道久久综合狠狠躁的推荐| 6080亚洲精品一区二区| 久久精品欧美一区二区三区不卡| 亚洲男人的天堂在线aⅴ视频| 日本不卡一区二区| 成人av在线看| 欧美一级片免费看| 成人免费视频在线观看| 美女一区二区在线观看| 99精品欧美一区二区蜜桃免费| 在线不卡中文字幕| 国产精品国产三级国产普通话三级 | 欧美一卡二卡三卡| 亚洲国产电影在线观看| 日韩高清不卡一区| www.亚洲精品| 26uuu国产一区二区三区| 亚洲一区二区三区四区的| 国产精品亚洲第一| 在线不卡免费欧美| 亚洲色图欧洲色图婷婷| 狠狠色丁香婷婷综合久久片| 欧美优质美女网站| 国产精品电影一区二区| 精彩视频一区二区| 91精品国产综合久久久久久| 亚洲欧美电影院| 国产98色在线|日韩| 91麻豆精品久久久久蜜臀| 亚洲特级片在线| 国产jizzjizz一区二区| 精品噜噜噜噜久久久久久久久试看 | 91精品国产综合久久久蜜臀粉嫩| 亚洲色图在线播放| 成人开心网精品视频| 2020国产成人综合网| 青青草成人在线观看| 欧美日韩性生活| 一个色妞综合视频在线观看| jiyouzz国产精品久久| 久久精品视频免费观看| 狠狠色综合日日| 日韩欧美在线影院| 免播放器亚洲一区| 制服丝袜国产精品| 肉色丝袜一区二区| 欧美日韩国产综合一区二区| 亚洲精品免费视频| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 国产激情一区二区三区桃花岛亚洲| 这里只有精品99re| 青青草97国产精品免费观看无弹窗版| 欧美在线看片a免费观看| 一区二区三区中文在线观看| 91在线视频播放地址| 亚洲视频一区在线观看| 99re成人精品视频| 亚洲三级久久久| 91久久精品午夜一区二区| 亚洲综合色噜噜狠狠| 欧美在线视频全部完| 亚洲成av人**亚洲成av**| 欧美日韩不卡一区| 日本aⅴ精品一区二区三区| 日韩欧美在线网站| 国产一区二区精品久久99| 久久视频一区二区| 成人精品gif动图一区| 中文字幕日韩欧美一区二区三区| www.亚洲精品| 亚洲一区二区三区中文字幕在线 | 欧美一区二区三区在线看| 日本美女一区二区三区| 日韩精品一区二区三区视频播放 | 国产精品国产a级| av成人老司机| 亚洲综合久久久| 91精品国产色综合久久不卡电影 | 久久久久久久国产精品影院| 成人小视频在线观看| 一级精品视频在线观看宜春院| 欧美日韩免费一区二区三区视频| 免费av网站大全久久| 久久久久久久久久久久久女国产乱 | 91丝袜美女网| 偷窥少妇高潮呻吟av久久免费| 日韩美女天天操| 成人97人人超碰人人99| 亚洲成人资源在线| 久久免费视频色| 91黄色激情网站| 久久99日本精品| 亚洲视频资源在线| 91麻豆精品国产| kk眼镜猥琐国模调教系列一区二区| 亚洲综合无码一区二区| 精品剧情v国产在线观看在线| 成人sese在线| 日韩中文字幕一区二区三区| 国产婷婷精品av在线| 欧美日韩国产综合久久| 国产乱子伦视频一区二区三区 | 成人美女视频在线观看18| 亚洲国产sm捆绑调教视频| 久久久久久综合| 欧美日韩一区成人| 成人黄色软件下载| 日本不卡的三区四区五区| 最新国产成人在线观看| 日韩一区国产二区欧美三区| 91香蕉视频污| 狠狠色综合播放一区二区| 亚洲精品日韩一| 久久久www成人免费毛片麻豆| 在线国产电影不卡| 国产成人一区二区精品非洲| 性欧美疯狂xxxxbbbb| 肉色丝袜一区二区| 亚洲日本成人在线观看| 337p粉嫩大胆色噜噜噜噜亚洲 |