MythTV master
basehandler.cpp
Go to the documentation of this file.
1#include <QtGlobal>
2#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
3#include <QtSystemDetection>
4#endif
5#include <QString>
6#include <QStringList>
7
14
15#include "mythsocketmanager.h"
16#include "sockethandler.h"
18
20
22 QStringList &commands, QStringList &slist)
23{
24 if (commands.size() != 4)
25 return false;
26
27 bool blockShutdown = true;
28 if (commands[1] == "Playback")
29 blockShutdown = true;
30 else if (commands[1] == "Monitor")
31 blockShutdown = false;
32 else
33 return false;
34
35 const QString& hostname = commands[2];
36
37 int eventlevel = commands[3].toInt();
38 bool systemevents = ( (eventlevel == 1) || (eventlevel == 3));
39 bool normalevents = ( (eventlevel == 1) || (eventlevel == 2));
40
41 auto *handler = new SocketHandler(socket, m_parent, hostname);
42 socket->SetAnnounce(slist);
43
44 handler->BlockShutdown(blockShutdown);
45 handler->AllowStandardEvents(normalevents);
46 handler->AllowSystemEvents(systemevents);
47
48 m_parent->AddSocketHandler(handler);
49
50 handler->WriteStringList(QStringList("OK"));
51 handler->DecrRef();
52 handler = nullptr;
53
54 LOG(VB_GENERAL, LOG_DEBUG, QString("MainServer::ANN %1")
55 .arg(commands[1]));
56 LOG(VB_GENERAL, LOG_NOTICE, QString("adding: %1 as a client (events: %2)")
57 .arg(commands[2]).arg(eventlevel));
58 gCoreContext->SendSystemEvent(QString("CLIENT_CONNECTED HOSTNAME %1")
59 .arg(commands[2]));
60
61 return true;
62}
63
77 QStringList &commands,
78 QStringList &/*slist*/)
79{
80 const QString& command = commands[0];
81 bool res = false;
82
83 if (command == "QUERY_LOAD")
84 res = HandleQueryLoad(sock);
85 else if (command == "QUERY_UPTIME")
86 res = HandleQueryUptime(sock);
87 else if (command == "QUERY_HOSTNAME")
88 res = HandleQueryHostname(sock);
89 else if (command == "QUERY_MEMSTATS")
90 res = HandleQueryMemStats(sock);
91 else if (command == "QUERY_TIME_ZONE")
92 res = HandleQueryTimeZone(sock);
93
94 return res;
95}
96
104{
105 QStringList strlist;
106
107#if defined(Q_OS_WINDOWS) || defined(Q_OS_ANDROID)
108 strlist << "ERROR";
109 strlist << "getloadavg() not supported";
110#else
111 loadArray loads = getLoadAvgs();
112 if (loads[0] == -1)
113 {
114 strlist << "ERROR";
115 strlist << "getloadavg() failed";
116 }
117 else
118 {
119 strlist << QString::number(loads[0])
120 << QString::number(loads[1])
121 << QString::number(loads[2]);
122 }
123#endif
124
125 sock->WriteStringList(strlist);
126 return true;
127}
128
135{
136 QStringList strlist;
137 std::chrono::seconds uptime = 0s;
138
139 if (getUptime(uptime))
140 strlist << QString::number(uptime.count());
141 else
142 {
143 strlist << "ERROR";
144 strlist << "Could not determine uptime.";
145 }
146
147 sock->WriteStringList(strlist);
148 return true;
149}
150
157{
158 QStringList strlist;
159
160 strlist << gCoreContext->GetHostName();
161
162 sock->WriteStringList(strlist);
163 return true;
164}
165
172{
173 QStringList strlist;
174 int totalMB = 0;
175 int freeMB = 0;
176 int totalVM = 0;
177 int freeVM = 0;
178
179 if (getMemStats(totalMB, freeMB, totalVM, freeVM))
180 {
181 strlist << QString::number(totalMB) << QString::number(freeMB)
182 << QString::number(totalVM) << QString::number(freeVM);
183 }
184 else
185 {
186 strlist << "ERROR"
187 << "Could not determine memory stats.";
188 }
189
190 sock->WriteStringList(strlist);
191 return true;
192}
193
200{
201 QStringList strlist;
202 strlist << MythTZ::getTimeZoneID()
203 << QString::number(MythTZ::calc_utc_offset())
205
206 sock->WriteStringList(strlist);
207 return true;
208}
209
static bool HandleQueryLoad(SocketHandler *sock)
static bool HandleQueryHostname(SocketHandler *sock)
static bool HandleQueryMemStats(SocketHandler *sock)
static bool HandleQueryUptime(SocketHandler *sock)
bool HandleQuery(SocketHandler *sock, QStringList &commands, QStringList &slist) override
Dispatch query messages received from a client.
Definition: basehandler.cpp:76
bool HandleAnnounce(MythSocket *socket, QStringList &commands, QStringList &slist) override
Definition: basehandler.cpp:21
static bool HandleQueryTimeZone(SocketHandler *sock)
QString GetHostName(void)
void SendSystemEvent(const QString &msg)
void AddSocketHandler(SocketHandler *socket)
Class for communcating between myth backends and frontends.
Definition: mythsocket.h:26
void SetAnnounce(const QStringList &new_announce)
Definition: mythsocket.cpp:496
bool WriteStringList(const QStringList &strlist)
MythSocketManager * m_parent
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
bool getMemStats(int &totalMB, int &freeMB, int &totalVM, int &freeVM)
Returns memory statistics in megabytes.
loadArray getLoadAvgs(void)
Returns the system load averages.
bool getUptime(std::chrono::seconds &uptime)
Returns uptime statistics.
std::array< double, 3 > loadArray
Definition: mythmiscutil.h:26
QString current_iso_string(bool stripped)
Returns current Date and Time in UTC as a string.
Definition: mythdate.cpp:23
int calc_utc_offset(void)
QString getTimeZoneID(void)
Returns the zoneinfo time zone ID or as much time zone information as possible.
string hostname
Definition: caa.py:17