NMTime.pas
上传用户:szzdds
上传日期:2013-09-18
资源大小:293k
文件大小:6k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit NMTime;
  2. {$X+}
  3. {$R-}
  4. {$IFDEF VER100}
  5. {$DEFINE NMF3}
  6. {$ENDIF}
  7. {$IFDEF VER110}
  8. {$DEFINE NMF3}
  9. {$ENDIF}
  10. {$IFDEF VER120}
  11. {$DEFINE NMF3}
  12. {$ENDIF}
  13. {$IFDEF VER125}
  14. {$DEFINE NMF3}
  15. {$ENDIF}
  16. interface
  17. uses
  18.    SysUtils, Classes, Forms, Psock, Winsock, NMConst;
  19. {$IFDEF VER110}
  20. {$ObjExportAll On}
  21. {$ENDIF}
  22. {$IFDEF VER120}
  23. {$ObjExportAll On}
  24. {$ENDIF}
  25. {$IFDEF VER125}
  26. {$ObjExportAll On}
  27. {$ENDIF}
  28. //  CompName='TNMTime';
  29. //  Major_Version='4';
  30. //  Minor_Version='02';
  31. //  Date_Version='012798';
  32. type
  33.    TNMTime = class(TPowerSock)
  34.    private
  35.       function GetTimeStr: string;
  36.       function GetTimeInt: longint;
  37.    protected
  38.       { Protected declarations }
  39.    public
  40.       constructor Create(AOwner: TComponent); override;
  41.    published
  42.       property TimeStr: string read GetTimeStr;
  43.       property TimeInt: longint read GetTimeInt;
  44.    end; {_ TNMTime = class(TPowerSock) _}
  45. implementation
  46. constructor TNMTime.Create(AOwner: TComponent);
  47. begin
  48.    inherited create(AOwner);
  49.    Port := 37;
  50.    TimeOut := 500;
  51. end; {_ constructor TNMTime.Create(AOwner: TComponent); _}
  52. function TNMTime.GetTimeStr: string;
  53. var i, ct: integer;
  54.    handled: boolean;
  55.    AStr   : string; 
  56.    j      : double; 
  57. begin
  58.    BeenCanceled := FALSE; {Turn Canceled off}
  59.    if FConnected then {If already connected raise exception}
  60.       raise ESockError.create(sPSk_Cons_msg_Conn);
  61.    Ct := 0;
  62.    repeat
  63.       try
  64.          ResolveRemoteHost; {Resolve the IP address of remote host}
  65.       except
  66.          on E: ESockError do
  67.                if (E.message = sPSk_Cons_msg_host_to) or (E.message = sPSk_Cons_msg_host_Can) then raise;
  68.       end; {_ try _}
  69.       if RemoteAddress.sin_addr.S_addr = 0 then
  70.          if Ct > 0 then
  71.             raise ESockError.create(sPSk_Cons_msg_add_null) {If Resolving failed raise exception}
  72.          else {_ NOT if Ct > 0 then _}
  73.             if not assigned(OnInvalidHost) then
  74.                raise ESockError.create(sPSk_Cons_msg_add_null)
  75.             else {_ NOT if not assigned(OnInvalidHost) then _}
  76.             begin
  77.                Handled := FALSE;
  78.                OnInvalidHost(Handled);
  79.                if not handled then
  80.                   raise ESockError.create(sPSk_Cons_msg_add_null); {If Resolving failed raise exception}
  81.                Ct := Ct + 1;
  82.             end; {_ NOT if not assigned(OnInvalidHost) then _}
  83.    until RemoteAddress.sin_addr.S_addr <> 0;
  84.    StatusMessage(Status_Debug, sPSk_Cons_msg_Conning); {Inform Status}
  85.    RemoteAddress.sin_family := AF_INET; {Make connected true}
  86.    {$R-}
  87.    if Proxy = '' then
  88.       RemoteAddress.sin_port := htons(Port) {If no proxy get port from Port property}
  89.    else {_ NOT if Proxy = '' then _}
  90.       RemoteAddress.sin_port := htons(ProxyPort); {else get port from ProxyPort property}
  91.    {$R+}
  92.    i := SizeOf(RemoteAddress); {i := size of remoteaddress structure}
  93.    {Connect to remote host}
  94.    succeed := FALSE;
  95.    Timedout := FALSE;
  96.    TimerOn;
  97.    WinSock.Connect(ThisSocket, RemoteAddress, i);
  98.    repeat
  99.       application.processmessages; {Process messages till response received}
  100.    until Succeed or TimedOut; {Responce received,  Timed out or Cancelled exits loop}
  101.    TimerOff;
  102.    if TimedOut then raise Exception.create(Cons_Msg_ConnectionTimedOut);
  103.    try
  104.       while not DataAvailable do Application.processmessages;
  105.       AStr := read (0);
  106.    finally
  107.       Disconnect;
  108.    end; {_ try _}
  109.    j := 0;
  110.    if Length(Astr) > 0 then
  111.    begin
  112.       for i := 1 to length(Astr) do
  113.       begin
  114.          j := j * 256;
  115.          j := j + ord(Astr[i]);
  116.       end; {_ for i := 1 to length(Astr) do _}
  117.    end; {_ if Length(Astr) > 0 then _}
  118.    j := (j / (24 * 60 * 60));
  119.    result := TimeToStr(TDateTime(j));
  120. end; {_ function TNMTime.GetTimeStr: string; _}
  121. function TNMTime.GetTimeInt: longint;
  122. var i, ct: integer;
  123.    handled: boolean;
  124.    AStr   : string; 
  125.    j      : longint;
  126. begin
  127.    BeenCanceled := FALSE; {Turn Canceled off}
  128.    if FConnected then {If already connected raise exception}
  129.       raise ESockError.create(sPSk_Cons_msg_Conn);
  130.    Ct := 0;
  131.    repeat
  132.       try
  133.          ResolveRemoteHost; {Resolve the IP address of remote host}
  134.       except
  135.          on E: ESockError do
  136.                if (E.message = sPSk_Cons_msg_host_to) or (E.message = sPSk_Cons_msg_host_Can) then raise;
  137.       end; {_ try _}
  138.       if RemoteAddress.sin_addr.S_addr = 0 then
  139.          if Ct > 0 then
  140.             raise ESockError.create(sPSk_Cons_msg_add_null)
  141.             {If Resolving failed raise exception}
  142.          else {_ NOT if Ct > 0 then _}
  143.             if not assigned(OnInvalidHost) then
  144.                raise ESockError.create(sPSk_Cons_msg_add_null)
  145.             else {_ NOT if not assigned(OnInvalidHost) then _}
  146.             begin
  147.                Handled := FALSE;
  148.                OnInvalidHost(Handled);
  149.                if not handled then
  150.                   raise ESockError.create(sPSk_Cons_msg_add_null); {If Resolving failed raise exception}
  151.                Ct := Ct + 1;
  152.             end; {_ NOT if not assigned(OnInvalidHost) then _}
  153.    until RemoteAddress.sin_addr.S_addr <> 0;
  154.    StatusMessage(Status_Debug, sPSk_Cons_msg_Conning); {Inform Status}
  155.    RemoteAddress.sin_family := AF_INET; {Make connected true}
  156.    {$R-}
  157.    if Proxy = '' then
  158.       RemoteAddress.sin_port := htons(Port) {If no proxy get port from Port property}
  159.    else {_ NOT if Proxy = '' then _}
  160.       RemoteAddress.sin_port := htons(ProxyPort); {else get port from ProxyPort property}
  161.    {$R+}
  162.    i := SizeOf(RemoteAddress); {i := size of remoteaddress structure}
  163.    {Connect to remote host}
  164.    succeed := FALSE;
  165.    Timedout := FALSE;
  166.    TimerOn;
  167.    WinSock.Connect(ThisSocket, RemoteAddress, i);
  168.    repeat
  169.       application.processmessages; {Process messages till response received}
  170.    until Succeed or TimedOut; {Responce received,  Timed out or Cancelled exits loop}
  171.    TimerOff;
  172.    if TimedOut then raise Exception.create(Cons_Msg_ConnectionTimedOut);
  173.    try
  174.       while not DataAvailable do Application.processmessages;
  175.       AStr := read (0);
  176.    finally
  177.       Disconnect;
  178.    end; {_ try _}
  179.    j := 0;
  180.    if Length(Astr) > 0 then
  181.    begin
  182.       for i := 1 to length(Astr) do
  183.       begin
  184.          j := j * 256;
  185.          j := j + ord(Astr[i]);
  186.       end; {_ for i := 1 to length(Astr) do _}
  187.    end; {_ if Length(Astr) > 0 then _}
  188.    result := j;
  189. end; {_ function TNMTime.GetTimeInt: longint; _}
  190. end.