From 8a23aa89a58d3a90d5851b449b5552e1fcdcaded Mon Sep 17 00:00:00 2001 From: rtk0c Date: Mon, 27 Jun 2022 00:13:08 +0000 Subject: (From git) Initial server setup git-svn-id: file:///home/arch/svn/epistmool/trunk@4 71f44415-077c-4ad7-a976-72ddbf76608f --- server-v1/source/EpistmoolServer/Session.hpp | 59 ++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 server-v1/source/EpistmoolServer/Session.hpp (limited to 'server-v1/source/EpistmoolServer/Session.hpp') diff --git a/server-v1/source/EpistmoolServer/Session.hpp b/server-v1/source/EpistmoolServer/Session.hpp new file mode 100644 index 0000000..931c428 --- /dev/null +++ b/server-v1/source/EpistmoolServer/Session.hpp @@ -0,0 +1,59 @@ +#pragma once + +#include "EpistmoolServer/Connection.hpp" + +#include +#include +#include +#include + +namespace Epistmool::Server { + +struct SessionId +{ + int index; + + static SessionId makeInvalid(); + bool isInvalid() const; +}; + +class Session +{ + friend class SessionManager; + +private: + std::vector mConnections; + SessionId mSessionId; + +public: + Session(SessionId id); + + SessionId getSessionId() const; + const std::vector& getConnections() const; +}; + +class SessionManager : public QObject +{ + Q_OBJECT + + friend class Session; + +private: + // Use this intead of QHash for 1. pointer stability 2. Session is a move-only type + std::unordered_map mSessions; + QMultiHash mConnection2SessionMap; + int mNextIndex; + +public: + explicit SessionManager(QObject* parent = nullptr); + + Session* findOrCreateSession(SessionId id); + Session* findSession(SessionId id); + + void addConnection(SessionId id, ConnectionId connId); + +public slots: + void dropConnection(Epistmool::Server::ConnectionId connId); +}; + +} // namespace Epistmool::Server -- cgit v1.2.3-70-g09d2