玉兔远程控制 0.1.0-bate9
载入中...
搜索中...
未找到
PluginWakeOnLan.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#ifdef HAVE_PCAPPLUSPLUS
4 #include "PcapPlusPlusVersion.h"
5 #include "PcapDevice.h"
6 #include <Logger.h>
7 #include <QLoggingCategory>
8 static Q_LOGGING_CATEGORY(logPcpp, "WOL.PCPP")
9 void Pcpp_Logger(pcpp::Logger::LogLevel logLevel,
10 const std::string& logMessage,
11 const std::string& file,
12 const std::string& method,
13 const int line)
14 {
15 switch(logLevel)
16 {
17 case pcpp::Logger::LogLevel::Debug:
18 qDebug(logPcpp) << logMessage.c_str();
19 break;
20 case pcpp::Logger::LogLevel::Info:
21 qInfo(logPcpp) << logMessage.c_str();
22 break;
23 case pcpp::Logger::LogLevel::Error:
24 qCritical(logPcpp) << logMessage.c_str();
25 break;
26 default:
27 break;
28 }
29 }
30#endif
31
32#include <QLoggingCategory>
33#include <QDir>
34
35#include "PluginWakeOnLan.h"
36#include "OperateWakeOnLan.h"
37
38static Q_LOGGING_CATEGORY(log, "WakeOnLan.Plugin")
39CPluginWakeOnLan::CPluginWakeOnLan(QObject *parent)
40 : CPlugin{parent}
41 , m_pOperate(nullptr)
42{
43#ifdef HAVE_PCAPPLUSPLUS
44 pcpp::Logger::getInstance().setLogPrinter(Pcpp_Logger);
45 pcpp::Logger::getInstance().setAllModulesToLogLevel(
46 pcpp::Logger::LogLevel::Debug);
47 // suppressing errors to avoid cluttering stdout
48 pcpp::Logger::getInstance().enableLogs();
49 pcpp::Logger::getInstance().setLogLevel(
50 pcpp::LogModule::PcapLogModuleLiveDevice, pcpp::Logger::LogLevel::Info);
51#endif
52}
53
54CPluginWakeOnLan::~CPluginWakeOnLan()
55{
56 qDebug(log) << "CPluginWakeOnLan::~CPluginWakeOnLan()";
57}
58
59const CPlugin::TYPE CPluginWakeOnLan::Type() const
60{
61 return TYPE::NetworkTools;
62}
63
64const QString CPluginWakeOnLan::Name() const
65{
66 return "WakeOnLan";
67}
68
69const QString CPluginWakeOnLan::DisplayName() const
70{
71 return tr("Wake on lan");
72}
73
74const QString CPluginWakeOnLan::Description() const
75{
76 return tr("Wake on lan");
77}
78
79const QIcon CPluginWakeOnLan::Icon() const
80{
81 return QIcon::fromTheme("lan");
82}
83
84const QString CPluginWakeOnLan::Version() const
85{
86 return PluginWakeOnLan_VERSION;
87}
88
89const QString CPluginWakeOnLan::Details() const
90{
91 QString szDetails;
92 szDetails += "- " + tr("Dependency libraries") + "\n";
93#ifdef HAVE_PCAPPLUSPLUS
94 szDetails += " - PcapPlusPlus";
95 szDetails += "\n";
96 szDetails += " - " + tr("version: ")
97 + pcpp::getPcapPlusPlusVersionFull().c_str();
98 szDetails += "\n";
99 szDetails += " - " + tr("Pcap lib version info: ")
100 + pcpp::IPcapDevice::getPcapLibVersionInfo().c_str();
101#endif
102 return szDetails;
103}
104
106{
107 if(!m_pOperate) {
108 m_pOperate = CPlugin::CreateOperate(szId, para);
109 if(!m_pOperate) return m_pOperate;
110
111 QString szFile = m_pOperate->GetSettingsFile();
112 QDir d(szFile);
113 if(!d.exists(szFile)) return m_pOperate;
114 int nRet = false;
115 //bRet = m_pOperate->Load(szFile);
116 bool bRet = QMetaObject::invokeMethod(
117 m_pOperate,
118 "Load",
119 Qt::DirectConnection,
120 Q_RETURN_ARG(int, nRet),
121 Q_ARG(QString, szFile));
122 if(!bRet) {
123 qCritical(log) << "Call" << m_pOperate->metaObject()->className()
124 + QString("::") + "Load(QString szFile) fail." << szFile;
125 return nullptr;
126 }
127 if(nRet) {
128 qCritical(log) << "Load parameter fail" << nRet;
129 DeleteOperate(m_pOperate);
130 return nullptr;
131 }
132 }
133 return m_pOperate;
134}
135
136COperate* CPluginWakeOnLan::OnCreateOperate(const QString &szId)
137{
138 qDebug(log) << Q_FUNC_INFO;
139 if(Id() == szId)
140 {
141 return new COperateWakeOnLan(this);
142 }
143 return nullptr;
144}
145
147{
148 qDebug(log) << Q_FUNC_INFO;
149 Q_ASSERT(m_pOperate == p);
150 m_pOperate = nullptr;
151 return CPlugin::DeleteOperate(p);
152}
153
154const QString CPluginWakeOnLan::Protocol() const
155{
156 return QString();
157}
局域网唤醒操作接口
操作接口。
Definition Operate.h:51
插件的全局参数。
virtual const QString Details() const override
显示更多细节。 例如: 在关于对话框或日志中显示。 包括插件的依赖库的版本信息和描述等
virtual const QString Protocol() const override
协议
virtual int DeleteOperate(COperate *p) override
Delete COperate
virtual const QString DisplayName() const override
在界面上显示的名称
virtual const QString Name() const override
插件名,这个名一定要与工程名(${PROJECT_NAME})相同。 翻译文件(${PROJECT_NAME}_*.ts))名与其相关。
virtual const QString Version() const override
Version
virtual const QString Description() const override
描述
virtual COperate * CreateOperate(const QString &szId, CParameterPlugin *para) override
新建 COperate 实例。仅由 CManager 调用
插件接口
Definition Plugin.h:15
virtual Q_INVOKABLE int DeleteOperate(COperate *p)
Delete COperate
Definition Plugin.cpp:124
virtual const QString Id() const
标识。默认: Type() + ":" + Protocol() + ":" + Name()
Definition Plugin.cpp:71
virtual Q_INVOKABLE COperate * CreateOperate(const QString &szId, CParameterPlugin *para)
新建 COperate 实例。仅由 CManager 调用
Definition Plugin.cpp:82