MythTV master
basehandler.cpp
Go to the documentation of this file.
1#include <QtGlobal>
2#if QT_VERSION >= QT_VERSION_CHECK(6,5,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 {
141 strlist << QString::number(uptime.count());
142 }
143 else
144 {
145 strlist << "ERROR";
146 strlist << "Could not determine uptime.";
147 }
148
149 sock->WriteStringList(strlist);
150 return true;
151}
152
159{
160 QStringList strlist;
161
162 strlist << gCoreContext->GetHostName();
163
164 sock->WriteStringList(strlist);
165 return true;
166}
167
174{
175 QStringList strlist;
176 int totalMB = 0;
177 int freeMB = 0;
178 int totalVM = 0;
179 int freeVM = 0;
180
181 if (getMemStats(totalMB, freeMB, totalVM, freeVM))
182 {
183 strlist << QString::number(totalMB) << QString::number(freeMB)
184 << QString::number(totalVM) << QString::number(freeVM);
185 }
186 else
187 {
188 strlist << "ERROR"
189 << "Could not determine memory stats.";
190 }
191
192 sock->WriteStringList(strlist);
193 return true;
194}
195
202{
203 QStringList strlist;
204 strlist << MythTZ::getTimeZoneID()
205 << QString::number(MythTZ::calc_utc_offset())
207
208 sock->WriteStringList(strlist);
209 return true;
210}
211
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