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.
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.