From 1ef31ba752ed2ab7bcc30c11265d217b383dec4b Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 13 Oct 2014 17:22:24 +0200 Subject: Battle.net: Implemented cache stream items --- src/server/bnetserver/Server/ModuleManager.cpp | 3 ++- src/server/bnetserver/Server/Session.cpp | 11 +++++++++++ src/server/bnetserver/Server/Session.h | 3 +++ src/server/bnetserver/Server/SessionManager.cpp | 2 ++ src/server/bnetserver/Server/SessionManager.h | 2 ++ 5 files changed, 20 insertions(+), 1 deletion(-) (limited to 'src/server/bnetserver/Server') diff --git a/src/server/bnetserver/Server/ModuleManager.cpp b/src/server/bnetserver/Server/ModuleManager.cpp index 8dc43136739..05cee2ff42e 100644 --- a/src/server/bnetserver/Server/ModuleManager.cpp +++ b/src/server/bnetserver/Server/ModuleManager.cpp @@ -51,7 +51,8 @@ void Battlenet::ModuleManager::Load() Battlenet::ModuleInfo* Battlenet::ModuleManager::CreateModule(std::string const& os, std::string const& name) const { ModuleKey key { os, name }; - ASSERT(_modules.count(key)); + if (!_modules.count(key)) + return nullptr; return new ModuleInfo(*_modules.at(key)); } diff --git a/src/server/bnetserver/Server/Session.cpp b/src/server/bnetserver/Server/Session.cpp index 7090c1f0ca7..9a5f60b296e 100644 --- a/src/server/bnetserver/Server/Session.cpp +++ b/src/server/bnetserver/Server/Session.cpp @@ -477,6 +477,17 @@ void Battlenet::Session::HandleSocialNetworkCheckConnected(Friends::SocialNetwor AsyncWrite(socialNetworkCheckConnectedResult); } +void Battlenet::Session::HandleGetStreamItemsRequest(Cache::GetStreamItemsRequest const& getStreamItemsRequest) +{ + if (ModuleInfo* module = sModuleMgr->CreateModule(getStreamItemsRequest.Locale, getStreamItemsRequest.ItemName)) + { + Cache::GetStreamItemsResponse* getStreamItemsResponse = new Cache::GetStreamItemsResponse(); + getStreamItemsResponse->Index = getStreamItemsRequest.Index; + getStreamItemsResponse->Modules.push_back(module); + AsyncWrite(getStreamItemsResponse); + } +} + inline std::string PacketToStringHelper(Battlenet::ClientPacket const* packet) { if (sLog->ShouldLog("session.packets", LOG_LEVEL_TRACE)) diff --git a/src/server/bnetserver/Server/Session.h b/src/server/bnetserver/Server/Session.h index b2546c70cc6..a2c587841a4 100644 --- a/src/server/bnetserver/Server/Session.h +++ b/src/server/bnetserver/Server/Session.h @@ -81,6 +81,9 @@ namespace Battlenet // Friends void HandleSocialNetworkCheckConnected(Friends::SocialNetworkCheckConnected const& socialNetworkCheckConnected); + // Cache + void HandleGetStreamItemsRequest(Cache::GetStreamItemsRequest const& getStreamItemsRequest); + void Start() override; void UpdateRealms(std::vector& realms, std::vector& deletedRealms); diff --git a/src/server/bnetserver/Server/SessionManager.cpp b/src/server/bnetserver/Server/SessionManager.cpp index caa17364038..8dcee55ec6c 100644 --- a/src/server/bnetserver/Server/SessionManager.cpp +++ b/src/server/bnetserver/Server/SessionManager.cpp @@ -40,10 +40,12 @@ void Battlenet::SessionManager::AddSession(Session* session) { std::unique_lock lock(_sessionMutex); _sessions[{ session->GetAccountId(), session->GetGameAccountId() }] = session; + _sessionsByAccountId[session->GetAccountId()].push_back(session); } void Battlenet::SessionManager::RemoveSession(Session* session) { std::unique_lock lock(_sessionMutex); _sessions.erase({ session->GetAccountId(), session->GetGameAccountId() }); + _sessionsByAccountId[session->GetAccountId()].remove(session); } diff --git a/src/server/bnetserver/Server/SessionManager.h b/src/server/bnetserver/Server/SessionManager.h index 4f8e0d9fa97..bbd78c052d2 100644 --- a/src/server/bnetserver/Server/SessionManager.h +++ b/src/server/bnetserver/Server/SessionManager.h @@ -44,6 +44,7 @@ namespace Battlenet { typedef SocketMgr BaseSocketMgr; typedef std::map SessionMap; + typedef std::map> SessionByAccountMap; public: static SessionManager& Instance() @@ -74,6 +75,7 @@ namespace Battlenet static void OnSocketAccept(tcp::socket&& sock); SessionMap _sessions; + SessionByAccountMap _sessionsByAccountId; boost::shared_mutex _sessionMutex; }; } -- cgit v1.2.3