ipcserver.pp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. {$mode objfpc}
  2. {$h+}
  3. program ipcserver;
  4. {$APPTYPE CONSOLE}
  5. uses
  6. {$ifdef unix}cthreads,{$endif}
  7. SysUtils,
  8. Classes,
  9. simpleipc;
  10. Type
  11. TApp = Class(TObject)
  12. Srv : TSimpleIPCServer;
  13. DoStop : Boolean;
  14. Procedure MessageQueued(Sender : TObject);
  15. procedure Run;
  16. Procedure PrintMessage;
  17. end;
  18. Procedure TApp.PrintMessage;
  19. Var
  20. S : String;
  21. begin
  22. S:=Srv.StringMessage;
  23. Writeln('Received message : ',S);
  24. DoStop:=DoStop or (S='stop');
  25. end;
  26. Procedure TApp.MessageQueued(Sender : TObject);
  27. begin
  28. Srv.ReadMessage;
  29. PrintMessage;
  30. end;
  31. Procedure TApp.Run;
  32. Var
  33. S : String;
  34. Threaded : Boolean;
  35. begin
  36. Srv:=TSimpleIPCServer.Create(Nil);
  37. Try
  38. S:= ParamStr(1);
  39. Threaded:=(S='-t') or (S='--threaded');
  40. Srv.ServerID:='ipcserver';
  41. Srv.Global:=True;
  42. if Threaded then
  43. Srv.OnMessageQueued:=@MessageQueued;
  44. Srv.StartServer(Threaded);
  45. Writeln('Server started. Listening for messages. Send "stop" message to stop server.');
  46. Repeat
  47. If Threaded then
  48. begin
  49. Sleep(10);
  50. CheckSynchronize;
  51. end
  52. else if Srv.PeekMessage(10,True) then
  53. PrintMessage
  54. else
  55. Sleep(10);
  56. Until DoStop;
  57. Finally
  58. Srv.Free;
  59. end;
  60. end;
  61. begin
  62. With TApp.Create do
  63. try
  64. Run
  65. finally
  66. Free;
  67. end;
  68. end.