unit _i_explorer;
interface
uses
SysUtils, forms, Classes,ScktComp,comctrls;
type
T_i_explorer_THREAD = class(TThread)
private
FCCC :TClientSocket;
K_cpu_kk :Boolean;
_sDTS :string;
_statCode :byte;
_size,_Readen :integer;
procedure _init_Bb_rek_ok;
procedure _init_rek_Saza;
procedure _init_rek_process;
protected
procedure Execute; override;
procedure On_i_explorer_thread_terminated(Sender: TObject);
public
_XpUzoPP :string;
_XpNode :TTreeNode;
constructor Create;
destructor Destroy; override;
end;
implementation
uses unit1,_uc_funcs,_i_do_exploration,_uc_refs_consts,_uc_refs_vars,_uc_crypto,_uc_GuiLanG;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
constructor T_i_explorer_THREAD.Create;
begin
inherited Create(True); // Intially suspended
FreeOnTerminate := True;
OnTerminate := On_i_explorer_thread_terminated;
FCCC := TClientSocket.Create(Application);
FCCC.ClientType := ctBlocking;
end;
//------------------------------------------------------------------------------
destructor T_i_explorer_THREAD.Destroy;
begin
FCCC.Free;
inherited;
end;
//------------------------------------------------------------------------------
procedure T_i_explorer_THREAD._init_Bb_rek_ok;
begin
_FXOC_MAIN.xplorProgresser.Visible:=true;
end;
//------------------------------------------------------------------------------
procedure T_i_explorer_THREAD._init_rek_Saza;
begin
_FXOC_MAIN.xplorProgresser.Position:=0;
_FXOC_MAIN.xplorProgresser.Max:=_size;
end;
//------------------------------------------------------------------------------
procedure T_i_explorer_THREAD._init_rek_process;
begin
_FXOC_MAIN.xplorProgresser.Position:=_Readen;
_FXOC_MAIN.explorStatPath.Caption:=_percentyV2(_Readen,_size);
end;
//------------------------------------------------------------------------------
procedure T_i_explorer_THREAD.On_i_explorer_thread_terminated(Sender: TObject);
begin
_FXOC_MAIN.xplorProgresser.Visible:=false;
//TLogger.Log('On_i_explorer_terminated:'+IntToStr(_statCode)+ret+_sDTS);
//dec(_ACTIVE_THREADS_COUNT);
//_log('xp_data/'+_sDTS,0);
case _statCode of // add user + reason
// 11 : _LoG('sDD11',1,false); // ixped_but_1NotInisDDkrK/
12 : _FXOC_MAIN.TheLOGGER.Log(___ccc__0099__RemoteXtraNotSet,1);// _LoG(_Cc_sRemoteXtraFolderNotSet,1,_V_AUTO_SHOW_LOG); //
20 : begin
_XpNode._EXO_NODE_DATA_STOCK:=_sDTS; // xp data OK
if _XpNode.Selected then _go_xpLorEr_ShowA_node(_XpNode);
end;
//9 : TLogger.Log('_ErrStr:'+_ErrStr);
end;
end;
//------------------------------------------------------------------------------
procedure T_i_explorer_THREAD.Execute;
var
sk: TWinSocketStream;
SIZIN,BufSize, rcv: Longint; //no need ont64 !!
PBuf: PChar;//PByteArray;
s:string;
xx:TMemoryStream;
begin
//inc(_ACTIVE_THREADS_COUNT);
_Readen:=0;
_size :=0;
try //----------------t1
//TLogger.Log('_XpUzoPP('+_XpUzoPP+')');
FCCC.Host__ip := _XpUzoPP; // 11.11.11.11
FCCC.Port := _C_EXOSEE_MASTER_SERVER_PORT;
FCCC.Active := True;
sk := TWinSocketStream.Create(FCCC.Socket, 20000);
try ////----------------t2
FCCC.Socket.SendText(TCrypto._BarzaToon(_EXO_iEXPLORER));
if sk.WaitForData(10000) then // wait 10 sec
begin
s:=FCCC.Socket.ReceiveText;
if (s[2]='B') and (s[4]='b') then // explorer_signal given ... then go ....
begin
Synchronize(_init_Bb_rek_ok);
s:=(TCrypto._BarzaToon(
'<I'+_VV_LOCAL_USER_PC_ID+'I>'+
'<N'+_XpNode._EXO_NODE_PATH_NB+'N>'+ // path number
'<P'+_XpNode._EXO_NODE_PATH_TX+'P>'+ // path
'<T'+_XpNode._EXO_NODE_XP_TYPE+'T>')); // type ( pub/priv/xtra
//TLogger.Log('sunder('+TCrypto._SimSim(s)+')');
sk.Write(s[1], Length(s)); // Send request
sk.WaitForData(10000);// then // wait
begin
sk.Read(SIZIN, SizeOf(SIZIN)); // read size offseted !!!
_size:=SIZIN;
Synchronize(_init_rek_Saza);
if SIZIN < 512 then BufSize := SIZIN else BufSize := 512;
xx:=TMemoryStream.Create;
GetMem(PBuf, BufSize);
try //----------------t4
while (SIZIN >0) and (FCCC.Socket.Connected) do // (not _cc_kk)
begin
if SIZIN > BufSize then rcv := BufSize else rcv := SIZIN;
if sk.WaitForData(10000) then
begin
rcv := sk.Read(PBuf^, rcv);
xx.Write(PBuf^, rcv);
Dec(SIZIN, rcv);
inc(_Readen,rcv);
end;
Synchronize(_init_rek_process);
if rcv=0 then K_cpu_kk:=true;
if (K_cpu_kk or _THE_EXOSEE_APPLICATION_IS_TERMINATED) then break;
end;
finally
FreeMem(PBuf);
xx.Position:=0;
SetLength(_sDTS,xx.Size);
xx.Read(_sDTS[1],xx.Size);
//xx.Position:=0;
//xx.SaveToFile('c:\xx.txt');
xx.Free;
end;
end;//-777 control
//_log(_sDTS,0);
case _sDTS[1] of
'<' : _statCode :=20; // is ok data is with
'1' : _statCode :=11; //1NotInisDDkrK
'2' : _statCode :=12; //1NotInisDDkrK
end;
//_log(sep+ret+sDTS+ret+'>sDTS>'+inttostr(length(sDTS)),0);
// end;
end
else _statCode:=0;
end
finally
FCCC.Socket.Close;
sk.Free;
end; //----------------t2 FCCC.Socket.Close;
except
(*
on E: Exception do
begin
if not(ExceptObject is EAbort) then
begin
_statCode:=9;
_ErrStr:=e.Message;
end;
end;
*)
end;
end;
//------------------------------------------------------------------------------
end.
interface
uses
SysUtils, forms, Classes,ScktComp,comctrls;
type
T_i_explorer_THREAD = class(TThread)
private
FCCC :TClientSocket;
K_cpu_kk :Boolean;
_sDTS :string;
_statCode :byte;
_size,_Readen :integer;
procedure _init_Bb_rek_ok;
procedure _init_rek_Saza;
procedure _init_rek_process;
protected
procedure Execute; override;
procedure On_i_explorer_thread_terminated(Sender: TObject);
public
_XpUzoPP :string;
_XpNode :TTreeNode;
constructor Create;
destructor Destroy; override;
end;
implementation
uses unit1,_uc_funcs,_i_do_exploration,_uc_refs_consts,_uc_refs_vars,_uc_crypto,_uc_GuiLanG;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
constructor T_i_explorer_THREAD.Create;
begin
inherited Create(True); // Intially suspended
FreeOnTerminate := True;
OnTerminate := On_i_explorer_thread_terminated;
FCCC := TClientSocket.Create(Application);
FCCC.ClientType := ctBlocking;
end;
//------------------------------------------------------------------------------
destructor T_i_explorer_THREAD.Destroy;
begin
FCCC.Free;
inherited;
end;
//------------------------------------------------------------------------------
procedure T_i_explorer_THREAD._init_Bb_rek_ok;
begin
_FXOC_MAIN.xplorProgresser.Visible:=true;
end;
//------------------------------------------------------------------------------
procedure T_i_explorer_THREAD._init_rek_Saza;
begin
_FXOC_MAIN.xplorProgresser.Position:=0;
_FXOC_MAIN.xplorProgresser.Max:=_size;
end;
//------------------------------------------------------------------------------
procedure T_i_explorer_THREAD._init_rek_process;
begin
_FXOC_MAIN.xplorProgresser.Position:=_Readen;
_FXOC_MAIN.explorStatPath.Caption:=_percentyV2(_Readen,_size);
end;
//------------------------------------------------------------------------------
procedure T_i_explorer_THREAD.On_i_explorer_thread_terminated(Sender: TObject);
begin
_FXOC_MAIN.xplorProgresser.Visible:=false;
//TLogger.Log('On_i_explorer_terminated:'+IntToStr(_statCode)+ret+_sDTS);
//dec(_ACTIVE_THREADS_COUNT);
//_log('xp_data/'+_sDTS,0);
case _statCode of // add user + reason
// 11 : _LoG('sDD11',1,false); // ixped_but_1NotInisDDkrK/
12 : _FXOC_MAIN.TheLOGGER.Log(___ccc__0099__RemoteXtraNotSet,1);// _LoG(_Cc_sRemoteXtraFolderNotSet,1,_V_AUTO_SHOW_LOG); //
20 : begin
_XpNode._EXO_NODE_DATA_STOCK:=_sDTS; // xp data OK
if _XpNode.Selected then _go_xpLorEr_ShowA_node(_XpNode);
end;
//9 : TLogger.Log('_ErrStr:'+_ErrStr);
end;
end;
//------------------------------------------------------------------------------
procedure T_i_explorer_THREAD.Execute;
var
sk: TWinSocketStream;
SIZIN,BufSize, rcv: Longint; //no need ont64 !!
PBuf: PChar;//PByteArray;
s:string;
xx:TMemoryStream;
begin
//inc(_ACTIVE_THREADS_COUNT);
_Readen:=0;
_size :=0;
try //----------------t1
//TLogger.Log('_XpUzoPP('+_XpUzoPP+')');
FCCC.Host__ip := _XpUzoPP; // 11.11.11.11
FCCC.Port := _C_EXOSEE_MASTER_SERVER_PORT;
FCCC.Active := True;
sk := TWinSocketStream.Create(FCCC.Socket, 20000);
try ////----------------t2
FCCC.Socket.SendText(TCrypto._BarzaToon(_EXO_iEXPLORER));
if sk.WaitForData(10000) then // wait 10 sec
begin
s:=FCCC.Socket.ReceiveText;
if (s[2]='B') and (s[4]='b') then // explorer_signal given ... then go ....
begin
Synchronize(_init_Bb_rek_ok);
s:=(TCrypto._BarzaToon(
'<I'+_VV_LOCAL_USER_PC_ID+'I>'+
'<N'+_XpNode._EXO_NODE_PATH_NB+'N>'+ // path number
'<P'+_XpNode._EXO_NODE_PATH_TX+'P>'+ // path
'<T'+_XpNode._EXO_NODE_XP_TYPE+'T>')); // type ( pub/priv/xtra
//TLogger.Log('sunder('+TCrypto._SimSim(s)+')');
sk.Write(s[1], Length(s)); // Send request
sk.WaitForData(10000);// then // wait
begin
sk.Read(SIZIN, SizeOf(SIZIN)); // read size offseted !!!
_size:=SIZIN;
Synchronize(_init_rek_Saza);
if SIZIN < 512 then BufSize := SIZIN else BufSize := 512;
xx:=TMemoryStream.Create;
GetMem(PBuf, BufSize);
try //----------------t4
while (SIZIN >0) and (FCCC.Socket.Connected) do // (not _cc_kk)
begin
if SIZIN > BufSize then rcv := BufSize else rcv := SIZIN;
if sk.WaitForData(10000) then
begin
rcv := sk.Read(PBuf^, rcv);
xx.Write(PBuf^, rcv);
Dec(SIZIN, rcv);
inc(_Readen,rcv);
end;
Synchronize(_init_rek_process);
if rcv=0 then K_cpu_kk:=true;
if (K_cpu_kk or _THE_EXOSEE_APPLICATION_IS_TERMINATED) then break;
end;
finally
FreeMem(PBuf);
xx.Position:=0;
SetLength(_sDTS,xx.Size);
xx.Read(_sDTS[1],xx.Size);
//xx.Position:=0;
//xx.SaveToFile('c:\xx.txt');
xx.Free;
end;
end;//-777 control
//_log(_sDTS,0);
case _sDTS[1] of
'<' : _statCode :=20; // is ok data is with
'1' : _statCode :=11; //1NotInisDDkrK
'2' : _statCode :=12; //1NotInisDDkrK
end;
//_log(sep+ret+sDTS+ret+'>sDTS>'+inttostr(length(sDTS)),0);
// end;
end
else _statCode:=0;
end
finally
FCCC.Socket.Close;
sk.Free;
end; //----------------t2 FCCC.Socket.Close;
except
(*
on E: Exception do
begin
if not(ExceptObject is EAbort) then
begin
_statCode:=9;
_ErrStr:=e.Message;
end;
end;
*)
end;
end;
//------------------------------------------------------------------------------
end.