_uc_com_logo_thread.pas

unit _uc_com_logo_thread;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls, ExtCtrls, FileCtrl, ScktComp, ShellApi;

//------------------



type

  TCOM_ICON_LOGO_THREAD = class(TThread)
   private
    _FCCC         :TClientSocket;
    _WinSkDw      :TWinSocketStream;
    sTempHdr   :string;

    _Icon : TIcon;

    TheMxStream : TMemoryStream;

     _ServerANYHOWHeader : string;

    _HTTP_HEADER_DWL : String;

    _HTTPHeaderDataFileIsOK  : Boolean;

    procedure OnDwTerminated(Sender: TObject);

  protected
    procedure Execute; override;

  public
    
     _sComPathSekToICON,_sHost : string;
     _iPort:Integer;
     _image:TImage;
    constructor Create;
    destructor Destroy; override;

  end;










implementation

uses _uc_refs_vars, _uc_refs_consts, _uc_funcs, Unit1, _uc_ip_codecs;



//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
constructor TCOM_ICON_LOGO_THREAD.Create;
begin

inherited Create(True); // Intially suspended

FreeOnTerminate   := True;
OnTerminate       := OnDwTerminated;
_FCCC             := TClientSocket.Create(nil);
_FCCC.ClientType  := ctBlocking;
TheMxStream    := TMemoryStream.Create;


end;

//------------------------------------------------------------------------------
destructor TCOM_ICON_LOGO_THREAD.Destroy;
begin

  TheMxStream.Free;
  _FCCC.Free;
  inherited;
end;


//------------------------------------------------------------------------------
procedure TCOM_ICON_LOGO_THREAD.OnDwTerminated(Sender: TObject);
begin

if (_THE_EXOSEE_APPLICATION_IS_TERMINATED) then exit;


//_DoDebugLOG('__OnDwTerminated____TCOM_ICON_LOGO_THREAD_HTTP_HEADER_DWL:'+ret+_HTTP_HEADER_DWL);
//_DoDebugLOG('_ServerANYHOWHeader:'+ret+_ServerANYHOWHeader+ret);


//exit;


 if (TheMxStream.Size<20000)and(TheMxStream.Size>2000)then  // A MUST 48x48 32/BITS (9662).   2kb<>10kb
 begin
 try

     _Icon:= TIcon.Create;
     try

     TheMxStream.Position:=0;
     _Icon.LoadFromStream(TheMxStream);
     _image.Picture.Graphic:=_Icon;
     Application.ProcessMessages;
     finally _Icon.Free; end;

 Except end;
 end;



end;


//------------------------------------------------------------------------------
procedure TCOM_ICON_LOGO_THREAD.Execute;
Const _c_ICON_MAX_BUFFER_SIZE = 1024;
var
pBuFF: PByteArray;
BufSize, _RcvL: Integer;
p1: Integer;
LeftHttpDataSIZE : Int64;
begin




_RcvL:=0;
_HTTPHeaderDataFileIsOK   :=false;



try //----------------t1

// set icon path
_sComPathSekToICON:=StringReplace(_sComPathSekToICON,_C_EXOSEE_WEB_TEK_FILE,'_com_logo.ico',[]);



      _FCCC.Host_name := _sHost;   // domain sek
      _FCCC.Port      := _iPort;
      _FCCC.Active    := True;

          if _FCCC.Socket.Connected then
          begin




              _WinSkDw := TWinSocketStream.Create(_FCCC.Socket, 8000);
              try ////----------------t2

              _HTTP_HEADER_DWL:= 'GET '+_sComPathSekToICON+' HTTP/1.0'+ret+
                                 'Accept: */*'+ret+
                                 'Accept-Language: en'+ret+
                                 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'+ret+
                                 'Host: '+_sHost+ret+
                                 'Connection: Close'+ret+
                                 ret;


              //_FCCC.Socket.SendText(_HTTP_HEADER_DWL);       // send header
              _WinSkDw.Write(_HTTP_HEADER_DWL[1],length(_HTTP_HEADER_DWL));
             
              if _WinSkDw.WaitForData(10000) then
              begin
              sTempHdr:=_FCCC.Socket.ReceiveText;         // sTempHdr = all 1st time grabbed (header+data)
              p1:=pos(ret+ret,sTempHdr);

               if (copy(sTempHdr,1,4)='HTTP')and(p1>0) then
               begin
               _ServerANYHOWHeader:=sTempHdr;//copy(sTempHdr,1,p1);  // save header any how !! for errors ...etc

                    // trunck sTempHdr   >> removes server header leting only primary included data
                    Delete(sTempHdr,1,p1+3);  //  --....+++
                    LeftHttpDataSIZE:=length(sTempHdr);

                    // write primary data
                    if (LeftHttpDataSIZE>0) then // bug fix !!! only if data <>''
                    TheMxStream.Write(sTempHdr[1], LeftHttpDataSIZE);

                    _HTTPHeaderDataFileIsOK:=true;

               end;

              end;





                      if (_HTTPHeaderDataFileIsOK) then   // go only if header is ok !!
                      begin

                      //__________here we go ....._______________________

                      BufSize := _c_ICON_MAX_BUFFER_SIZE;

                      GetMem(pBuFF, BufSize);
                      try //------------4


                          while (not Terminated)and(_FCCC.Socket.Connected) do
                          begin

                             if _WinSkDw.WaitForData(5000) then
                             begin
                             _RcvL:=_WinSkDw.Read(pBuFF^,_c_ICON_MAX_BUFFER_SIZE);
                             TheMxStream.Write(pBuFF^, _RcvL);
                             end; // 5 sec data on


                          if (_THE_EXOSEE_APPLICATION_IS_TERMINATED)or(_RcvL=0) then break;

                          end; // end Loop ---------------------------------------------------------------



                      finally FreeMem(pBuFF); end; //------------4  !!!!!!!!!!! no bufSize in param

                      end;  // _HTTPHeaderIsOK end !
                    


              finally
              _FCCC.Socket.Close;
              _WinSkDw.Free;
              end; //----------------t2

          end;




    except end;


end;




end.





../delphi71code/exosee-code-source/uc_com_logo_thread-pas..