From a01741846afbf2edf223287cacb5f1077a5fd40c Mon Sep 17 00:00:00 2001 From: lotodore Date: Tue, 30 Mar 2010 13:02:43 +0000 Subject: [PATCH] Next steps for invitation system. --- .../qt/gamelobbydialog/gamelobbydialogimpl.cpp | 2 +- src/net/common/clientstate.cpp | 16 ++++++++++++++++ src/net/common/servergamestate.cpp | 14 +++++++++++++- src/net/common/serverlobbythread.cpp | 9 +++++++-- src/net/serverlobbythread.h | 2 +- 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp index 862d1bed..2e9f2023 100644 --- a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp +++ b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp @@ -1326,7 +1326,7 @@ void gameLobbyDialogImpl::invitePlayerToCurrentGame() { if(!treeWidget_NickList->selectedItems().isEmpty()) { mySession->invitePlayerToCurrentGame(treeWidget_NickList->selectedItems().at(0)->data(0, Qt::UserRole).toUInt()); - }\ + } } void gameLobbyDialogImpl::showInfoMsgBox() diff --git a/src/net/common/clientstate.cpp b/src/net/common/clientstate.cpp index c4e4b94d..53981248 100644 --- a/src/net/common/clientstate.cpp +++ b/src/net/common/clientstate.cpp @@ -1486,6 +1486,22 @@ ClientStateWaitGame::InternalHandlePacket(boost::shared_ptr client client->AddPlayerData(playerData); } } + else if (tmpPacket->GetMsg()->present == PokerTHMessage_PR_inviteNotifyMessage) + { + InviteNotifyMessage_t *netInvNotify = &tmpPacket->GetMsg()->choice.inviteNotifyMessage; + client->GetCallback()->SignalPlayerGameInvitation( + netInvNotify->gameId, + netInvNotify->playerIdWho, + netInvNotify->playerIdByWhom); + } + else if (tmpPacket->GetMsg()->present == PokerTHMessage_PR_rejectInvNotifyMessage) + { + RejectInvNotifyMessage_t *netRejNotify = &tmpPacket->GetMsg()->choice.rejectInvNotifyMessage; + client->GetCallback()->SignalPlayerGameInvitation( + netRejNotify->gameId, + netRejNotify->playerId, + static_cast(netRejNotify->playerRejectReason)); + } } //----------------------------------------------------------------------------- diff --git a/src/net/common/servergamestate.cpp b/src/net/common/servergamestate.cpp index 0fcf6b71..49ff3fcd 100644 --- a/src/net/common/servergamestate.cpp +++ b/src/net/common/servergamestate.cpp @@ -475,8 +475,20 @@ ServerGameStateInit::InternalProcessPacket(boost::shared_ptr server, netInvNotif->playerIdByWhom = session.playerData->GetUniqueId(); netInvNotif->playerIdWho = netInvite->playerId; - server->GetLobbyThread().SendToLobbyPlayer(netInvite->playerId, packet); + bool requestSent = server->GetLobbyThread().SendToLobbyPlayer(netInvite->playerId, packet); server->SendToAllPlayers(packet, SessionData::Game); + if (!requestSent) + { + // Player is not in lobby - send reject message. + boost::shared_ptr p2(new NetPacket(NetPacket::Alloc)); + p2->GetMsg()->present = PokerTHMessage_PR_rejectInvNotifyMessage; + RejectInvNotifyMessage_t *netRejNotif = &p2->GetMsg()->choice.rejectInvNotifyMessage; + netRejNotif->gameId = netInvite->gameId; + netRejNotif->playerId = netInvite->playerId; + netRejNotif->playerRejectReason = RejectGameInvReason_busy; + + server->SendToAllPlayers(p2, SessionData::Game); + } } } else if (packet->GetMsg()->present == PokerTHMessage_PR_resetTimeoutMessage) diff --git a/src/net/common/serverlobbythread.cpp b/src/net/common/serverlobbythread.cpp index 913fbfbd..66d61710 100644 --- a/src/net/common/serverlobbythread.cpp +++ b/src/net/common/serverlobbythread.cpp @@ -564,14 +564,19 @@ ServerLobbyThread::RemoveComputerPlayer(boost::shared_ptr player) m_computerPlayers.erase(player->GetUniqueId()); } -void +bool ServerLobbyThread::SendToLobbyPlayer(unsigned playerId, boost::shared_ptr packet) { + bool retVal = false; SessionWrapper tmpSession = m_sessionManager.GetSessionByUniquePlayerId(playerId); if (tmpSession.sessionData) + { GetSender().Send(tmpSession.sessionData, packet); + retVal = true; + } + return retVal; } - + AvatarManager & ServerLobbyThread::GetAvatarManager() { diff --git a/src/net/serverlobbythread.h b/src/net/serverlobbythread.h index 9d744552..a2f96467 100644 --- a/src/net/serverlobbythread.h +++ b/src/net/serverlobbythread.h @@ -90,7 +90,7 @@ public: void AddComputerPlayer(boost::shared_ptr player); void RemoveComputerPlayer(boost::shared_ptr player); - void SendToLobbyPlayer(unsigned playerId, boost::shared_ptr packet); + bool SendToLobbyPlayer(unsigned playerId, boost::shared_ptr packet); u_int32_t GetNextUniquePlayerId(); u_int32_t GetNextGameId();