aboutsummaryrefslogtreecommitdiff
path: root/src/server/bnetserver
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-09-21 21:59:59 +0200
committerShauren <shauren.trinity@gmail.com>2017-09-21 21:59:59 +0200
commit3269a68427bcfa200837281c336cbedc3d114dd1 (patch)
treefc69a05185a21533af4133a8f2186850889d52b8 /src/server/bnetserver
parent115dffde983019acb1f167583b60f0ce1aaa90de (diff)
Core/Bnet: Implement a way to handle turn protobuf service calls into async requests
Diffstat (limited to 'src/server/bnetserver')
-rw-r--r--src/server/bnetserver/Services/AccountService.cpp4
-rw-r--r--src/server/bnetserver/Services/AccountService.h4
-rw-r--r--src/server/bnetserver/Services/AuthenticationService.cpp11
-rw-r--r--src/server/bnetserver/Services/AuthenticationService.h4
-rw-r--r--src/server/bnetserver/Services/ConnectionService.cpp2
-rw-r--r--src/server/bnetserver/Services/ConnectionService.h2
-rw-r--r--src/server/bnetserver/Services/GameUtilitiesService.cpp4
-rw-r--r--src/server/bnetserver/Services/GameUtilitiesService.h4
-rw-r--r--src/server/bnetserver/Services/ServiceDispatcher.cpp2
-rw-r--r--src/server/bnetserver/Services/ServiceDispatcher.h6
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;
};
}