玉兔远程控制 0.1.0-bate5
载入中...
搜索中...
未找到
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#ifdef HAVE_PCAPPLUSPLUS
93 szDetails = "- PcapPlusPlus";
94 szDetails += "\n";
95 szDetails += " - " + tr("version: ")
96 + pcpp::getPcapPlusPlusVersionFull().c_str();
97 szDetails += "\n";
98 szDetails += " - " + tr("Pcap lib version info: ")
99 + pcpp::IPcapDevice::getPcapLibVersionInfo().c_str();
100#endif
101 return szDetails;
102}
103
105{
106 if(!m_pOperate) {
107 m_pOperate = CPlugin::CreateOperate(szId, para);
108 if(!m_pOperate) return m_pOperate;
109
110 QString szFile = m_pOperate->GetSettingsFile();
111 QDir d(szFile);
112 if(!d.exists(szFile)) return m_pOperate;
113 int nRet = false;
114 //bRet = m_pOperate->Load(szFile);
115 bool bRet = QMetaObject::invokeMethod(
116 m_pOperate,
117 "Load",
118 Qt::DirectConnection,
119 Q_RETURN_ARG(int, nRet),
120 Q_ARG(QString, szFile));
121 if(!bRet) {
122 qCritical(log) << "Call" << m_pOperate->metaObject()->className()
123 + QString("::") + "Load(QString szFile) fail." << szFile;
124 return nullptr;
125 }
126 if(nRet) {
127 qCritical(log) << "Load parameter fail" << nRet;
128 DeleteOperate(m_pOperate);
129 return nullptr;
130 }
131 }
132 return m_pOperate;
133}
134
135COperate* CPluginWakeOnLan::OnCreateOperate(const QString &szId)
136{
137 qDebug(log) << Q_FUNC_INFO;
138 if(Id() == szId)
139 {
140 return new COperateWakeOnLan(this);
141 }
142 return nullptr;
143}
144
146{
147 qDebug(log) << Q_FUNC_INFO;
148 Q_ASSERT(m_pOperate == p);
149 m_pOperate = nullptr;
150 return CPlugin::DeleteOperate(p);
151}
152
153const QString CPluginWakeOnLan::Protocol() const
154{
155 return QString();
156}
局域网唤醒操作接口
操作接口。
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 实例。仅由 CClient 调用
插件接口
Definition Plugin.h:15
virtual Q_INVOKABLE int DeleteOperate(COperate *p)
Delete COperate
Definition Plugin.cpp:126
virtual const QString Id()
标识。默认: Type() + ":" + Protocol() + ":" + Name()
Definition Plugin.cpp:68
virtual Q_INVOKABLE COperate * CreateOperate(const QString &szId, CParameterPlugin *para)
新建 COperate 实例。仅由 CClient 调用
Definition Plugin.cpp:84