Varela_PuntosVenta/Source/Servidor/Services/TransferenciaFicheros/srvTransfereciaFicheros_Impl.pas

105 lines
3.4 KiB
ObjectPascal

unit srvTransfereciaFicheros_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. }
{----------------------------------------------------------------------------}
interface
uses
{vcl:} Classes, SysUtils,
{RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions,
{Required:} uRORemoteDataModule,
{Used RODLs:} DataAbstract3_Intf,
{Generated:} VARELA_Intf;
type
{ TsrvTransfereciaFicheros }
TsrvTransfereciaFicheros = class(TRORemoteDataModule, IsrvTransfereciaFicheros)
private
function getFileDirectory: String;
protected
{ IsrvTransfereciaFicheros methods }
procedure DownloadSequence(const Filename: String; const Sequence: Integer; out Filedata: Binary; out Filesize: Int64);
procedure UploadChunk(const IsFirst: Boolean; const Filename: String; const Filedata: Binary);
procedure UploadFinished(const Filename: String; const Filesize: Int64);
end;
implementation
{$R *.dfm}
uses
{Generated:} VARELA_Invk, uDataModuleServer,
JclFileUtils;
procedure Create_srvTransfereciaFicheros(out anInstance : IUnknown);
begin
anInstance := TsrvTransfereciaFicheros.Create(NIL);
end;
{ srvTransfereciaFicheros }
procedure TsrvTransfereciaFicheros.DownloadSequence(const Filename: String; const Sequence: Integer; out Filedata: Binary; out Filesize: Int64);
const
Block: Integer = 65536;
var
Position: Int64;
MemStream: TFileStream;
localfilename:String;
begin
fileData := Binary.Create;
localfilename:=getFileDirectory+filename;
if not FileExists(localfilename) then exit;
MemStream:=TFileStream.Create(localfilename,fmopenRead);
try
FileSize := MemStream.Size;
Position := Block * (Sequence - 1);
if Position <= FileSize then begin
MemStream.Position := Position;
if Position + Block > FileSize then
fileData.CopyFrom(MemStream, FileSize - Position)
else
fileData.CopyFrom(MemStream, Block);
end;
finally
MemStream.Free;
end;
end;
function TsrvTransfereciaFicheros.getFileDirectory: String;
begin
result := PathAddSeparator(dmServer.FDirEntrada);
end;
procedure TsrvTransfereciaFicheros.UploadChunk(const IsFirst: Boolean; const Filename: String; const Filedata: Binary);
var
NewFile: TFileStream;
localfilename:String;
begin
Localfilename:= GetFileDirectory + Filename;
if isfirst and Fileexists(localfilename) then DeleteFile(localfilename);
if FileExists(localfilename)
then NewFile := TFileStream.Create(localfilename,fmOpenReadWrite)
else NewFile := TFileStream.Create(localfilename,fmCreate);
try
NewFile.Seek(0,soFromEnd);
filedata.SaveToStream(NewFile);
finally
NewFile.Free;
end;
end;
procedure TsrvTransfereciaFicheros.UploadFinished(const Filename: String; const Filesize: Int64);
begin
// (EventRepository as IFileEvents_Writer).OnNewFileAvailable(Session.SessionID, Filename, Filesize);
end;
initialization
TROClassFactory.Create('srvTransfereciaFicheros', Create_srvTransfereciaFicheros, TsrvTransfereciaFicheros_Invoker);
finalization
end.