blob: 34673c1de4126ff38c98eaf515ee2ec2bca3cdc6 (
plain)
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
|
{$mode objfpc}
{$h+}
program ipcserver;
{$APPTYPE CONSOLE}
uses
{$ifdef unix}cthreads,{$endif}
SysUtils,
Classes,
simpleipc;
Type
TApp = Class(TObject)
Srv : TSimpleIPCServer;
DoStop : Boolean;
Procedure MessageQueued(Sender : TObject);
procedure Run;
Procedure PrintMessage;
end;
Procedure TApp.PrintMessage;
Var
S : String;
begin
S:=Srv.StringMessage;
Writeln('Received message : ',S);
DoStop:=DoStop or (S='stop');
end;
Procedure TApp.MessageQueued(Sender : TObject);
begin
Srv.ReadMessage;
PrintMessage;
end;
Procedure TApp.Run;
Var
S : String;
Threaded : Boolean;
begin
Srv:=TSimpleIPCServer.Create(Nil);
Try
S:= ParamStr(1);
Threaded:=(S='-t') or (S='--threaded');
Srv.ServerID:='ipcserver';
Srv.Global:=True;
if Threaded then
Srv.OnMessageQueued:=@MessageQueued;
Srv.StartServer(Threaded);
Writeln('Server started. Listening for messages. Send "stop" message to stop server.');
Repeat
If Threaded then
begin
Sleep(10);
CheckSynchronize;
end
else if Srv.PeekMessage(10,True) then
PrintMessage
else
Sleep(10);
Until DoStop;
Finally
Srv.Free;
end;
end;
begin
With TApp.Create do
try
Run
finally
Free;
end;
end.
|