-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathtgshelldmn.pas
129 lines (107 loc) · 2.55 KB
/
tgshelldmn.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
(*
Tg framework, FCL HTTP Daemon Broker
Copyright (C) 2014 Silvio Clecio
See the file LICENSE.txt, included in this distribution,
for details about the copyright.
This library 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.
*)
unit tgshelldmn;
{$mode objfpc}{$H+}
interface
uses
{$IFDEF MSWINDOWS}
ServiceManager,
{$ENDIF}
DaemonApp, Classes, SysUtils,
tgsendertypes, shellthread
;
type
{ TTgShellDaemon }
TTgShellDaemon = class(TCustomDaemon)
private
FThread: TThread;
public
function Install: Boolean; override;
function Uninstall: Boolean; override;
function Start: Boolean; override;
function Stop: Boolean; override;
end;
{ TTgShellDaemonMapper }
TTgShellDaemonMapper = class(TCustomDaemonMapper)
public
constructor Create(AOwner: TComponent); override;
end;
implementation
{ TTgShellDaemon }
function TTgShellDaemon.Start: Boolean;
begin
Result := inherited Start;
FThread := TShellThread.Create;
FThread.Start;
end;
function TTgShellDaemon.Stop: Boolean;
begin
Result := inherited Stop;
FThread.Terminate;
//FThread.Free;
end;
function TTgShellDaemon.Install: Boolean;
{$IFDEF MSWINDOWS}
var
VSM: TServiceManager;
{$ENDIF}
begin
Result := inherited Install;
{$IFDEF MSWINDOWS}
VSM := TServiceManager.Create(nil);
try
VSM.Connect;
if VSM.Connected then
VSM.StartService('TgShBotD', nil);
VSM.Disconnect;
finally
VSM.Free;
end;
{$ENDIF}
WriteLn('Service installed.');
WriteLn('Show text in terminal');
end;
function TTgShellDaemon.Uninstall: Boolean;
{$IFDEF MSWINDOWS}
var
VSM: TServiceManager;
{$ENDIF}
begin
Result := inherited Uninstall;
{$IFDEF MSWINDOWS}
VSM := TServiceManager.Create(nil);
try
VSM.Connect;
if VSM.Connected then
VSM.StopService('TgShBotD', True);
VSM.Disconnect;
finally
VSM.Free;
end;
{$ENDIF}
WriteLn('Service uninstalled.');
end;
{ TTgShellDaemonMapper }
constructor TTgShellDaemonMapper.Create(AOwner: TComponent);
var
VDaemonDef: TDaemonDef;
begin
inherited Create(AOwner);
VDaemonDef := DaemonDefs.Add as TDaemonDef;
VDaemonDef.Description := 'Telegram bot of shell emulator';
VDaemonDef.DisplayName := 'Telegram Bot Shell emulator';
VDaemonDef.Name := 'TgShBot';
VDaemonDef.DaemonClassName := 'TTgShellDaemon';
VDaemonDef.WinBindings.ServiceType := stWin32;
end;
initialization
RegisterDaemonClass(TTgShellDaemon);
RegisterDaemonMapper(TTgShellDaemonMapper);
end.