diff options
Diffstat (limited to 'src/server/bnetserver/Server/SessionManager.h')
-rw-r--r-- | src/server/bnetserver/Server/SessionManager.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/server/bnetserver/Server/SessionManager.h b/src/server/bnetserver/Server/SessionManager.h new file mode 100644 index 00000000000..10e7196e4d8 --- /dev/null +++ b/src/server/bnetserver/Server/SessionManager.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef SessionManager_h__ +#define SessionManager_h__ + +#include "Session.h" +#include "SocketMgr.h" + +namespace Battlenet +{ +#pragma pack(push, 1) + + struct SessionInfo + { + uint32 AccountId; + uint32 GameAccountIndex; + + bool operator<(SessionInfo const& right) const + { + return memcmp(this, &right, sizeof(SessionInfo)) < 0; + } + }; + +#pragma pack(pop) + + class SessionManager : SocketMgr<Session> + { + typedef SocketMgr<Session> BaseSocketMgr; + + public: + static SessionManager& Instance() + { + static SessionManager instance; + return instance; + } + + bool StartNetwork(boost::asio::io_service& service, std::string const& bindIp, uint16 port) override; + + // noop for now, will be needed later to broadcast realmlist updates for example + void AddSession(Session* /*session*/) { } + + void RemoveSession(Session* /*session*/) { } + + protected: + NetworkThread<Session>* CreateThreads() const override; + + private: + static void OnSocketAccept(tcp::socket&& sock); + + std::map<SessionInfo, Session> _sessions; + }; +} + +#define sSessionMgr Battlenet::SessionManager::Instance() + +#endif // SessionManager_h__ |