diff options
| author | Shauren <shauren.trinity@gmail.com> | 2017-09-21 21:59:59 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2017-09-21 21:59:59 +0200 |
| commit | 3269a68427bcfa200837281c336cbedc3d114dd1 (patch) | |
| tree | fc69a05185a21533af4133a8f2186850889d52b8 /src/server/bnetserver | |
| parent | 115dffde983019acb1f167583b60f0ce1aaa90de (diff) | |
Core/Bnet: Implement a way to handle turn protobuf service calls into async requests
Diffstat (limited to 'src/server/bnetserver')
10 files changed, 25 insertions, 18 deletions
diff --git a/src/server/bnetserver/Services/AccountService.cpp b/src/server/bnetserver/Services/AccountService.cpp index 7e8bd619109..1accd4a6491 100644 --- a/src/server/bnetserver/Services/AccountService.cpp +++ b/src/server/bnetserver/Services/AccountService.cpp @@ -22,12 +22,12 @@ Battlenet::Services::Account::Account(Session* session) : AccountService(session { } -uint32 Battlenet::Services::Account::HandleGetAccountState(account::v1::GetAccountStateRequest const* request, account::v1::GetAccountStateResponse* response) +uint32 Battlenet::Services::Account::HandleGetAccountState(account::v1::GetAccountStateRequest const* request, account::v1::GetAccountStateResponse* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& /*continuation*/) { return _session->HandleGetAccountState(request, response); } -uint32 Battlenet::Services::Account::HandleGetGameAccountState(account::v1::GetGameAccountStateRequest const* request, account::v1::GetGameAccountStateResponse* response) +uint32 Battlenet::Services::Account::HandleGetGameAccountState(account::v1::GetGameAccountStateRequest const* request, account::v1::GetGameAccountStateResponse* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& /*continuation*/) { return _session->HandleGetGameAccountState(request, response); } diff --git a/src/server/bnetserver/Services/AccountService.h b/src/server/bnetserver/Services/AccountService.h index 9f9e7d89933..f543094f8dc 100644 --- a/src/server/bnetserver/Services/AccountService.h +++ b/src/server/bnetserver/Services/AccountService.h @@ -35,8 +35,8 @@ namespace Battlenet public: Account(Session* session); - uint32 HandleGetAccountState(account::v1::GetAccountStateRequest const* request, account::v1::GetAccountStateResponse* response) override; - uint32 HandleGetGameAccountState(account::v1::GetGameAccountStateRequest const* request, account::v1::GetGameAccountStateResponse* response) override; + uint32 HandleGetAccountState(account::v1::GetAccountStateRequest const* request, account::v1::GetAccountStateResponse* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& continuation) override; + uint32 HandleGetGameAccountState(account::v1::GetGameAccountStateRequest const* request, account::v1::GetGameAccountStateResponse* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& continuation) override; }; } } diff --git a/src/server/bnetserver/Services/AuthenticationService.cpp b/src/server/bnetserver/Services/AuthenticationService.cpp index 20c0ebe165c..45e9a0920f2 100644 --- a/src/server/bnetserver/Services/AuthenticationService.cpp +++ b/src/server/bnetserver/Services/AuthenticationService.cpp @@ -22,12 +22,17 @@ Battlenet::Services::Authentication::Authentication(Session* session) : Authenti { } -uint32 Battlenet::Services::Authentication::HandleLogon(authentication::v1::LogonRequest const* request, NoData* /*respons*/) +uint32 Battlenet::Services::Authentication::HandleLogon(authentication::v1::LogonRequest const* request, NoData* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& continuation) { - return _session->HandleLogon(request); + uint32 status = _session->HandleLogon(request); + // turning this into async call will be done by stealing the continuation and calling it when done + // just a test here + continuation(this, status, response); + continuation = nullptr; + return status; } -uint32 Battlenet::Services::Authentication::HandleVerifyWebCredentials(authentication::v1::VerifyWebCredentialsRequest const* request, NoData* /*respons*/) +uint32 Battlenet::Services::Authentication::HandleVerifyWebCredentials(authentication::v1::VerifyWebCredentialsRequest const* request, NoData* /*response*/, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& continuation) { return _session->HandleVerifyWebCredentials(request); } diff --git a/src/server/bnetserver/Services/AuthenticationService.h b/src/server/bnetserver/Services/AuthenticationService.h index 6322361135a..76c82f9af22 100644 --- a/src/server/bnetserver/Services/AuthenticationService.h +++ b/src/server/bnetserver/Services/AuthenticationService.h @@ -35,8 +35,8 @@ namespace Battlenet public: Authentication(Session* session); - uint32 HandleLogon(authentication::v1::LogonRequest const* request, NoData* respons) override; - uint32 HandleVerifyWebCredentials(authentication::v1::VerifyWebCredentialsRequest const* request, NoData* respons) override; + uint32 HandleLogon(authentication::v1::LogonRequest const* request, NoData* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& continuation) override; + uint32 HandleVerifyWebCredentials(authentication::v1::VerifyWebCredentialsRequest const* request, NoData* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& continuation) override; }; } } diff --git a/src/server/bnetserver/Services/ConnectionService.cpp b/src/server/bnetserver/Services/ConnectionService.cpp index 2f6d5476682..b6988e7a265 100644 --- a/src/server/bnetserver/Services/ConnectionService.cpp +++ b/src/server/bnetserver/Services/ConnectionService.cpp @@ -26,7 +26,7 @@ Battlenet::Services::Connection::Connection(Session* session) : ConnectionServic { } -uint32 Battlenet::Services::Connection::HandleConnect(connection::v1::ConnectRequest const* request, connection::v1::ConnectResponse* response) +uint32 Battlenet::Services::Connection::HandleConnect(connection::v1::ConnectRequest const* request, connection::v1::ConnectResponse* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& /*continuation*/) { if (request->has_client_id()) response->mutable_client_id()->CopyFrom(request->client_id()); diff --git a/src/server/bnetserver/Services/ConnectionService.h b/src/server/bnetserver/Services/ConnectionService.h index 98f28c0a2dc..8d6fe8f2ce7 100644 --- a/src/server/bnetserver/Services/ConnectionService.h +++ b/src/server/bnetserver/Services/ConnectionService.h @@ -35,7 +35,7 @@ namespace Battlenet public: Connection(Session* session); - uint32 HandleConnect(connection::v1::ConnectRequest const* request, connection::v1::ConnectResponse* respons) override; + uint32 HandleConnect(connection::v1::ConnectRequest const* request, connection::v1::ConnectResponse* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& continuation) override; uint32 HandleKeepAlive(NoData const* request) override; uint32 HandleRequestDisconnect(connection::v1::DisconnectRequest const* request) override; diff --git a/src/server/bnetserver/Services/GameUtilitiesService.cpp b/src/server/bnetserver/Services/GameUtilitiesService.cpp index ba9df96eac8..02f1dca707e 100644 --- a/src/server/bnetserver/Services/GameUtilitiesService.cpp +++ b/src/server/bnetserver/Services/GameUtilitiesService.cpp @@ -22,12 +22,12 @@ Battlenet::Services::GameUtilities::GameUtilities(Session* session) : GameUtilit { } -uint32 Battlenet::Services::GameUtilities::HandleProcessClientRequest(game_utilities::v1::ClientRequest const* request, game_utilities::v1::ClientResponse* response) +uint32 Battlenet::Services::GameUtilities::HandleProcessClientRequest(game_utilities::v1::ClientRequest const* request, game_utilities::v1::ClientResponse* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& /*continuation*/) { return _session->HandleProcessClientRequest(request, response); } -uint32 Battlenet::Services::GameUtilities::HandleGetAllValuesForAttribute(game_utilities::v1::GetAllValuesForAttributeRequest const* request, game_utilities::v1::GetAllValuesForAttributeResponse* response) +uint32 Battlenet::Services::GameUtilities::HandleGetAllValuesForAttribute(game_utilities::v1::GetAllValuesForAttributeRequest const* request, game_utilities::v1::GetAllValuesForAttributeResponse* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& /*continuation*/) { return _session->HandleGetAllValuesForAttribute(request, response); } diff --git a/src/server/bnetserver/Services/GameUtilitiesService.h b/src/server/bnetserver/Services/GameUtilitiesService.h index fba84e3e4be..2f0811ef444 100644 --- a/src/server/bnetserver/Services/GameUtilitiesService.h +++ b/src/server/bnetserver/Services/GameUtilitiesService.h @@ -35,8 +35,8 @@ namespace Battlenet public: GameUtilities(Session* session); - uint32 HandleProcessClientRequest(game_utilities::v1::ClientRequest const* request, game_utilities::v1::ClientResponse* response) override; - uint32 HandleGetAllValuesForAttribute(game_utilities::v1::GetAllValuesForAttributeRequest const* request, game_utilities::v1::GetAllValuesForAttributeResponse* response) override; + uint32 HandleProcessClientRequest(game_utilities::v1::ClientRequest const* request, game_utilities::v1::ClientResponse* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& continuation) override; + uint32 HandleGetAllValuesForAttribute(game_utilities::v1::GetAllValuesForAttributeRequest const* request, game_utilities::v1::GetAllValuesForAttributeResponse* response, std::function<void(ServiceBase*, uint32, ::google::protobuf::Message const*)>& continuation) override; }; } } diff --git a/src/server/bnetserver/Services/ServiceDispatcher.cpp b/src/server/bnetserver/Services/ServiceDispatcher.cpp index d3eff79c0f0..08ccb0a4122 100644 --- a/src/server/bnetserver/Services/ServiceDispatcher.cpp +++ b/src/server/bnetserver/Services/ServiceDispatcher.cpp @@ -36,7 +36,7 @@ void Battlenet::ServiceDispatcher::Dispatch(Session* session, uint32 serviceHash { auto itr = _dispatchers.find(serviceHash); if (itr != _dispatchers.end()) - itr->second(session, token, methodId, std::forward<MessageBuffer>(buffer)); + itr->second(session, token, methodId, std::move(buffer)); else TC_LOG_DEBUG("session.rpc", "%s tried to call invalid service 0x%X", session->GetClientInfo().c_str(), serviceHash); } diff --git a/src/server/bnetserver/Services/ServiceDispatcher.h b/src/server/bnetserver/Services/ServiceDispatcher.h index 5838c2b80eb..cfeb055f86b 100644 --- a/src/server/bnetserver/Services/ServiceDispatcher.h +++ b/src/server/bnetserver/Services/ServiceDispatcher.h @@ -56,10 +56,12 @@ namespace Battlenet template<class Service> static void Dispatch(Session* session, uint32 token, uint32 methodId, MessageBuffer buffer) { - Service(session).CallServerMethod(token, methodId, std::forward<MessageBuffer>(buffer)); + Service(session).CallServerMethod(token, methodId, std::move(buffer)); } - std::unordered_map<uint32, std::function<void(Session*, uint32, uint32, MessageBuffer)>> _dispatchers; + typedef void(*ServiceMethod)(Session*, uint32, uint32, MessageBuffer); + // use identity hashing for map keys as they are already a hash (FNV1a of service name) + std::unordered_map<uint32, ServiceMethod, std::identity<uint32>> _dispatchers; }; } |
