program ServBook;

{$APPTYPE CONSOLE}

uses
  {$I SynDprUses.inc} // includes FastMM4
  SysUtils,
  SynLog,
  mORMot,
  SynSQLite3Static,
  mORMotSQLite3,
  mORMotService,     // cross-platform service/daemon skeleton with settings
  // domain
  DomConferenceTypes in '..\dom\DomConferenceTypes.pas',
  DomConferenceInterfaces in '..\dom\DomConferenceInterfaces.pas',
  DomConferenceDepend in '..\dom\DomConferenceDepend.pas',
  DomConferenceServices in '..\dom\DomConferenceServices.pas',
  // infrastructure
  InfraConferenceRepository in '..\infra\InfraConferenceRepository.pas',
  // servers
  ServBookMain in '..\serv\ServBookMain.pas';

type
  TBookSettings = class(TSynDaemonSettings)
  private
    fProcess: TBookProcessSettings;
  public
    constructor Create; override;
  published
    property Process: TBookProcessSettings read fProcess;
  end;

  TBookDaemon = class(TSynDaemon)
  protected
    fProcess: TBookProcess;
  public
    procedure Start; override;
    procedure Stop; override;
  end;


{ TBookDaemon }

procedure TBookDaemon.Start;
begin
  if fProcess = nil then
    fProcess := TBookProcess.Create((fSettings as TBookSettings).Process);
end;

procedure TBookDaemon.Stop;
begin
  FreeAndNil(fProcess);
end;

{ TBookSettings }

constructor TBookSettings.Create;
begin
  inherited;
  fServiceDisplayName := 'My Long Name for Service';
end;

begin
  with TBookDaemon.Create(TBookSettings, '', '', '') do
  try
    CommandLine(true);
  finally
    Free;
  end;
end.
