Statistics
| Branch: | Tag: | Revision:

root / UPacket.pas

History | View | Annotate | Download (1.9 kB)

1 162:ac18d757e2cd aksdb
(*
2 162:ac18d757e2cd aksdb
 * CDDL HEADER START
3 162:ac18d757e2cd aksdb
 *
4 162:ac18d757e2cd aksdb
 * The contents of this file are subject to the terms of the
5 162:ac18d757e2cd aksdb
 * Common Development and Distribution License, Version 1.0 only
6 162:ac18d757e2cd aksdb
 * (the "License").  You may not use this file except in compliance
7 162:ac18d757e2cd aksdb
 * with the License.
8 162:ac18d757e2cd aksdb
 *
9 162:ac18d757e2cd aksdb
 * You can obtain a copy of the license at
10 162:ac18d757e2cd aksdb
 * http://www.opensource.org/licenses/cddl1.php.
11 162:ac18d757e2cd aksdb
 * See the License for the specific language governing permissions
12 162:ac18d757e2cd aksdb
 * and limitations under the License.
13 162:ac18d757e2cd aksdb
 *
14 162:ac18d757e2cd aksdb
 * When distributing Covered Code, include this CDDL HEADER in each
15 162:ac18d757e2cd aksdb
 * file and include the License file at
16 162:ac18d757e2cd aksdb
 * http://www.opensource.org/licenses/cddl1.php.  If applicable,
17 162:ac18d757e2cd aksdb
 * add the following below this CDDL HEADER, with the fields enclosed
18 162:ac18d757e2cd aksdb
 * by brackets "[]" replaced with your own identifying * information:
19 162:ac18d757e2cd aksdb
 *      Portions Copyright [yyyy] [name of copyright owner]
20 162:ac18d757e2cd aksdb
 *
21 162:ac18d757e2cd aksdb
 * CDDL HEADER END
22 162:ac18d757e2cd aksdb
 *
23 162:ac18d757e2cd aksdb
 *
24 162:ac18d757e2cd aksdb
 *      Portions Copyright 2007 Andreas Schneider
25 162:ac18d757e2cd aksdb
 *)
26 162:ac18d757e2cd aksdb
unit UPacket;
27 162:ac18d757e2cd aksdb
28 162:ac18d757e2cd aksdb
interface
29 162:ac18d757e2cd aksdb
30 162:ac18d757e2cd aksdb
uses
31 162:ac18d757e2cd aksdb
  Classes, UEnhancedMemoryStream;
32 162:ac18d757e2cd aksdb
33 162:ac18d757e2cd aksdb
type
34 162:ac18d757e2cd aksdb
  TPacket = class(TObject)
35 162:ac18d757e2cd aksdb
    constructor Create(APacketID: Byte; ALength: Cardinal);
36 162:ac18d757e2cd aksdb
    destructor Destroy; override;
37 162:ac18d757e2cd aksdb
  protected
38 162:ac18d757e2cd aksdb
    FStream: TEnhancedMemoryStream;
39 162:ac18d757e2cd aksdb
    FPacketID: Byte;
40 162:ac18d757e2cd aksdb
    FLength: Cardinal;
41 162:ac18d757e2cd aksdb
    function GetStream: TEnhancedMemoryStream;
42 162:ac18d757e2cd aksdb
  published
43 162:ac18d757e2cd aksdb
    property Stream: TEnhancedMemoryStream read GetStream;
44 162:ac18d757e2cd aksdb
    property PacketID: Byte read FPacketID;
45 162:ac18d757e2cd aksdb
    property PacketLength: Cardinal read FLength;
46 162:ac18d757e2cd aksdb
  end;
47 162:ac18d757e2cd aksdb
48 162:ac18d757e2cd aksdb
implementation
49 162:ac18d757e2cd aksdb
50 162:ac18d757e2cd aksdb
constructor TPacket.Create(APacketID: Byte; ALength: Cardinal);
51 162:ac18d757e2cd aksdb
begin
52 162:ac18d757e2cd aksdb
  FStream := TEnhancedMemoryStream.Create;
53 162:ac18d757e2cd aksdb
  FPacketID := APacketID;
54 162:ac18d757e2cd aksdb
  FLength := ALength;
55 162:ac18d757e2cd aksdb
  FStream.WriteByte(FPacketID);
56 162:ac18d757e2cd aksdb
  if FLength = 0 then
57 162:ac18d757e2cd aksdb
    FStream.WriteCardinal(0);
58 162:ac18d757e2cd aksdb
end;
59 162:ac18d757e2cd aksdb
60 162:ac18d757e2cd aksdb
destructor TPacket.Destroy;
61 162:ac18d757e2cd aksdb
begin
62 162:ac18d757e2cd aksdb
  FStream.Free;
63 162:ac18d757e2cd aksdb
  inherited;
64 162:ac18d757e2cd aksdb
end;
65 162:ac18d757e2cd aksdb
66 162:ac18d757e2cd aksdb
function TPacket.GetStream: TEnhancedMemoryStream;
67 162:ac18d757e2cd aksdb
begin
68 162:ac18d757e2cd aksdb
  if FLength = 0 then
69 162:ac18d757e2cd aksdb
  begin
70 162:ac18d757e2cd aksdb
    FStream.Position := 1;
71 162:ac18d757e2cd aksdb
    FStream.WriteCardinal(FStream.Size);
72 162:ac18d757e2cd aksdb
  end;
73 162:ac18d757e2cd aksdb
  FStream.Position := 0;
74 162:ac18d757e2cd aksdb
  Result := FStream;
75 162:ac18d757e2cd aksdb
end;
76 162:ac18d757e2cd aksdb
77 162:ac18d757e2cd aksdb
end.