_i_explorer.pas

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.





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