fpc/fcl/unix/daemonapp.inc
michael 3218a1b9bf * Added copyright notice
git-svn-id: trunk@6332 -
2007-02-03 23:46:11 +00:00

203 lines
4.2 KiB
PHP

{
$Id: header,v 1.1 2000/07/13 06:33:45 michael Exp $
This file is part of the Free Component Library (FCL)
Copyright (c) 1999-2000 by the Free Pascal development team
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
{ System dependent service stuff }
uses baseunix;
{ ---------------------------------------------------------------------
TCustomDaemonApplication
---------------------------------------------------------------------}
Const
SERVICE_CONTROL_STOP = $00000001;
SERVICE_CONTROL_PAUSE = $00000002;
SERVICE_CONTROL_CONTINUE = $00000003;
SERVICE_CONTROL_INTERROGATE = $00000004;
SERVICE_CONTROL_SHUTDOWN = $00000005;
function TCustomDaemonApplication.RunGUIloop(P: Pointer): integer;
begin
end;
procedure TCustomDaemonApplication.SysInstallDaemon(Daemon: TCustomDaemon);
begin
end;
procedure TCustomDaemonApplication.SysUnInstallDaemon(Daemon: TCustomDaemon);
begin
end;
procedure TCustomDaemonApplication.SysStartUnInstallDaemons;
begin
end;
procedure TCustomDaemonApplication.SysEndUnInstallDaemons;
begin
end;
procedure TCustomDaemonApplication.SysStartInstallDaemons;
begin
end;
procedure TCustomDaemonApplication.SysEndInstallDaemons;
begin
end;
procedure TCustomDaemonApplication.SysStartRunDaemons;
begin
end;
procedure TCustomDaemonApplication.SysEndRunDaemons;
Var
I : Integer;
DC : TDaemonController;
begin
For I:=ComponentCount-1 downto 0 do
If Components[i] is TDaemoncontroller then
begin
DC:=Components[i] as TDaemoncontroller;
DC.Main(0,Nil); // Returns after starting thread.
end;
if Assigned(GUIMainLoop) then
GuiMainLoop
else
// Simply wait till everything terminates.
While Not Terminated do
fpPause;
end;
procedure TCustomDaemonApplication.RemoveController(
AController: TDaemonController);
Var
I : Integer;
HC : Boolean;
begin
FreeAndNil(AController.FDaemon);
AController.Free;
end;
{ ---------------------------------------------------------------------
TDaemonThread
---------------------------------------------------------------------}
procedure TDaemonThread.StartServiceExecute;
begin
end;
procedure TDaemonThread.CheckControlMessage(WaitForMessage : Boolean);
begin
end;
{ ---------------------------------------------------------------------
TDaemonController
---------------------------------------------------------------------}
procedure TDaemonController.StartService;
begin
Main(0,Nil);
end;
procedure TDaemonController.Main(Argc: DWord; Args: PPChar);
Var
T : TThread;
begin
FDaemon.Status:=csStartPending;
Try
T:=TDaemonThread.Create(FDaemon);
T.FreeOnTerminate:=True;
T.Resume;
T.WaitFor;
FDaemon.FThread:=Nil;
except
On E : Exception do
FDaemon.Logmessage(Format(SErrDaemonStartFailed,[FDaemon.Definition.Name,E.Message]));
end;
end;
procedure TDaemonController.Controller(ControlCode, EventType: DWord;
EventData: Pointer);
begin
// Send control code to daemon thread.
end;
function TDaemonController.ReportStatus: Boolean;
Var
S : String;
begin
S:='';
If Assigned(FDaemon) then
With FDaemon do
S:=Format(SDaemonStatus,[Definition.DisplayName,
CurrentStatusNames[Status]]);
Application.Logger.Info(S);
end;
Procedure TDaemonController.ThreadTerminated(Sender : TObject);
begin
end;
{ ---------------------------------------------------------------------
Global initialization/Finalization
---------------------------------------------------------------------}
Procedure DoShutDown(Sig : Longint; Info : PSigInfo; Context : PSigContext); cdecl;
begin
Application.StopDaemons(True);
Application.Terminate;
end;
Procedure SysInitDaemonApp;
Var
old,new : SigactionRec;
begin
New.sa_handler:=@DoShutDown;
fpSigaction(SIGQUIT,@New,@Old);
fpSigaction(SIGTERM,@New,@Old);
fpSigaction(SIGINT,@New,@Old);
end;
Procedure SysDoneDaemonApp;
begin
end;