unit DaemonUnit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, DaemonApp, IBConnection, FBEventMonitor, FBAdmin;
type
{ TEventsThread }
TEventsThread = class(TThread)
private
fEvent: TFBEventMonitor;
fConn: TIBConnection;
sLogFileName: string;
procedure Log(aLog: string);
procedure MyEventAlert(Sender: TObject; EventName: string;
EventCount: longint; var CancelAlerts: boolean);
public
constructor Create;
destructor Destroy; override;
procedure Execute; override;
end;
{ TDaemon3 }
TDaemon3 = class(TDaemon)
procedure DataModuleStart(Sender: TCustomDaemon; var OK: Boolean);
procedure DataModuleStop(Sender: TCustomDaemon; var OK: Boolean);
private
MyThread: TEventsThread;
public
end;
var
Daemon3: TDaemon3;
implementation
procedure RegisterDaemon;
begin
RegisterDaemonClass(TDaemon3)
end;
{$R *.lfm}
{ TEventsThread }
constructor TEventsThread.Create;
begin
inherited Create(True);
FreeOnTerminate := False;
fEvent := TFBEventMonitor.Create(nil);
fConn := TIBConnection.Create(nil);
sLogFileName := ExtractFilePath(Application.ExeName) + 'log.txt';
Log('thread create');
Start;
end;
destructor TEventsThread.Destroy;
begin
Log('thread destroy');
fEvent.Free;
fConn.Free;
inherited Destroy;
end;
procedure TEventsThread.Execute;
begin
Log('thread execute');
try
fConn.HostName := '192.168.0.12';
fConn.DatabaseName := 'D:\DB\db.fdb';
fConn.UserName := 'SYSDBA';
fConn.Password := '****';
fConn.Connected := True;
fEvent.Connection := fConn;
fEvent.OnEventAlert := @MyEventAlert;
fEvent.Events.Add('test_event');
fEvent.Registered := True;
if fEvent.Registered then
Log('registered ok (thread)')
else
Log('not registered (thread)');
except on E: exception do
Log(E.Message);
end;
while not Terminated do begin
Sleep(100);
CheckSynchronize();
end;
end;
procedure TEventsThread.MyEventAlert(Sender: TObject; EventName: string;
EventCount: longint; var CancelAlerts: boolean);
begin
Log('IB_EVENT: ' + EventName);
end;
procedure TEventsThread.Log(aLog: string);
var
sTemp: TStringList;
F: TextFile;
begin
sTemp := TStringList.Create;
try
if FileExists(sLogFileName) then
sTemp.LoadFromFile(sLogFileName);
sTemp.Add(DateTimeToStr(Now()) + ' ' + aLog);
sTemp.SaveToFile(sLogFileName);
finally
sTemp.Free
end;
end;
procedure TDaemon3.DataModuleStart(Sender: TCustomDaemon; var OK: Boolean);
begin
MyThread := TEventsThread.Create;
end;
procedure TDaemon3.DataModuleStop(Sender: TCustomDaemon; var OK: Boolean);
begin
MyThread.Terminate;
end;
initialization
RegisterDaemon;
end.