90 lines
3.0 KiB
ObjectPascal
90 lines
3.0 KiB
ObjectPascal
|
|
unit ExtendedFileTransferService_Impl;
|
||
|
|
|
||
|
|
{----------------------------------------------------------------------------}
|
||
|
|
{ This unit was automatically generated by the RemObjects SDK after reading }
|
||
|
|
{ the RODL file associated with this project . }
|
||
|
|
{ }
|
||
|
|
{ This is where you are supposed to code the implementation of your objects. }
|
||
|
|
{----------------------------------------------------------------------------}
|
||
|
|
|
||
|
|
{$I RemObjects.inc}
|
||
|
|
|
||
|
|
{$WARN SYMBOL_PLATFORM OFF}
|
||
|
|
|
||
|
|
interface
|
||
|
|
|
||
|
|
uses
|
||
|
|
{vcl:} Classes, SysUtils,
|
||
|
|
{RemObjects:} uROXMLIntf, uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions,
|
||
|
|
{Required:} uRORemoteDataModule,
|
||
|
|
{Generated:} ExtendedFileTransferLibrary_Intf;
|
||
|
|
|
||
|
|
type
|
||
|
|
{ TExtendedFileTransferService }
|
||
|
|
TExtendedFileTransferService = class(TRORemoteDataModule, IExtendedFileTransferService)
|
||
|
|
private
|
||
|
|
protected
|
||
|
|
{ IExtendedFileTransferService methods }
|
||
|
|
function GetFilesList: FileInfoArray;
|
||
|
|
function DownloadFilePart(const FileName: AnsiString; const PartNo: Integer; const PartSize: Integer): Binary;
|
||
|
|
end;
|
||
|
|
|
||
|
|
implementation
|
||
|
|
|
||
|
|
{$R *.dfm}
|
||
|
|
uses
|
||
|
|
{Generated:} ExtendedFileTransferLibrary_Invk,
|
||
|
|
fServerForm, uROClasses;
|
||
|
|
|
||
|
|
procedure Create_ExtendedFileTransferService(out anInstance : IUnknown);
|
||
|
|
begin
|
||
|
|
anInstance := TExtendedFileTransferService.Create(nil);
|
||
|
|
end;
|
||
|
|
|
||
|
|
{ ExtendedFileTransferService }
|
||
|
|
function TExtendedFileTransferService.GetFilesList: FileInfoArray;
|
||
|
|
var
|
||
|
|
sr: TSearchRec;
|
||
|
|
fi: TFileInfo;
|
||
|
|
begin
|
||
|
|
Result := FileInfoArray.Create;
|
||
|
|
if FindFirst(ServerForm.SharedFolder + '\*.*', faReadOnly + faArchive, sr) = 0 then begin
|
||
|
|
repeat
|
||
|
|
fi := Result.Add;
|
||
|
|
fi.FileName := {$IFDEF UNICODE}WideStringToAnsiString{$ENDIF}(ExtractFileName(sr.Name));
|
||
|
|
fi.TypeName := {$IFDEF UNICODE}WideStringToAnsiString{$ENDIF}(ExtractFileExt(sr.Name));
|
||
|
|
fi.Size := sr.Size;
|
||
|
|
until FindNext(sr) <> 0;
|
||
|
|
FindClose(sr);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TExtendedFileTransferService.DownloadFilePart(const FileName: AnsiString; const PartNo: Integer; const PartSize: Integer): Binary;
|
||
|
|
var
|
||
|
|
fs: TFileStream;
|
||
|
|
lRemains, lOffset, lBufferSize: integer;
|
||
|
|
begin
|
||
|
|
Result := Binary.Create;
|
||
|
|
fs := TFileStream.Create(ServerForm.SharedFolder + '\' +
|
||
|
|
{$IFDEF UNICODE}AnsiStringToWideString{$ENDIF}(FileName),
|
||
|
|
fmOpenRead + fmShareDenyWrite);
|
||
|
|
lOffset := PartSize*(PartNo-1);
|
||
|
|
lRemains := fs.Size - lOffset;
|
||
|
|
if lRemains > PartSize then lBufferSize := PartSize else lBufferSize := lRemains;
|
||
|
|
fs.Seek(lOffset, soFromBeginning);
|
||
|
|
Result.CopyFrom(fs, lBufferSize);
|
||
|
|
fs.Free;
|
||
|
|
end;
|
||
|
|
|
||
|
|
var
|
||
|
|
fClassFactory: IROClassFactory;
|
||
|
|
initialization
|
||
|
|
fClassFactory := TROClassFactory.Create('ExtendedFileTransferService', Create_ExtendedFileTransferService, TExtendedFileTransferService_Invoker);
|
||
|
|
// RegisterForZeroConf(fClassFactory,'_ExtendedFileTransferService_rosdk._tcp.');
|
||
|
|
|
||
|
|
finalization
|
||
|
|
UnRegisterClassFactory(fClassFactory);
|
||
|
|
fClassFactory := nil;
|
||
|
|
|
||
|
|
end.
|