var
_FileName:
WideString
;
_FileSize:
Cardinal
;
_Client:
LongInt
;
_BufSize:
Integer
;
_Buffer:
PChar
;
_Dummy:
Cardinal
;
begin
if
_Receiver
then
begin
try
_BufSize:=Socket
.
ReceiveLength;
_Buffer:=GetMemory(_BufSize);
try
_BufSize:=Socket
.
ReceiveBuf(_Buffer^, _BufSize);
WriteFile(FPipeWrite, _Buffer^, _BufSize, _Dummy,
nil
);
finally
FreeMemory(_Buffer);
end
;
repeat
_BufSize:=GetFileSize(FPipeRead,
nil
);
if
_BufSize =
0
then
Break;
if
FDataLen=
0
then
begin
if
_BufSize<SizeOf(DWORD)
then
Break;
ReadFile(FPipeRead, FDataLen, SizeOf(DWORD), _Dummy,
nil
);
FDataRead:=
0
;
FFileStream:=TFileStream
.
Create(_Out+_Tmp+
'fc.zip'
, fmCreate);
end
else
begin
_Buffer:=GetMemory(_BufSize);
try
ReadFile(FPipeRead, _Buffer^, _BufSize, _Dummy,
nil
);
FFileStream
.
Write
(_Buffer^, _BufSize);
Inc(FDataRead, _BufSize);
finally
FreeMemory(_Buffer);
end
;
end
;
until
FDataRead = FDataLen;
if
FDataRead = FDataLen
then
begin
FFileStream
.
Free;
FDataLen:=
0
;
Jornal(
'ok'
,Unassigned,clRed);
_Receiver:=
False
;
end
;
except
on
e:Exception
do
begin
_Receiver:=
False
;
FFileStream
.
Free;
FDataLen:=
0
;
Socket
.
Destroy;
Jornal(e
.
Message+
' : '
+e
.
ClassName,Unassigned,clRed);
end
;
end
;