-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathclient.dpr
More file actions
89 lines (82 loc) · 2.57 KB
/
client.dpr
File metadata and controls
89 lines (82 loc) · 2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
////////////////////////////////////////////////////////////////////////////////
//
// ****************************************************************************
// * Unit Name : server
// * Purpose : Äåìîíñòðàöèîííûé ïðèìåð ðàáîòû êëèåíòà
// * Author : Àëåêñàíäð (Rouse_) Áàãåëü
// * Copyright : © Fangorn Wizards Lab 1998 - 2012.
// * Version : 1.01
// * Home Page : http://rouse.drkb.ru
// ****************************************************************************
//
// Ïîêàçàí ïðèìåðíûé ïðèíöèï ðàáîòû ñ êëàññîì TFWPipeClient
// Çàäà÷à äåìîêëèåíòà îòïðàâèòü ñåðâåðó íåêóþ ñòðîêó, ïîëó÷èòü ðåçóëüòàò è ïðîâåðèòü,
// ðàâíÿåòñÿ ëè îí îòïðàâëåííîé ñòðîêå ñ äîáàâëåíîé êîíñòàíòîé "DONE".
// Âûâåñòè íà ýêðàí ðåçóëüòàò ïðîâåðêè.
// Ïîñëå çàâåðøåíèÿ îòïðàâêè âñåõ ñðîê, îòïðàâèòü ñåðâåðó ÷èñëî -1,
// ïðè ïîëó÷åíèè êîòîðîãî ñåðâåð äîëæåí çàâåðøèòü ñâîþ ðàáîòó.
program client;
{$APPTYPE CONSOLE}
uses
Windows,
FWIOCompletionPipes,
Classes,
SysUtils;
function ToOEM(str: string): AnsiString;
begin
SetLength(Result, Length(str));
AnsiToOem(@AnsiString(str)[1], @Result[1]);
end;
var
I, Len: Integer;
InData, OutData: AnsiString;
PipeClient: TFWPipeClient;
InStream, OutStream: TMemoryStream;
begin
try
PipeClient := TFWPipeClient.Create('.', 'FWIOCompletionPipeServer');
try
PipeClient.Active := True;
InStream := TMemoryStream.Create;
try
OutStream := TMemoryStream.Create;
try
for I := 0 to 10000 do
begin
InData := 'Value: ' + AnsiString(IntToStr(I));
Len := Length(InData);
InStream.Clear;
InStream.WriteBuffer(Len, 4);
InStream.WriteBuffer(InData[1], Len);
PipeClient.SendData(InStream, OutStream);
OutStream.ReadBuffer(Len, 4);
if Len <= 0 then
raise Exception.Create('Wrong buff');
SetLength(OutData, Len);
OutStream.ReadBuffer(OutData[1], Len);
InData := InData + 'DONE';
if InData = OutData then
Writeln('Send data success ', InData)
else
Writeln('Send data failed ', InData, ' <> ', OutData);
//Sleep(50);
end;
InStream.Clear;
I := -1;
InStream.WriteBuffer(I, 4);
PipeClient.SendData(InStream, OutStream);
finally
OutStream.Free;
end;
finally
InStream.Free;
end;
finally
PipeClient.Free;
end;
except
on E:Exception do
Writeln(ToOem(E.Classname+': '+ E.Message));
end;
Readln;
end.