Componentes.Terceros.RemObj.../internal/6.0.43.801/1/RemObjects Samples/RemObjects SDK for Delphi/Extended File Transfer/ExtendedFileTransferService_Impl.pas

90 lines
3.0 KiB
ObjectPascal
Raw Permalink Normal View History

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.