source: tags/1.3.0/Network/UNetworkCommon.pas

Last change on this file was 365, checked in by chronos, 3 years ago
  • Modified: Improved unfinished network client data handling.
File size: 1018 bytes
Line 
1unit UNetworkCommon;
2
3{$mode delphi}
4
5interface
6
7uses
8 Classes, SysUtils;
9
10procedure StreamAppend(Stream: TStream; SourceStream: TStream);
11procedure StreamRemoveRead(Stream: TMemoryStream);
12
13implementation
14
15procedure StreamAppend(Stream: TStream; SourceStream: TStream);
16var
17 Buffer: array of Byte;
18 ReadCount: Integer;
19 Base: Integer;
20const
21 ChunkSize = 4096;
22begin
23 SetLength(Buffer, 0);
24 Base := 0;
25 repeat
26 SetLength(Buffer, Length(Buffer) + ChunkSize);
27 ReadCount := SourceStream.Read(Buffer[Base], ChunkSize);
28 Inc(Base, ReadCount);
29 SetLength(Buffer, Base);
30 until ReadCount < ChunkSize;
31
32 if Length(Buffer) > 0 then begin
33 Stream.Position := Stream.Size;
34 Stream.Write(Buffer[0], Length(Buffer));
35 end;
36end;
37
38procedure StreamRemoveRead(Stream: TMemoryStream);
39begin
40 // Remove already read data from start of memory stream
41 Move(PByte(Stream.Memory + Stream.Position)^, Stream.Memory^, Stream.Size - Stream.Position);
42 Stream.SetSize(Stream.Size - Stream.Position);
43end;
44
45end.
46
Note: See TracBrowser for help on using the repository browser.