@@ -55,7 +55,7 @@ interface
5555
5656 Optix.Protocol.Client.Handler, Optix.Protocol.Packet, Optix.Protocol.Preflight, Optix.Protocol.Worker.FileTransfer,
5757 Optix.Func.Commands, Optix.Func.Commands.Base, Optix.Actions.ProcessHandler, Optix.Func.Commands.FileSystem,
58- Optix.Func.Commands.Shell;
58+ Optix.Func.Commands.Shell, Optix.FileSystem. Helper , Optix.Func.Commands.ContentReader ;
5959// ---------------------------------------------------------------------------------------------------------------------
6060
6161type
@@ -79,6 +79,7 @@ TOptixSessionHandlerThread = class(TOptixClientHandlerThread)
7979 FTasks : TObjectList<TOptixTask>;
8080 FShellInstances : TObjectList<TProcessHandler>;
8181 FFileTransferOrchestrator : TOptixFileTransferOrchestratorThread;
82+ FContentReaders : TObjectDictionary<TGUID, TContentReader>;
8283
8384 { $IFDEF CLIENT_GUI}
8485 FOnConnectedToServer : TOnConnectedToServer;
@@ -107,6 +108,10 @@ TOptixSessionHandlerThread = class(TOptixClientHandlerThread)
107108 procedure BreakShellInstance (const ACommand : TOptixBreakShellInstance);
108109 procedure StdinToShellInstance (const ACommand : TOptixStdinShellInstance);
109110
111+ procedure BrowseContentReaderPage (const AReaderId : TGUID; const APageNumber : Int64;
112+ const ANewPageSize : UInt64 = 0 ; const AFirstPage : Boolean = False);
113+ procedure CreateAndRegisterNewContentReader (const ACommand : TOptixCommandCreateFileContentReader);
114+
110115 procedure Connected (); override;
111116 procedure Disconnected (); override;
112117 procedure PacketReceived (const ASerializedPacket : ISuperObject); override;
@@ -138,6 +143,7 @@ procedure TOptixSessionHandlerThread.Initialize();
138143 FFileTransferOrchestrator := nil ;
139144 FTasks := TObjectList<TOptixTask>.Create(True);
140145 FShellInstances := TObjectList<TProcessHandler>.Create(True);
146+ FContentReaders := TObjectDictionary<TGUID, TContentReader>.Create([doOwnsValues]);
141147
142148 { $IFDEF CLIENT_GUI}
143149 FOnConnectedToServer := nil ;
@@ -164,6 +170,9 @@ procedure TOptixSessionHandlerThread.Finalize();
164170
165171 if Assigned(FShellInstances) then
166172 FreeAndNil(FShellInstances);
173+
174+ if Assigned(FContentReaders) then
175+ FreeAndNil(FContentReaders);
167176end ;
168177
169178{ TOptixSessionHandlerThread.InitializePreflightRequest }
@@ -349,6 +358,46 @@ procedure TOptixSessionHandlerThread.RegisterNewFileTransfer(const ATransfer : T
349358 FFileTransferOrchestrator.AddTransfer(ATransfer);
350359end ;
351360
361+ { TOptixSessionHandlerThread.BrowseContentReaderPage }
362+ procedure TOptixSessionHandlerThread.BrowseContentReaderPage (const AReaderId : TGUID; const APageNumber : Int64;
363+ const ANewPageSize : UInt64 = 0 ; const AFirstPage : Boolean = False);
364+ begin
365+ var AReader := TContentReader(nil );
366+ if not FContentReaders.TryGetValue(AReaderId, AReader) then
367+ Exit();
368+ // /
369+
370+ if ANewPageSize > 0 then
371+ AReader.PageSize := ANewPageSize;
372+
373+ var ACommandClass : TOptixCommandContentReaderPageClass;
374+
375+ if AFirstPage then
376+ ACommandClass := TOptixCommandContentReaderFirstPage
377+ else
378+ ACommandClass := TOptixCommandContentReaderPage;
379+
380+ // /
381+ AddPacket(ACommandClass.Create(
382+ AReaderId,
383+ AReader,
384+ APageNumber
385+ ));
386+ end ;
387+
388+ { TOptixSessionHandlerThread.CreateAndRegisterNewContentReader }
389+ procedure TOptixSessionHandlerThread.CreateAndRegisterNewContentReader (
390+ const ACommand : TOptixCommandCreateFileContentReader);
391+ begin
392+ var AReader := TContentReader.Create(ACommand.FilePath, ACommand.PageSize);
393+
394+ var AReaderId := TGUID.NewGuid;
395+
396+ FContentReaders.Add(AReaderId, AReader);
397+
398+ BrowseContentReaderPage(AReaderId, 0 , 0 , True);
399+ end ;
400+
352401{ TOptixSessionHandlerThread.Connected }
353402procedure TOptixSessionHandlerThread.Connected ();
354403begin
@@ -405,10 +454,6 @@ procedure TOptixSessionHandlerThread.PacketReceived(const ASerializedPacket : IS
405454
406455 var AClassName := ASerializedPacket.S[' PacketClass' ];
407456
408- var AWindowGUID := TGUID.Empty;
409- if ASerializedPacket.Contains(' FWindowGUID' ) then
410- AWindowGUID := TGUID.Create(ASerializedPacket.S[' FWindowGUID' ]);
411-
412457 var AOptixPacket : TOptixPacket := nil ;
413458 var AHandleMemory : Boolean := True;
414459 try
@@ -420,7 +465,7 @@ procedure TOptixSessionHandlerThread.PacketReceived(const ASerializedPacket : IS
420465 Exit();
421466 // /
422467
423- // Optix Action Command (& Response)
468+ // Optix Action Command (& Response) -----------------------------------------------------------------------------
424469 if AOptixPacket is TOptixCommandAction then begin
425470 TOptixCommandActionResponse(AOptixPacket).DoAction();
426471
@@ -430,16 +475,16 @@ procedure TOptixSessionHandlerThread.PacketReceived(const ASerializedPacket : IS
430475 // /
431476 AddPacket(AOptixPacket);
432477 end ;
433- // Optix Task Command
478+ // Optix Task Command --------------------------------------------------------------------------------------------
434479 end else if AOptixPacket is TOptixCommandTask then begin
435480 var ATask := TOptixCommandTask(AOptixPacket).CreateTask(TOptixCommand(AOptixPacket));
436481
437482 // /
438483 RegisterAndStartNewTask(ATask);
439- // Optix Transfers (Download & Upload)
484+ // Optix Transfers (Download & Upload) ---------------------------------------------------------------------------
440485 end else if AOptixPacket is TOptixCommandTransfer then
441486 RegisterNewFileTransfer(TOptixCommandTransfer(AOptixPacket))
442- // Shell Commands
487+ // Shell Commands ------------------------------------------------------------------------------------------------
443488 else if AOptixPacket is TOptixCommandShell then begin
444489 if AOptixPacket is TOptixStartShellInstance then
445490 RegisterAndStartNewShellInstance(TOptixStartShellInstance(AOptixPacket))
@@ -449,8 +494,19 @@ procedure TOptixSessionHandlerThread.PacketReceived(const ASerializedPacket : IS
449494 BreakShellInstance(TOptixBreakShellInstance(AOptixPacket))
450495 else if AOptixPacket is TOptixStdinShellInstance then
451496 StdinToShellInstance(TOptixStdinShellInstance(AOptixPacket));
452- // Simple Commands
453- end else if AOptixPacket is TOptixSimpleCommand then begin
497+ // Content Reader Commands ---------------------------------------------------------------------------------------
498+ end else if AOptixPacket is TOptixCommandCreateFileContentReader then
499+ CreateAndRegisterNewContentReader(TOptixCommandCreateFileContentReader(AOptixPacket))
500+ else if AOptixPacket is TOptixCommandCloseContentReader then
501+ FContentReaders.Remove(AOptixPacket.WindowGUID)
502+ else if AOptixPacket is TOptixCommandBrowseContentReader then
503+ BrowseContentReaderPage(
504+ AOptixPacket.WindowGUID,
505+ TOptixCommandBrowseContentReader(AOptixPacket).PageNumber,
506+ TOptixCommandBrowseContentReader(AOptixPacket).PageSize
507+ )
508+ // Simple Commands -----------------------------------------------------------------------------------------------
509+ else if AOptixPacket is TOptixSimpleCommand then begin
454510 AHandleMemory := False;
455511 // /
456512
0 commit comments