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.cpp | 76 ++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 server-v1/source/EpistmoolServer/Session.cpp (limited to 'server-v1/source/EpistmoolServer/Session.cpp') diff --git a/server-v1/source/EpistmoolServer/Session.cpp b/server-v1/source/EpistmoolServer/Session.cpp new file mode 100644 index 0000000..6db51d8 --- /dev/null +++ b/server-v1/source/EpistmoolServer/Session.cpp @@ -0,0 +1,76 @@ +#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); +} -- cgit v1.2.3-70-g09d2