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 | |
---|
1 | unit UNetworkCommon;
|
---|
2 |
|
---|
3 | {$mode delphi}
|
---|
4 |
|
---|
5 | interface
|
---|
6 |
|
---|
7 | uses
|
---|
8 | Classes, SysUtils;
|
---|
9 |
|
---|
10 | procedure StreamAppend(Stream: TStream; SourceStream: TStream);
|
---|
11 | procedure StreamRemoveRead(Stream: TMemoryStream);
|
---|
12 |
|
---|
13 | implementation
|
---|
14 |
|
---|
15 | procedure StreamAppend(Stream: TStream; SourceStream: TStream);
|
---|
16 | var
|
---|
17 | Buffer: array of Byte;
|
---|
18 | ReadCount: Integer;
|
---|
19 | Base: Integer;
|
---|
20 | const
|
---|
21 | ChunkSize = 4096;
|
---|
22 | begin
|
---|
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;
|
---|
36 | end;
|
---|
37 |
|
---|
38 | procedure StreamRemoveRead(Stream: TMemoryStream);
|
---|
39 | begin
|
---|
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);
|
---|
43 | end;
|
---|
44 |
|
---|
45 | end.
|
---|
46 |
|
---|
Note:
See
TracBrowser
for help on using the repository browser.