From c24e8a3fa97e1d45e6c24b395b94d4ca04bcc6c7 Mon Sep 17 00:00:00 2001 From: lotodore Date: Sat, 3 Jan 2015 12:38:33 +0100 Subject: [PATCH] Fixing problem with subscription request message. --- src/net/common/clientstate.cpp | 2 + src/net/common/clientthread.cpp | 2 + src/net/common/serverlobbythread.cpp | 45 ++++++++++--------- .../validation/lobbymessagevalidator.cpp | 12 +++++ src/net/serverlobbythread.h | 2 +- 5 files changed, 41 insertions(+), 22 deletions(-) diff --git a/src/net/common/clientstate.cpp b/src/net/common/clientstate.cpp index fe49de6a..7e8f04b1 100644 --- a/src/net/common/clientstate.cpp +++ b/src/net/common/clientstate.cpp @@ -590,6 +590,8 @@ AbstractClientStateReceiving::HandleLobbyMsg(boost::shared_ptr cli } else { client->SetUnknownPlayer(playerId); } + } else if (lobbyMsg.messagetype() == LobbyMessage::Type_SubscriptionReplyMessage) { + // Ignore for now. } else if (lobbyMsg.messagetype() == LobbyMessage::Type_TimeoutWarningMessage) { const TimeoutWarningMessage &tmpTimeout = lobbyMsg.timeoutwarningmessage(); client->GetCallback().SignalNetClientShowTimeoutDialog((NetTimeoutReason)tmpTimeout.timeoutreason(), tmpTimeout.remainingseconds()); diff --git a/src/net/common/clientthread.cpp b/src/net/common/clientthread.cpp index c61d5e1b..d60a5351 100644 --- a/src/net/common/clientthread.cpp +++ b/src/net/common/clientthread.cpp @@ -1012,6 +1012,7 @@ ClientThread::UnsubscribeLobbyMsg() LobbyMessage *netLobby = packet->GetMsg()->mutable_lobbymessage(); netLobby->set_messagetype(LobbyMessage::Type_SubscriptionRequestMessage); SubscriptionRequestMessage *netRequest = netLobby->mutable_subscriptionrequestmessage(); + netRequest->set_requestid(1); netRequest->set_subscriptionaction(SubscriptionRequestMessage::unsubscribeGameList); GetSender().Send(GetContext().GetSessionData(), packet); GetContext().SetSubscribeLobbyMsg(false); @@ -1030,6 +1031,7 @@ ClientThread::ResubscribeLobbyMsg() LobbyMessage *netLobby = packet->GetMsg()->mutable_lobbymessage(); netLobby->set_messagetype(LobbyMessage::Type_SubscriptionRequestMessage); SubscriptionRequestMessage *netRequest = netLobby->mutable_subscriptionrequestmessage(); + netRequest->set_requestid(1); netRequest->set_subscriptionaction(SubscriptionRequestMessage::resubscribeGameList); GetSender().Send(GetContext().GetSessionData(), packet); GetContext().SetSubscribeLobbyMsg(true); diff --git a/src/net/common/serverlobbythread.cpp b/src/net/common/serverlobbythread.cpp index 4cece7f8..4edf3cb4 100644 --- a/src/net/common/serverlobbythread.cpp +++ b/src/net/common/serverlobbythread.cpp @@ -449,12 +449,6 @@ ServerLobbyThread::CloseSession(boost::shared_ptr session) } } -void -ServerLobbyThread::ResubscribeLobbyMsg(boost::shared_ptr session) -{ - InternalResubscribeMsg(session); -} - void ServerLobbyThread::NotifyPlayerJoinedLobby(unsigned playerId) { @@ -999,17 +993,13 @@ ServerLobbyThread::HandlePacket(boost::shared_ptr session, boost::s SessionError(session, ERR_SOCK_INVALID_STATE); } } else { - if (lobbyMsg.messagetype() == LobbyMessage::Type_PlayerInfoRequestMessage) + if (lobbyMsg.messagetype() == LobbyMessage::Type_PlayerInfoRequestMessage) { HandleNetPacketRetrievePlayerInfo(session, lobbyMsg.playerinforequestmessage()); - else if (lobbyMsg.messagetype() == LobbyMessage::Type_AvatarRequestMessage) + } else if (lobbyMsg.messagetype() == LobbyMessage::Type_AvatarRequestMessage) { HandleNetPacketRetrieveAvatar(session, lobbyMsg.avatarrequestmessage()); - else if (lobbyMsg.messagetype() == LobbyMessage::Type_ResetTimeoutMessage) { + } else if (lobbyMsg.messagetype() == LobbyMessage::Type_ResetTimeoutMessage) { } else if (lobbyMsg.messagetype() == LobbyMessage::Type_SubscriptionRequestMessage) { - const SubscriptionRequestMessage &subscriptionRequest = lobbyMsg.subscriptionrequestmessage(); - if (subscriptionRequest.subscriptionaction() == SubscriptionRequestMessage::resubscribeGameList) - InternalResubscribeMsg(session); - else - session->ResetWantsLobbyMsg(); + HandleNetPacketSubscriptionRequest(session, lobbyMsg.subscriptionrequestmessage()); } else if (lobbyMsg.messagetype() == LobbyMessage::Type_CreateGameMessage) { HandleNetPacketCreateGame(session, lobbyMsg.creategamemessage()); } else if (lobbyMsg.messagetype() == LobbyMessage::Type_JoinGameMessage) { @@ -1026,13 +1016,6 @@ ServerLobbyThread::HandlePacket(boost::shared_ptr session, boost::s HandleNetPacketAdminRemoveGame(session, lobbyMsg.adminremovegamemessage()); } else if (lobbyMsg.messagetype() == LobbyMessage::Type_AdminBanPlayerMessage) { HandleNetPacketAdminBanPlayer(session, lobbyMsg.adminbanplayermessage()); - } else if (lobbyMsg.messagetype() == LobbyMessage::Type_SubscriptionRequestMessage) { - const SubscriptionRequestMessage &netSubscription = lobbyMsg.subscriptionrequestmessage(); - if (netSubscription.subscriptionaction() == SubscriptionRequestMessage::resubscribeGameList) { - if (!session->WantsLobbyMsg()) - ResubscribeLobbyMsg(session); - } else - session->ResetWantsLobbyMsg(); } else if (lobbyMsg.messagetype() == LobbyMessage::Type_ReportAvatarMessage) { HandleNetPacketReportAvatar(session, lobbyMsg.reportavatarmessage()); } else { @@ -1353,6 +1336,26 @@ ServerLobbyThread::HandleNetPacketRetrieveAvatar(boost::shared_ptr } } + +void +ServerLobbyThread::HandleNetPacketSubscriptionRequest(boost::shared_ptr session, const SubscriptionRequestMessage &subscriptionRequest) +{ + if (subscriptionRequest.subscriptionaction() == SubscriptionRequestMessage::resubscribeGameList) { + InternalResubscribeMsg(session); + } else { + session->ResetWantsLobbyMsg(); + } + boost::shared_ptr packet(new NetPacket); + packet->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage); + LobbyMessage *netLobby = packet->GetMsg()->mutable_lobbymessage(); + netLobby->set_messagetype(LobbyMessage::Type_SubscriptionReplyMessage); + SubscriptionReplyMessage *netReply = netLobby->mutable_subscriptionreplymessage(); + netReply->set_requestid(subscriptionRequest.requestid()); + netReply->set_ack(true); + + GetSender().Send(session, packet); +} + void ServerLobbyThread::HandleNetPacketCreateGame(boost::shared_ptr session, const CreateGameMessage &newGame) { diff --git a/src/net/common/validation/lobbymessagevalidator.cpp b/src/net/common/validation/lobbymessagevalidator.cpp index 73c4c4cf..c6487a89 100644 --- a/src/net/common/validation/lobbymessagevalidator.cpp +++ b/src/net/common/validation/lobbymessagevalidator.cpp @@ -51,6 +51,7 @@ LobbyMessageValidator::LobbyMessageValidator() m_validationMap.insert(make_pair(LobbyMessage_LobbyMessageType_Type_PlayerInfoRequestMessage, ValidatePlayerInfoRequestMessage)); m_validationMap.insert(make_pair(LobbyMessage_LobbyMessageType_Type_PlayerInfoReplyMessage, ValidatePlayerInfoReplyMessage)); m_validationMap.insert(make_pair(LobbyMessage_LobbyMessageType_Type_SubscriptionRequestMessage, ValidateSubscriptionRequestMessage)); + m_validationMap.insert(make_pair(LobbyMessage_LobbyMessageType_Type_SubscriptionReplyMessage, ValidateSubscriptionReplyMessage)); m_validationMap.insert(make_pair(LobbyMessage_LobbyMessageType_Type_CreateGameMessage, ValidateCreateGameMessage)); m_validationMap.insert(make_pair(LobbyMessage_LobbyMessageType_Type_JoinGameMessage, ValidateJoinGameMessage)); m_validationMap.insert(make_pair(LobbyMessage_LobbyMessageType_Type_RejoinGameMessage, ValidateRejoinGameMessage)); @@ -300,6 +301,17 @@ LobbyMessageValidator::ValidateSubscriptionRequestMessage(const LobbyMessage &ms return retVal; } +bool +LobbyMessageValidator::ValidateSubscriptionReplyMessage(const LobbyMessage &msg) +{ + bool retVal = false; + if (msg.has_subscriptionreplymessage()) { + //const SubscriptionReplyMessage &subscribe = msg.subscriptionreplymessage(); + retVal = true; + } + return retVal; +} + bool LobbyMessageValidator::ValidateCreateGameMessage(const LobbyMessage &msg) { diff --git a/src/net/serverlobbythread.h b/src/net/serverlobbythread.h index 8ec31779..31234450 100644 --- a/src/net/serverlobbythread.h +++ b/src/net/serverlobbythread.h @@ -75,7 +75,6 @@ public: void ReAddSession(boost::shared_ptr session, int reason, unsigned gameId); void MoveSessionToGame(boost::shared_ptr game, boost::shared_ptr session, bool autoLeave, bool spectateOnly); void SessionError(boost::shared_ptr session, int errorCode); - void ResubscribeLobbyMsg(boost::shared_ptr session); void NotifyPlayerJoinedLobby(unsigned playerId); void NotifyPlayerLeftLobby(unsigned playerId); void NotifyPlayerJoinedGame(unsigned gameId, unsigned playerId); @@ -152,6 +151,7 @@ protected: void HandleNetPacketAvatarEnd(boost::shared_ptr session, const AvatarEndMessage &avatarEnd); void HandleNetPacketRetrievePlayerInfo(boost::shared_ptr session, const PlayerInfoRequestMessage &playerInfoRequest); void HandleNetPacketRetrieveAvatar(boost::shared_ptr session, const AvatarRequestMessage &retrieveAvatar); + void HandleNetPacketSubscriptionRequest(boost::shared_ptr session, const SubscriptionRequestMessage &subscriptionRequest); void HandleNetPacketCreateGame(boost::shared_ptr session, const CreateGameMessage &createGame); void HandleNetPacketJoinGame(boost::shared_ptr session, const JoinGameMessage &joinGame); void HandleNetPacketRejoinGame(boost::shared_ptr session, const RejoinGameMessage &rejoinGame);