summaryrefslogtreecommitdiff
path: root/packages/fcl-process/examples/ipcserver.pp
diff options
context:
space:
mode:
Diffstat (limited to 'packages/fcl-process/examples/ipcserver.pp')
-rw-r--r--packages/fcl-process/examples/ipcserver.pp62
1 files changed, 55 insertions, 7 deletions
diff --git a/packages/fcl-process/examples/ipcserver.pp b/packages/fcl-process/examples/ipcserver.pp
index eb4fa753b1..250e3ec83d 100644
--- a/packages/fcl-process/examples/ipcserver.pp
+++ b/packages/fcl-process/examples/ipcserver.pp
@@ -5,31 +5,79 @@ 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
- Srv : TSimpleIPCServer;
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;
- Srv.StartServer;
- Writeln('Server started. Listening for messages');
+ if Threaded then
+ Srv.OnMessageQueued:=@MessageQueued;
+ Srv.StartServer(Threaded);
+
+ Writeln('Server started. Listening for messages. Send "stop" message to stop server.');
Repeat
- If Srv.PeekMessage(1,True) then
+ If Threaded then
begin
- S:=Srv.StringMessage;
- Writeln('Received message : ',S);
+ Sleep(10);
+ CheckSynchronize;
end
+ else if Srv.PeekMessage(10,True) then
+ PrintMessage
else
Sleep(10);
- Until CompareText(S,'stop')=0;
+ Until DoStop;
Finally
Srv.Free;
end;
+end;
+
+begin
+ With TApp.Create do
+ try
+ Run
+ finally
+ Free;
+ end;
end.