Timesheets-Server
Timesheets server
Načítám...
Vyhledávám...
Nebylo nic nalezeno
sessionstore.cpp
Zobrazit dokumentaci tohoto souboru.
1
6
7#include "sessionstore.h"
8#include "httpsessionstore.h"
9#include "msettings.h"
10#include "json.h"
11#include <QFile>
12#include <QDateTime>
13#include <QVariant>
14#include <QVariantMap>
15#include <QJsonDocument>
16#include <QJsonObject>
17#include <QJsonArray>
18
19using namespace Httpd;
20
21SessionStore *SessionStore::m_sessionStore = NULL;
22
23SessionStore::SessionStore(const HobrasoftHttpd::HttpSettings *settings, QObject *parent) :
24 HobrasoftHttpd::HttpSessionStore(settings, parent) {
25 m_sessionStore = this;
26 load();
27
28 QTimer *timer = new QTimer(this);
29 timer->setInterval(60000);
30 timer->start();
31 connect(timer, &QTimer::timeout, this, &SessionStore::save);
32
33}
34
35SessionStore::~SessionStore() {
36 save();
37}
38
39
40SessionStore *SessionStore::sessionStore(const HobrasoftHttpd::HttpSettings *settings, QObject *parent) {
41 if (m_sessionStore == NULL) {
42 new SessionStore(settings, parent);
43 }
44 return m_sessionStore;
45}
46
48 QFile file(MSETTINGS->httpdSessionsFile());
49 if (!file.open(QIODevice::ReadOnly)) { return; }
50 QByteArray json = file.readAll();
51 file.close();
52 QVariant data = JSON::data(json);
53 QVariantList list = data.toList();
54 for (const QVariant& v : list) {
55 QVariantMap map = v.toMap();
56 HobrasoftHttpd::HttpSessionData d;
57 d.id = map.value("id").toByteArray();
58 d.lastAccess = QDateTime::fromString(map.value("lastAccess").toString(), Qt::ISODate);
59 QVariantHash values = map.value("values").toHash();
60 QHash<QString, QVariant> hash;
61 for (auto it = values.constBegin(); it != values.constEnd(); ++it) {
62 hash.insert(it.key(), it.value());
63 }
64 d.values = hash;
65 setSessionData(d);
66 }
67}
68
70 QVariantList list;
71 QList<HobrasoftHttpd::HttpSessionData> sessions = sessionsData();
72 for (const HobrasoftHttpd::HttpSessionData& d : sessions) {
73 QVariantMap map;
74 map["id"] = d.id;
75 map["lastAccess"] = d.lastAccess.toString(Qt::ISODate);
76 QVariantMap values;
77 QHashIterator<QString, QVariant> it(d.values);
78 while (it.hasNext()) {
79 it.next();
80 values.insert(it.key(), it.value());
81 }
82 map["values"] = values;
83 list << map;
84 }
85 QFile file(MSETTINGS->httpdSessionsFile());
86 if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { return; }
87 file.write(JSON::json(list));
88 file.close();
89}
90
91
Seesion store - zajišťuje singleton instanci třídy.
void load()
Loads sessions from the file configured in httpd/sessions-file.
static SessionStore * sessionStore(const HobrasoftHttpd::HttpSettings *settings=NULL, QObject *parent=NULL)
Vrací ukazatel na singleton instanci třídy.
void save()
Saves sessions to the file configured in httpd/sessions-file.
static QVariant data(const QByteArray &json)
Converts json to data.
Definition json.cpp:69
static QByteArray json(const QVariant &data)
Converts data to json.
Definition json.cpp:21
Jmenný prostor pro obsluhu konkrétních HTTP požadavků aplikace.