#include "Session.hpp" using namespace Epistmool::Server; namespace { constexpr int kInvalidSessionIndex = -1; } // namespace SessionId SessionId::makeInvalid() { return SessionId{ .index = kInvalidSessionIndex, }; } bool SessionId::isInvalid() const { return index == kInvalidSessionIndex; } SessionId Session::getSessionId() const { return mSessionId; } const std::vector& Session::getConnections() const { return mConnections; } Session::Session(SessionId id) : mSessionId{ id } { } // TODO delete session if isn't active for N period of time SessionManager::SessionManager(QObject* parent) : QObject(parent) { } Session* SessionManager::findOrCreateSession(SessionId id) { auto it = mSessions.find(id.index); if (it != mSessions.end()) { return &it->second; } else { SessionId newId{ mNextIndex++ }; auto [it, _] = mSessions.insert({ newId.index, Session(newId) }); return &it->second; } } Session* SessionManager::findSession(SessionId id) { auto it = mSessions.find(id.index); if (it != mSessions.end()) { return &it->second; } else { return nullptr; } } void SessionManager::addConnection(SessionId id, ConnectionId connId) { auto session = findSession(id); if (!session) return; session->mConnections.push_back(connId); mConnection2SessionMap.insert(connId.index, id.index); } void SessionManager::dropConnection(ConnectionId connId) { mConnection2SessionMap.remove(connId.index); }