source: CoolStreaming/Demo/VarBlockSerializer/UMainForm.pas

Last change on this file was 572, checked in by chronos, 39 hours ago
File size: 9.0 KB
Line 
1unit UMainForm;
2
3interface
4
5uses
6 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
7 Spin, VarBlockSerializer, ComCtrls, ExtCtrls;
8
9type
10
11 { TMainForm }
12
13 TMainForm = class(TForm)
14 published
15 ButtonEncodeIndexed: TButton;
16 ButtonDecodeIndexed: TButton;
17 ButtonDecodeRaw: TButton;
18 ButtonDecodeString: TButton;
19 ButtonEncodeRaw: TButton;
20 ButtonEncodeString: TButton;
21 ButtonFloatDecode1: TButton;
22 ButtonFloatEncode1: TButton;
23 ButtonSIntDecode: TButton;
24 ButtonSIntEncode: TButton;
25 ButtonUIntDecode: TButton;
26 ButtonUIntEncode: TButton;
27 CheckBoxMask1: TCheckBox;
28 CheckBoxMask2: TCheckBox;
29 CheckBoxMask3: TCheckBox;
30 EditIndexedItem1: TEdit;
31 EditIndexedItem2: TEdit;
32 EditIndexedItem3: TEdit;
33 EditIndexed: TEdit;
34 EditFloat: TEdit;
35 EditRaw: TEdit;
36 EditRawData: TEdit;
37 EditSInt: TEdit;
38 EditString: TEdit;
39 EditStringData: TEdit;
40 EditUInt: TEdit;
41 FloatSpinEdit1: TFloatSpinEdit;
42 GroupBox1: TGroupBox;
43 GroupBox2: TGroupBox;
44 GroupBox3: TGroupBox;
45 GroupBox4: TGroupBox;
46 GroupBox5: TGroupBox;
47 Label1: TLabel;
48 Label2: TLabel;
49 Label3: TLabel;
50 Label4: TLabel;
51 Label5: TLabel;
52 Label6: TLabel;
53 PageControl1: TPageControl;
54 SpinEditFloat: TSpinEdit;
55 SpinEditSInt: TSpinEdit;
56 SpinEditUInt: TSpinEdit;
57 TabSheet1: TTabSheet;
58 TabSheet2: TTabSheet;
59 procedure ButtonDecodeIndexedClick(Sender: TObject);
60 procedure ButtonEncodeIndexedClick(Sender: TObject);
61 procedure ButtonDecodeRawClick(Sender: TObject);
62 procedure ButtonDecodeStringClick(Sender: TObject);
63 procedure ButtonEncodeRawClick(Sender: TObject);
64 procedure ButtonEncodeStringClick(Sender: TObject);
65 procedure ButtonFloatDecode1Click(Sender: TObject);
66 procedure ButtonFloatEncode1Click(Sender: TObject);
67 procedure ButtonSIntDecodeClick(Sender: TObject);
68 procedure ButtonSIntEncodeClick(Sender: TObject);
69 procedure ButtonUIntDecodeClick(Sender: TObject);
70 procedure ButtonUIntEncodeClick(Sender: TObject);
71 procedure FormShow(Sender: TObject);
72 public
73 function StreamToString(Stream: TStream): string;
74 procedure StringToStream(Text: string; Stream: TStream);
75 end;
76
77var
78 MainForm: TMainForm;
79
80implementation
81
82{$R *.lfm}
83
84{ TMainForm }
85
86procedure TMainForm.ButtonDecodeRawClick(Sender: TObject);
87var
88 Block: TVarBlockSerializer;
89 Stream: TMemoryStream;
90begin
91 try
92 Block := TVarBlockSerializer.Create;
93 Stream := TMemoryStream.Create;
94 StringToStream(EditRawData.Text, Block.Stream);
95 Block.Stream.Position := 0;
96 Block.ReadVarStream(Stream);
97 EditRaw.Text := StreamToString(Stream);
98 finally
99 Stream.Free;
100 Block.Free;
101 end;
102end;
103
104procedure TMainForm.ButtonEncodeIndexedClick(Sender: TObject);
105var
106 IndexedBlock: TVarBlockIndexed;
107 Stream: TMemoryStream;
108begin
109 try
110 IndexedBlock := TVarBlockIndexed.Create;
111 Stream := TMemoryStream.Create;
112 if CheckBoxMask1.Checked then begin
113 StringToStream(EditIndexedItem1.Text, Stream);
114 IndexedBlock.WriteVarStream(0, Stream);
115 end;
116 if CheckBoxMask2.Checked then begin
117 StringToStream(EditIndexedItem2.Text, Stream);
118 IndexedBlock.WriteVarStream(1, Stream);
119 end;
120 if CheckBoxMask3.Checked then begin
121 StringToStream(EditIndexedItem3.Text, Stream);
122 IndexedBlock.WriteVarStream(2, Stream);
123 end;
124 Stream.Clear;
125 IndexedBlock.WriteToStream(Stream);
126 EditIndexed.Text := StreamToString(Stream);
127 finally
128 IndexedBlock.Free;
129 Stream.Free;
130 end;
131end;
132
133procedure TMainForm.ButtonDecodeIndexedClick(Sender: TObject);
134var
135 IndexedBlock: TVarBlockIndexed;
136 Stream: TMemoryStream;
137begin
138 try
139 IndexedBlock := TVarBlockIndexed.Create;
140 Stream := TMemoryStream.Create;
141 StringToStream(EditIndexed.Text, Stream);
142 IndexedBlock.ReadFromStream(Stream);
143
144 CheckBoxMask1.Checked := IndexedBlock.TestIndex(0);
145 CheckBoxMask2.Checked := IndexedBlock.TestIndex(1);
146 CheckBoxMask3.Checked := IndexedBlock.TestIndex(2);
147
148 Stream.Clear;
149 if IndexedBlock.TestIndex(0) then begin
150 IndexedBlock.ReadVarStream(0, Stream);
151 EditIndexedItem1.Text := StreamToString(Stream);
152 end else EditIndexedItem1.Text := '';
153 if IndexedBlock.TestIndex(1) then begin
154 IndexedBlock.ReadVarStream(1, Stream);
155 EditIndexedItem2.Text := StreamToString(Stream);
156 end else EditIndexedItem2.Text := '';
157 if IndexedBlock.TestIndex(2) then begin
158 IndexedBlock.ReadVarStream(2, Stream);
159 EditIndexedItem3.Text := StreamToString(Stream);
160 end else EditIndexedItem3.Text := '';
161 finally
162 IndexedBlock.Free;
163 Stream.Free;
164 end;
165end;
166
167procedure TMainForm.ButtonDecodeStringClick(Sender: TObject);
168var
169 Block: TVarBlockSerializer;
170begin
171 try
172 Block := TVarBlockSerializer.Create;
173 StringToStream(EditStringData.Text, Block.Stream);
174 Block.Stream.Position := 0;
175 EditString.Text := Block.ReadVarString;
176 finally
177 Block.Free;
178 end;
179end;
180
181procedure TMainForm.ButtonEncodeRawClick(Sender: TObject);
182var
183 Block: TVarBlockSerializer;
184 Stream: TMemoryStream;
185begin
186 try
187 Block := TVarBlockSerializer.Create;
188 Stream := TMemoryStream.Create;
189 StringToStream(EditRaw.Text, Stream);
190 Block.WriteVarStream(Stream);
191 EditRawData.Text := StreamToString(Block.Stream);
192 finally
193 Stream.Free;
194 Block.Free;
195 end;
196end;
197
198procedure TMainForm.ButtonEncodeStringClick(Sender: TObject);
199var
200 Block: TVarBlockSerializer;
201begin
202 try
203 Block := TVarBlockSerializer.Create;
204 Block.WriteVarString(EditString.Text);
205 EditStringData.Text := StreamToString(Block.Stream);
206 finally
207 Block.Free;
208 end;
209end;
210
211procedure TMainForm.ButtonFloatDecode1Click(Sender: TObject);
212var
213 Block: TVarBlockSerializer;
214begin
215 try
216 Block := TVarBlockSerializer.Create;
217 StringToStream(EditFloat.Text, Block.Stream);
218 Block.Stream.Position := 0;
219 FloatSpinEdit1.Value := Block.ReadVarFloat(SpinEditFloat.Value);
220 finally
221 Block.Free;
222 end;
223end;
224
225procedure TMainForm.ButtonFloatEncode1Click(Sender: TObject);
226var
227 Block: TVarBlockSerializer;
228begin
229 try
230 Block := TVarBlockSerializer.Create;
231 Block.WriteVarFloat(FloatSpinEdit1.Value, SpinEditFloat.Value);
232 EditFloat.Text := StreamToString(Block.Stream);
233 finally
234 Block.Free;
235 end;
236end;
237
238procedure TMainForm.ButtonSIntDecodeClick(Sender: TObject);
239var
240 Block: TVarBlockSerializer;
241begin
242 try
243 Block := TVarBlockSerializer.Create;
244 StringToStream(EditSInt.Text, Block.Stream);
245 Block.Stream.Position := 0;
246 SpinEditSInt.Value := Block.ReadVarSInt;
247 finally
248 Block.Free;
249 end;
250end;
251
252procedure TMainForm.ButtonSIntEncodeClick(Sender: TObject);
253var
254 Block: TVarBlockSerializer;
255begin
256 try
257 Block := TVarBlockSerializer.Create;
258 Block.WriteVarSInt(SpinEditSInt.Value);
259 EditSInt.Text := StreamToString(Block.Stream);
260 finally
261 Block.Free;
262 end;
263end;
264
265procedure TMainForm.ButtonUIntDecodeClick(Sender: TObject);
266var
267 Block: TVarBlockSerializer;
268begin
269 try
270 Block := TVarBlockSerializer.Create;
271 StringToStream(EditUInt.Text, Block.Stream);
272 Block.Stream.Position := 0;
273 SpinEditUInt.Value := Block.ReadVarUInt;
274 finally
275 Block.Free;
276 end;
277end;
278
279procedure TMainForm.ButtonUIntEncodeClick(Sender: TObject);
280var
281 Block: TVarBlockSerializer;
282begin
283 try
284 Block := TVarBlockSerializer.Create;
285 Block.WriteVarUInt(SpinEditUInt.Value);
286 EditUInt.Text := StreamToString(Block.Stream);
287 finally
288 Block.Free;
289 end;
290end;
291
292procedure TMainForm.FormShow(Sender: TObject);
293begin
294 PageControl1.TabIndex := 0;
295end;
296
297function TMainForm.StreamToString(Stream: TStream): string;
298begin
299 Result := '';
300 Stream.Position := 0;
301 while Stream.Position < Stream.Size do
302 Result := Result + IntToHex(Stream.ReadByte, 2) + ' ';
303end;
304
305function TryHexToInt(Data: string; var Value: Integer): Boolean;
306var
307 I: Integer;
308begin
309 Data := UpperCase(Data);
310 Result := True;
311 Value := 0;
312 for I := 0 to Length(Data) - 1 do begin
313 if (Data[I + 1] >= '0') and (Data[I + 1] <= '9') then
314 Value := Value or (Ord(Data[I + 1]) - Ord('0')) shl ((Length(Data) - I - 1) * 4)
315 else if (Data[I + 1] >= 'A') and (Data[I + 1] <= 'F') then
316 Value := Value or (Ord(Data[I + 1]) - Ord('A') + 10) shl ((Length(Data) - I - 1) * 4)
317 else Result := False;
318 end;
319end;
320
321procedure TMainForm.StringToStream(Text: string; Stream: TStream);
322var
323 Part: string;
324 Number: Integer;
325begin
326 Stream.Size := 0;
327 Text := Trim(Text);
328 while Pos(' ', Text) > 0 do begin
329 Part := Copy(Text, 1, Pos(' ', Text) - 1);
330 if TryHexToInt(Part, Number) and (Number < 256) then
331 Stream.WriteByte(Number);
332 Delete(Text, 1, Pos(' ', Text));
333 end;
334 if TryHexToInt(Text, Number) and (Number < 256) and (Text <> '') then
335 Stream.WriteByte(Number);
336end;
337
338end.
339
Note: See TracBrowser for help on using the repository browser.