source: trunk/Network/NetworkCommon.pas

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