summaryrefslogtreecommitdiff
path: root/packages/fcl-process/examples/simpleipcserver.lpr
diff options
context:
space:
mode:
Diffstat (limited to 'packages/fcl-process/examples/simpleipcserver.lpr')
-rw-r--r--packages/fcl-process/examples/simpleipcserver.lpr81
1 files changed, 81 insertions, 0 deletions
diff --git a/packages/fcl-process/examples/simpleipcserver.lpr b/packages/fcl-process/examples/simpleipcserver.lpr
new file mode 100644
index 0000000000..cd81f838cf
--- /dev/null
+++ b/packages/fcl-process/examples/simpleipcserver.lpr
@@ -0,0 +1,81 @@
+program simpleipcserver;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}
+ BaseUnix,
+ {$ENDIF}
+ {$IFDEF windows}
+ Windows,
+ {$ENDIF}
+ Classes, SysUtils, CustApp, simpleipc, Crt;
+
+type
+
+ { TSimpleIPCServerApp }
+
+ TSimpleIPCServerApp = class(TCustomApplication)
+ protected
+ procedure DoRun; override;
+ public
+ constructor Create(TheOwner: TComponent); override;
+ end;
+
+{ TSimpleIPCServerApp }
+
+procedure TSimpleIPCServerApp.DoRun;
+var
+ IPCServer: TSimpleIPCServer;
+ Key: Char;
+ NullObj: TObject;
+begin
+ IPCServer := TSimpleIPCServer.Create(nil);
+ IPCServer.ServerID:='ipc_test_crash';
+ IPCServer.Global:=True;
+ IPCServer.StartServer;
+ NullObj := nil;
+
+ WriteLn('Server started');
+ WriteLn(' Press e to finish with an exception');
+ WriteLn(' Press t to terminate through OS api - ', {$IFDEF UNIX}'Kill'{$ELSE}'TerminateProcess'{$ENDIF});
+ WriteLn(' Press any other key to finish normally');
+ Key := ReadKey;
+
+ case Key of
+ 'e':
+ begin
+ NullObj.AfterConstruction;
+ end;
+ 't':
+ begin
+ {$ifdef unix}
+ FpKill(FpGetpid, 9);
+ {$endif}
+ {$ifdef windows}
+ TerminateProcess(GetCurrentProcess, 0);
+ {$endif}
+ end;
+ end;
+
+ IPCServer.Active:=False;
+ WriteLn('Server stopped');
+ IPCServer.Destroy;
+ Terminate;
+end;
+
+constructor TSimpleIPCServerApp.Create(TheOwner: TComponent);
+begin
+ inherited Create(TheOwner);
+ StopOnException:=True;
+end;
+
+var
+ Application: TSimpleIPCServerApp;
+begin
+ Application:=TSimpleIPCServerApp.Create(nil);
+ Application.Title:='IPC Server';
+ Application.Run;
+ Application.Free;
+end.
+