diff options
Diffstat (limited to 'packages/fcl-process/examples/ipcserver.pp')
-rw-r--r-- | packages/fcl-process/examples/ipcserver.pp | 62 |
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. |