玉兔远程控制
0.1.0-bate11
Toggle main menu visibility
载入中...
搜索中...
未找到
Service
Service.cpp
1
// Author: Kang Lin <kl222@126.com>
2
3
#include "Service.h"
4
#include <QTimer>
5
#include <QSettings>
6
#include <QDir>
7
#include "RabbitCommonDir.h"
8
#include "PluginService.h"
9
#include <QLoggingCategory>
10
11
Q_DECLARE_LOGGING_CATEGORY(Service)
12
13
CService::CService(
CPluginService
*plugin) : QObject(),
14
m_pPara(nullptr),
15
m_pPlugin(plugin)
16
{
17
}
18
19
CService::~CService()
20
{
21
qDebug(Service) <<
"CService::~CService()"
;
22
}
23
24
int
CService::Init
()
25
{
26
int
nRet = 0;
27
if
(GetParameters())
28
{
29
nRet = LoadConfigure();
30
if
(nRet)
return
nRet;
31
}
32
33
if
(!GetParameters() || !GetParameters()->getEnable())
34
{
35
qInfo(Service) <<
"The service"
<< m_pPlugin->Name() <<
"is disable"
;
36
return
-2;
37
}
else
38
qInfo(Service) <<
"The service"
<< m_pPlugin->Name() <<
"is start"
;
39
40
nRet =
OnInit
();
41
if
(0 == nRet)
42
QTimer::singleShot(0,
this
, SLOT(
slotProcess
()));
43
if
(nRet > 0)
return
0;
44
return
nRet;
45
}
46
47
int
CService::Clean()
48
{
49
int
nRet = 0;
50
51
OnClean
();
52
53
if
(m_pPara)
54
{
55
m_pPara->deleteLater();
56
m_pPara =
nullptr
;
57
}
58
return
nRet;
59
}
60
61
void
CService::slotProcess
()
62
{
63
int
nRet = 0;
64
try
{
65
nRet =
OnProcess
();
66
}
catch
(std::exception& e) {
67
qCritical(Service) <<
"OnProcess exception:"
<< e.what();
68
}
catch
(...) {
69
qCritical(Service) <<
"OnProcess exception"
;
70
}
71
72
// TODO: Ignore error and stop
73
if
(nRet < 0)
74
{
75
qCritical(Service) <<
"OnProcess fail:"
, nRet;
76
return
;
77
}
78
QTimer::singleShot(nRet,
this
, SLOT(
slotProcess
()));
79
}
80
81
int
CService::OnProcess
()
82
{
83
qWarning(Service) <<
"Need to implement CService::OnProcess()"
;
84
return
0;
85
}
86
87
CParameterService
* CService::GetParameters()
88
{
89
return
m_pPara;
90
}
91
92
int
CService::LoadConfigure(
const
QString &szDir)
93
{
94
int
nRet = 0;
95
QString szFolder = szDir;
96
QString szFile;
97
if
(szFolder.isEmpty())
98
{
99
szFile = RabbitCommon::CDir::Instance()->GetFileUserConfigure();
100
QSettings set(szFile, QSettings::IniFormat);
101
szFolder = set.value(
"Configure/Folder"
,
102
RabbitCommon::CDir::Instance()->GetDirUserConfig()).toString();
103
szFile = set.value(
"Configure/File/"
+ m_pPlugin->Id(),
104
szFolder
105
+ QDir::separator()
106
+ m_pPlugin->Id()
107
+
".rrs"
).toString();
108
}
else
{
109
szFile = szFolder + QDir::separator() + m_pPlugin->Id() +
".rrs"
;
110
}
111
qInfo(Service) <<
"Configure file:"
<< szFile;
112
QDir d;
113
if
(d.exists(szFile)){
114
nRet = GetParameters()->Load(szFile);
115
if
(nRet)
116
{
117
qInfo(Service) <<
"Load configure file fail:"
<< nRet <<
":"
<< szFile;
118
return
-1;
119
}
120
}
121
return
nRet;
122
}
123
124
int
CService::SaveConfigure(
const
QString &szDir)
125
{
126
int
nRet = 0;
127
if
(GetParameters())
128
{
129
QString szFolder = szDir;
130
QString szFile;
131
if
(szFolder.isEmpty())
132
{
133
szFile = RabbitCommon::CDir::Instance()->GetFileUserConfigure();
134
QSettings set(szFile, QSettings::IniFormat);
135
szFolder = set.value(
"Configure/Folder"
,
136
RabbitCommon::CDir::Instance()->GetDirUserConfig()).toString();
137
szFile = set.value(
"Configure/File/"
+ m_pPlugin->Id(),
138
szFolder
139
+ QDir::separator()
140
+ m_pPlugin->Id()
141
+
".rrs"
).toString();
142
}
else
{
143
szFile = szFolder + QDir::separator() + m_pPlugin->Id() +
".rrs"
;
144
}
145
nRet = GetParameters()->Save(szFile);
146
}
147
return
nRet;
148
}
CParameterService
定义
ParameterService.h:10
CPluginService
服务插件接口。此接口仅由插件实现。
定义
PluginService.h:27
CService::OnInit
virtual int OnInit()=0
初始化服务
CService::Init
virtual int Init()
加载参数,支持非Qt事件循环
定义
Service.cpp:24
CService::slotProcess
virtual void slotProcess()
支持非Qt事件循环
定义
Service.cpp:61
CService::OnClean
virtual int OnClean()=0
清理服务
CService::OnProcess
virtual int OnProcess()
处理服务
定义
Service.cpp:81
作者:康林 (kl222@126.com)
版权所有(c) 康林工作室 保留所有权力