Work on spectator mode - joining as spectator now possible (on server side).
This commit is contained in:
+3
-2
@@ -223,6 +223,7 @@ message GameListNewMessage {
|
|||||||
repeated uint32 playerIds = 4 [packed = true];
|
repeated uint32 playerIds = 4 [packed = true];
|
||||||
required uint32 adminPlayerId = 5;
|
required uint32 adminPlayerId = 5;
|
||||||
required NetGameInfo gameInfo = 6;
|
required NetGameInfo gameInfo = 6;
|
||||||
|
repeated uint32 spectatorIds = 7 [packed = true];
|
||||||
}
|
}
|
||||||
|
|
||||||
message GameListUpdateMessage {
|
message GameListUpdateMessage {
|
||||||
@@ -288,8 +289,8 @@ message SubscriptionRequestMessage {
|
|||||||
message JoinExistingGameMessage {
|
message JoinExistingGameMessage {
|
||||||
required uint32 gameId = 1;
|
required uint32 gameId = 1;
|
||||||
optional string password = 2;
|
optional string password = 2;
|
||||||
optional bool autoLeave = 3;
|
optional bool autoLeave = 3 [default = false];
|
||||||
optional bool spectateOnly = 4;
|
optional bool spectateOnly = 4 [default = false];
|
||||||
}
|
}
|
||||||
|
|
||||||
message JoinNewGameMessage {
|
message JoinNewGameMessage {
|
||||||
|
|||||||
@@ -178,13 +178,13 @@ ServerGame::GetCurRound() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::SendToAllPlayers(boost::shared_ptr<NetPacket> packet, SessionData::State state)
|
ServerGame::SendToAllPlayers(boost::shared_ptr<NetPacket> packet, int state)
|
||||||
{
|
{
|
||||||
GetSessionManager().SendToAllSessions(GetLobbyThread().GetSender(), packet, state);
|
GetSessionManager().SendToAllSessions(GetLobbyThread().GetSender(), packet, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::SendToAllButOnePlayers(boost::shared_ptr<NetPacket> packet, SessionId except, SessionData::State state)
|
ServerGame::SendToAllButOnePlayers(boost::shared_ptr<NetPacket> packet, SessionId except, int state)
|
||||||
{
|
{
|
||||||
GetSessionManager().SendToAllButOneSessions(GetLobbyThread().GetSender(), packet, except, state);
|
GetSessionManager().SendToAllButOneSessions(GetLobbyThread().GetSender(), packet, except, state);
|
||||||
}
|
}
|
||||||
@@ -625,6 +625,12 @@ ServerGame::GetPlayerIdList() const
|
|||||||
return idList;
|
return idList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PlayerIdList
|
||||||
|
ServerGame::GetSpectatorIdList() const
|
||||||
|
{
|
||||||
|
return GetSessionManager().GetPlayerIdList(SessionData::Spectating);
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ServerGame::IsPlayerConnected(const std::string &name) const
|
ServerGame::IsPlayerConnected(const std::string &name) const
|
||||||
{
|
{
|
||||||
@@ -747,6 +753,22 @@ ServerGame::GetAndResetReactivatePlayers()
|
|||||||
return tmpList;
|
return tmpList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ServerGame::AddNewSpectator(unsigned playerId)
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(m_newSpectatorListMutex);
|
||||||
|
m_newSpectatorList.push_back(playerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerIdList
|
||||||
|
ServerGame::GetAndResetNewSpectators()
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(m_newSpectatorListMutex);
|
||||||
|
PlayerIdList tmpList(m_newSpectatorList);
|
||||||
|
m_newSpectatorList.clear();
|
||||||
|
return tmpList;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::SetNameReported()
|
ServerGame::SetNameReported()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ static void SendPlayerAction(ServerGame &server, boost::shared_ptr<PlayerInterfa
|
|||||||
netActionDone->set_playerid(player->getMyUniqueID());
|
netActionDone->set_playerid(player->getMyUniqueID());
|
||||||
netActionDone->set_playermoney(player->getMyCash());
|
netActionDone->set_playermoney(player->getMyCash());
|
||||||
netActionDone->set_totalplayerbet(player->getMySet());
|
netActionDone->set_totalplayerbet(player->getMySet());
|
||||||
server.SendToAllPlayers(packet, SessionData::Game);
|
server.SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SendNewRoundCards(ServerGame &server, Game &curGame, int state)
|
static void SendNewRoundCards(ServerGame &server, Game &curGame, int state)
|
||||||
@@ -122,7 +122,7 @@ static void SendNewRoundCards(ServerGame &server, Game &curGame, int state)
|
|||||||
netDealFlop->set_flopcard1(cards[0]);
|
netDealFlop->set_flopcard1(cards[0]);
|
||||||
netDealFlop->set_flopcard2(cards[1]);
|
netDealFlop->set_flopcard2(cards[1]);
|
||||||
netDealFlop->set_flopcard3(cards[2]);
|
netDealFlop->set_flopcard3(cards[2]);
|
||||||
server.SendToAllPlayers(packet, SessionData::Game);
|
server.SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GAME_STATE_TURN: {
|
case GAME_STATE_TURN: {
|
||||||
@@ -132,7 +132,7 @@ static void SendNewRoundCards(ServerGame &server, Game &curGame, int state)
|
|||||||
DealTurnCardMessage *netDealTurn = packet->GetMsg()->mutable_dealturncardmessage();
|
DealTurnCardMessage *netDealTurn = packet->GetMsg()->mutable_dealturncardmessage();
|
||||||
netDealTurn->set_gameid(server.GetId());
|
netDealTurn->set_gameid(server.GetId());
|
||||||
netDealTurn->set_turncard(cards[3]);
|
netDealTurn->set_turncard(cards[3]);
|
||||||
server.SendToAllPlayers(packet, SessionData::Game);
|
server.SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GAME_STATE_RIVER: {
|
case GAME_STATE_RIVER: {
|
||||||
@@ -142,7 +142,7 @@ static void SendNewRoundCards(ServerGame &server, Game &curGame, int state)
|
|||||||
DealRiverCardMessage *netDealRiver = packet->GetMsg()->mutable_dealrivercardmessage();
|
DealRiverCardMessage *netDealRiver = packet->GetMsg()->mutable_dealrivercardmessage();
|
||||||
netDealRiver->set_gameid(server.GetId());
|
netDealRiver->set_gameid(server.GetId());
|
||||||
netDealRiver->set_rivercard(cards[4]);
|
netDealRiver->set_rivercard(cards[4]);
|
||||||
server.SendToAllPlayers(packet, SessionData::Game);
|
server.SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default: {
|
default: {
|
||||||
@@ -286,7 +286,7 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
|
|||||||
netChat->set_playerid(session->GetPlayerData()->GetUniqueId());
|
netChat->set_playerid(session->GetPlayerData()->GetUniqueId());
|
||||||
netChat->set_chattype(ChatMessage::chatTypeGame);
|
netChat->set_chattype(ChatMessage::chatTypeGame);
|
||||||
netChat->set_chattext(netChatRequest.chattext());
|
netChat->set_chattext(netChatRequest.chattext());
|
||||||
server->SendToAllPlayers(packet, SessionData::Game);
|
server->SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating);
|
||||||
chatSent = true;
|
chatSent = true;
|
||||||
|
|
||||||
// Send the message to the chat cleaner bot for ranking games.
|
// Send the message to the chat cleaner bot for ranking games.
|
||||||
@@ -410,6 +410,37 @@ AbstractServerGameStateReceiving::CreateNetPacketJoinGameAck(const ServerGame &s
|
|||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::shared_ptr<NetPacket>
|
||||||
|
AbstractServerGameStateReceiving::CreateNetPacketHandStart(const ServerGame &server)
|
||||||
|
{
|
||||||
|
const Game &curGame = server.GetGame();
|
||||||
|
|
||||||
|
boost::shared_ptr<NetPacket> notifyCards(new NetPacket);
|
||||||
|
notifyCards->GetMsg()->set_messagetype(PokerTHMessage::Type_HandStartMessage);
|
||||||
|
HandStartMessage *netHandStart = notifyCards->GetMsg()->mutable_handstartmessage();
|
||||||
|
netHandStart->set_gameid(server.GetId());
|
||||||
|
|
||||||
|
PlayerListIterator player_i = curGame.getSeatsList()->begin();
|
||||||
|
PlayerListIterator player_end = curGame.getSeatsList()->end();
|
||||||
|
int playerCounter = 0;
|
||||||
|
while (player_i != player_end && playerCounter < server.GetStartData().numberOfPlayers) {
|
||||||
|
NetPlayerState seatState;
|
||||||
|
if (!(*player_i)->getMyActiveStatus()) {
|
||||||
|
seatState = netPlayerStateNoMoney;
|
||||||
|
} else if (!(*player_i)->isSessionActive()) {
|
||||||
|
seatState = netPlayerStateSessionInactive;
|
||||||
|
} else {
|
||||||
|
seatState = netPlayerStateNormal;
|
||||||
|
}
|
||||||
|
netHandStart->add_seatstates(seatState);
|
||||||
|
++player_i;
|
||||||
|
++playerCounter;
|
||||||
|
}
|
||||||
|
|
||||||
|
netHandStart->set_smallblind(curGame.getCurrentHand()->getSmallBlind());
|
||||||
|
return notifyCards;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AbstractServerGameStateReceiving::AcceptNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, bool spectateOnly)
|
AbstractServerGameStateReceiving::AcceptNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, bool spectateOnly)
|
||||||
{
|
{
|
||||||
@@ -430,9 +461,9 @@ AbstractServerGameStateReceiving::AcceptNewSession(boost::shared_ptr<ServerGame>
|
|||||||
|
|
||||||
// Send "Player Joined"/"Spectator Joined" to other fully connected clients.
|
// Send "Player Joined"/"Spectator Joined" to other fully connected clients.
|
||||||
if (spectateOnly) {
|
if (spectateOnly) {
|
||||||
server->SendToAllPlayers(CreateNetPacketSpectatorJoined(server->GetId(), *session->GetPlayerData()), SessionData::Game);
|
server->SendToAllPlayers(CreateNetPacketSpectatorJoined(server->GetId(), *session->GetPlayerData()), SessionData::Game | SessionData::Spectating);
|
||||||
} else {
|
} else {
|
||||||
server->SendToAllPlayers(CreateNetPacketPlayerJoined(server->GetId(), *session->GetPlayerData()), SessionData::Game);
|
server->SendToAllPlayers(CreateNetPacketPlayerJoined(server->GetId(), *session->GetPlayerData()), SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Accept session.
|
// Accept session.
|
||||||
@@ -513,6 +544,9 @@ ServerGameStateInit::HandleNewPlayer(boost::shared_ptr<ServerGame> server, boost
|
|||||||
void
|
void
|
||||||
ServerGameStateInit::HandleNewSpectator(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
ServerGameStateInit::HandleNewSpectator(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
|
if (session && session->GetPlayerData()) {
|
||||||
|
AcceptNewSession(server, session, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -613,7 +647,7 @@ ServerGameStateInit::SendStartEvent(ServerGame &server, bool fillWithComputerPla
|
|||||||
server.AddComputerPlayer(tmpPlayerData);
|
server.AddComputerPlayer(tmpPlayerData);
|
||||||
|
|
||||||
// Send "Player Joined" to other fully connected clients.
|
// Send "Player Joined" to other fully connected clients.
|
||||||
server.SendToAllPlayers(CreateNetPacketPlayerJoined(server.GetId(), *tmpPlayerData), SessionData::Game);
|
server.SendToAllPlayers(CreateNetPacketPlayerJoined(server.GetId(), *tmpPlayerData), SessionData::Game | SessionData::Spectating);
|
||||||
|
|
||||||
// Notify lobby.
|
// Notify lobby.
|
||||||
server.GetLobbyThread().NotifyPlayerJoinedGame(server.GetId(), tmpPlayerData->GetUniqueId());
|
server.GetLobbyThread().NotifyPlayerJoinedGame(server.GetId(), tmpPlayerData->GetUniqueId());
|
||||||
@@ -735,6 +769,9 @@ ServerGameStateStartGame::HandleNewPlayer(boost::shared_ptr<ServerGame> server,
|
|||||||
void
|
void
|
||||||
ServerGameStateStartGame::HandleNewSpectator(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
ServerGameStateStartGame::HandleNewSpectator(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
|
if (session && session->GetPlayerData()) {
|
||||||
|
AcceptNewSession(server, session, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -789,7 +826,7 @@ ServerGameStateStartGame::DoStart(boost::shared_ptr<ServerGame> server)
|
|||||||
++player_i;
|
++player_i;
|
||||||
}
|
}
|
||||||
|
|
||||||
server->SendToAllPlayers(packet, SessionData::Game);
|
server->SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating);
|
||||||
|
|
||||||
// Start the first hand.
|
// Start the first hand.
|
||||||
ServerGameStateHand::StartNewHand(server);
|
ServerGameStateHand::StartNewHand(server);
|
||||||
@@ -835,6 +872,10 @@ AbstractServerGameStateRunning::HandleNewPlayer(boost::shared_ptr<ServerGame> se
|
|||||||
void
|
void
|
||||||
AbstractServerGameStateRunning::HandleNewSpectator(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
AbstractServerGameStateRunning::HandleNewSpectator(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
|
if (session && session->GetPlayerData()) {
|
||||||
|
AcceptNewSession(server, session, false);
|
||||||
|
server->AddNewSpectator(session->GetPlayerData()->GetUniqueId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -941,7 +982,7 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
|
|||||||
playerAllIn->set_allincard2(tmpCards[1]);
|
playerAllIn->set_allincard2(tmpCards[1]);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
server->SendToAllPlayers(allIn, SessionData::Game);
|
server->SendToAllPlayers(allIn, SessionData::Game | SessionData::Spectating);
|
||||||
curGame.getCurrentHand()->setCardsShown(true);
|
curGame.getCurrentHand()->setCardsShown(true);
|
||||||
|
|
||||||
server->GetStateTimer1().expires_from_now(
|
server->GetStateTimer1().expires_from_now(
|
||||||
@@ -976,7 +1017,7 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
|
|||||||
netPlayersTurn->set_gameid(server->GetId());
|
netPlayersTurn->set_gameid(server->GetId());
|
||||||
netPlayersTurn->set_gamestate(static_cast<NetGameState>(curGame.getCurrentHand()->getCurrentRound()));
|
netPlayersTurn->set_gamestate(static_cast<NetGameState>(curGame.getCurrentHand()->getCurrentRound()));
|
||||||
netPlayersTurn->set_playerid(curPlayer->getMyUniqueID());
|
netPlayersTurn->set_playerid(curPlayer->getMyUniqueID());
|
||||||
server->SendToAllPlayers(notification, SessionData::Game);
|
server->SendToAllPlayers(notification, SessionData::Game | SessionData::Spectating);
|
||||||
|
|
||||||
// If the player is computer controlled, let the engine act.
|
// If the player is computer controlled, let the engine act.
|
||||||
if (curPlayer->getMyType() == PLAYER_TYPE_COMPUTER) {
|
if (curPlayer->getMyType() == PLAYER_TYPE_COMPUTER) {
|
||||||
@@ -1018,7 +1059,7 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
|
|||||||
netEndHand->set_playerid(player->getMyUniqueID());
|
netEndHand->set_playerid(player->getMyUniqueID());
|
||||||
netEndHand->set_moneywon(player->getLastMoneyWon());
|
netEndHand->set_moneywon(player->getLastMoneyWon());
|
||||||
netEndHand->set_playermoney(player->getMyCash());
|
netEndHand->set_playermoney(player->getMyCash());
|
||||||
server->SendToAllPlayers(endHand, SessionData::Game);
|
server->SendToAllPlayers(endHand, SessionData::Game | SessionData::Spectating);
|
||||||
} else {
|
} else {
|
||||||
// End of Hand - show cards.
|
// End of Hand - show cards.
|
||||||
const PlayerIdList showList(curGame.getCurrentHand()->getBoard()->getPlayerNeedToShowCards());
|
const PlayerIdList showList(curGame.getCurrentHand()->getBoard()->getPlayerNeedToShowCards());
|
||||||
@@ -1038,7 +1079,7 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
|
|||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
server->SendToAllPlayers(endHand, SessionData::Game);
|
server->SendToAllPlayers(endHand, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove disconnected players. This is the one and only place to do this.
|
// Remove disconnected players. This is the one and only place to do this.
|
||||||
@@ -1123,7 +1164,7 @@ ServerGameStateHand::TimerNextGame(const boost::system::error_code &ec, boost::s
|
|||||||
EndOfGameMessage *netEndGame = endGame->GetMsg()->mutable_endofgamemessage();
|
EndOfGameMessage *netEndGame = endGame->GetMsg()->mutable_endofgamemessage();
|
||||||
netEndGame->set_gameid(server->GetId());
|
netEndGame->set_gameid(server->GetId());
|
||||||
netEndGame->set_winnerplayerid(winnerPlayerId);
|
netEndGame->set_winnerplayerid(winnerPlayerId);
|
||||||
server->SendToAllPlayers(endGame, SessionData::Game);
|
server->SendToAllPlayers(endGame, SessionData::Game | SessionData::Spectating);
|
||||||
|
|
||||||
// Wait for the start of a new game.
|
// Wait for the start of a new game.
|
||||||
server->RemoveAutoLeavePlayers();
|
server->RemoveAutoLeavePlayers();
|
||||||
@@ -1168,6 +1209,9 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
|
|||||||
// This has to be done before initialising the new hand, because there are side effects.
|
// This has to be done before initialising the new hand, because there are side effects.
|
||||||
InitRejoiningPlayers(server);
|
InitRejoiningPlayers(server);
|
||||||
|
|
||||||
|
// Initialize new spectators.
|
||||||
|
InitNewSpectators(server);
|
||||||
|
|
||||||
// Kick inactive players.
|
// Kick inactive players.
|
||||||
CheckPlayerTimeouts(server);
|
CheckPlayerTimeouts(server);
|
||||||
|
|
||||||
@@ -1193,10 +1237,8 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
|
|||||||
bool errorFlag = false;
|
bool errorFlag = false;
|
||||||
tmpPlayer->getMyCards(cards);
|
tmpPlayer->getMyCards(cards);
|
||||||
|
|
||||||
boost::shared_ptr<NetPacket> notifyCards(new NetPacket);
|
boost::shared_ptr<NetPacket> notifyCards = CreateNetPacketHandStart(*server);
|
||||||
notifyCards->GetMsg()->set_messagetype(PokerTHMessage::Type_HandStartMessage);
|
|
||||||
HandStartMessage *netHandStart = notifyCards->GetMsg()->mutable_handstartmessage();
|
HandStartMessage *netHandStart = notifyCards->GetMsg()->mutable_handstartmessage();
|
||||||
netHandStart->set_gameid(server->GetId());
|
|
||||||
string tmpPassword(tmpSession->AuthGetPassword());
|
string tmpPassword(tmpSession->AuthGetPassword());
|
||||||
if (tmpPassword.empty()) { // encrypt only if password is present
|
if (tmpPassword.empty()) { // encrypt only if password is present
|
||||||
HandStartMessage::PlainCards *plainCards = netHandStart->mutable_plaincards();
|
HandStartMessage::PlainCards *plainCards = netHandStart->mutable_plaincards();
|
||||||
@@ -1222,30 +1264,14 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
|
|||||||
errorFlag = true;
|
errorFlag = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PlayerListIterator player_i = curGame.getSeatsList()->begin();
|
|
||||||
PlayerListIterator player_end = curGame.getSeatsList()->end();
|
|
||||||
int playerCounter = 0;
|
|
||||||
while (player_i != player_end && playerCounter < server->GetStartData().numberOfPlayers) {
|
|
||||||
NetPlayerState seatState;
|
|
||||||
if (!(*player_i)->getMyActiveStatus()) {
|
|
||||||
seatState = netPlayerStateNoMoney;
|
|
||||||
} else if (!(*player_i)->isSessionActive()) {
|
|
||||||
seatState = netPlayerStateSessionInactive;
|
|
||||||
} else {
|
|
||||||
seatState = netPlayerStateNormal;
|
|
||||||
}
|
|
||||||
netHandStart->add_seatstates(seatState);
|
|
||||||
++player_i;
|
|
||||||
++playerCounter;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!errorFlag) {
|
if (!errorFlag) {
|
||||||
netHandStart->set_smallblind(curGame.getCurrentHand()->getSmallBlind());
|
|
||||||
server->GetLobbyThread().GetSender().Send(tmpSession, notifyCards);
|
server->GetLobbyThread().GetSender().Send(tmpSession, notifyCards);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
server->SendToAllPlayers(CreateNetPacketHandStart(*server), SessionData::Spectating);
|
||||||
|
|
||||||
// Start hand.
|
// Start hand.
|
||||||
curGame.startHand();
|
curGame.startHand();
|
||||||
@@ -1268,7 +1294,7 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
|
|||||||
netSmallBlind->set_playermoney(tmpPlayer->getMyCash());
|
netSmallBlind->set_playermoney(tmpPlayer->getMyCash());
|
||||||
netSmallBlind->set_highestset(server->GetGame().getCurrentHand()->getCurrentBeRo()->getHighestSet());
|
netSmallBlind->set_highestset(server->GetGame().getCurrentHand()->getCurrentBeRo()->getHighestSet());
|
||||||
netSmallBlind->set_minimumraise(server->GetGame().getCurrentHand()->getCurrentBeRo()->getMinimumRaise());
|
netSmallBlind->set_minimumraise(server->GetGame().getCurrentHand()->getCurrentBeRo()->getMinimumRaise());
|
||||||
server->SendToAllPlayers(notifySmallBlind, SessionData::Game);
|
server->SendToAllPlayers(notifySmallBlind, SessionData::Game | SessionData::Spectating);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
@@ -1290,7 +1316,7 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
|
|||||||
netBigBlind->set_playermoney(tmpPlayer->getMyCash());
|
netBigBlind->set_playermoney(tmpPlayer->getMyCash());
|
||||||
netBigBlind->set_highestset(server->GetGame().getCurrentHand()->getCurrentBeRo()->getHighestSet());
|
netBigBlind->set_highestset(server->GetGame().getCurrentHand()->getCurrentBeRo()->getHighestSet());
|
||||||
netBigBlind->set_minimumraise(server->GetGame().getCurrentHand()->getCurrentBeRo()->getMinimumRaise());
|
netBigBlind->set_minimumraise(server->GetGame().getCurrentHand()->getCurrentBeRo()->getMinimumRaise());
|
||||||
server->SendToAllPlayers(notifyBigBlind, SessionData::Game);
|
server->SendToAllPlayers(notifyBigBlind, SessionData::Game | SessionData::Spectating);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
@@ -1364,6 +1390,21 @@ ServerGameStateHand::InitRejoiningPlayers(boost::shared_ptr<ServerGame> server)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ServerGameStateHand::InitNewSpectators(boost::shared_ptr<ServerGame> server)
|
||||||
|
{
|
||||||
|
PlayerIdList spectatorIdList(server->GetAndResetNewSpectators());
|
||||||
|
PlayerIdList::iterator i = spectatorIdList.begin();
|
||||||
|
PlayerIdList::iterator end = spectatorIdList.end();
|
||||||
|
while (i != end) {
|
||||||
|
boost::shared_ptr<SessionData> session(server->GetSessionManager().GetSessionByUniquePlayerId(*i));
|
||||||
|
if (session && session->GetPlayerData()) {
|
||||||
|
SendGameData(server, session);
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateHand::PerformRejoin(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
ServerGameStateHand::PerformRejoin(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
@@ -1377,7 +1418,7 @@ ServerGameStateHand::PerformRejoin(boost::shared_ptr<ServerGame> server, boost::
|
|||||||
PlayerIdChangedMessage *netIdChanged = packet->GetMsg()->mutable_playeridchangedmessage();
|
PlayerIdChangedMessage *netIdChanged = packet->GetMsg()->mutable_playeridchangedmessage();
|
||||||
netIdChanged->set_oldplayerid(rejoinPlayer->getMyUniqueID());
|
netIdChanged->set_oldplayerid(rejoinPlayer->getMyUniqueID());
|
||||||
netIdChanged->set_newplayerid(session->GetPlayerData()->GetUniqueId());
|
netIdChanged->set_newplayerid(session->GetPlayerData()->GetUniqueId());
|
||||||
server->SendToAllButOnePlayers(packet, session->GetId(), SessionData::Game);
|
server->SendToAllButOnePlayers(packet, session->GetId(), SessionData::Game | SessionData::Spectating);
|
||||||
|
|
||||||
// Update the dealer, if necessary.
|
// Update the dealer, if necessary.
|
||||||
curGame.replaceDealer(rejoinPlayer->getMyUniqueID(), session->GetPlayerData()->GetUniqueId());
|
curGame.replaceDealer(rejoinPlayer->getMyUniqueID(), session->GetPlayerData()->GetUniqueId());
|
||||||
@@ -1388,32 +1429,38 @@ ServerGameStateHand::PerformRejoin(boost::shared_ptr<ServerGame> server, boost::
|
|||||||
rejoinPlayer->setMyGuid(session->GetPlayerData()->GetGuid());
|
rejoinPlayer->setMyGuid(session->GetPlayerData()->GetGuid());
|
||||||
rejoinPlayer->markRemoteAction();
|
rejoinPlayer->markRemoteAction();
|
||||||
rejoinPlayer->setIsSessionActive(true);
|
rejoinPlayer->setIsSessionActive(true);
|
||||||
|
SendGameData(server, session);
|
||||||
// Send game start notification to rejoining client.
|
|
||||||
packet.reset(new NetPacket);
|
|
||||||
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameStartRejoinMessage);
|
|
||||||
GameStartRejoinMessage *netGameStart = packet->GetMsg()->mutable_gamestartrejoinmessage();
|
|
||||||
netGameStart->set_gameid(server->GetId());
|
|
||||||
netGameStart->set_startdealerplayerid(curGame.getDealerPosition());
|
|
||||||
netGameStart->set_handnum(curGame.getCurrentHandID());
|
|
||||||
PlayerListIterator player_i = curGame.getSeatsList()->begin();
|
|
||||||
PlayerListIterator player_end = curGame.getSeatsList()->end();
|
|
||||||
int player_count = 0;
|
|
||||||
while (player_i != player_end && player_count < server->GetStartData().numberOfPlayers) {
|
|
||||||
boost::shared_ptr<PlayerInterface> tmpPlayer = *player_i;
|
|
||||||
GameStartRejoinMessage::RejoinPlayerData *playerSlot = netGameStart->add_rejoinplayerdata();
|
|
||||||
playerSlot->set_playerid(tmpPlayer->getMyUniqueID());
|
|
||||||
playerSlot->set_playermoney(tmpPlayer->getMyCash());
|
|
||||||
++player_i;
|
|
||||||
++player_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
server->GetLobbyThread().GetSender().Send(session, packet);
|
|
||||||
} else {
|
} else {
|
||||||
server->SessionError(session, ERR_SOCK_INVALID_STATE);
|
server->SessionError(session, ERR_SOCK_INVALID_STATE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ServerGameStateHand::SendGameData(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
||||||
|
{
|
||||||
|
Game &curGame = server->GetGame();
|
||||||
|
// Send game start notification to rejoining client.
|
||||||
|
boost::shared_ptr<NetPacket> packet(new NetPacket);
|
||||||
|
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameStartRejoinMessage);
|
||||||
|
GameStartRejoinMessage *netGameStart = packet->GetMsg()->mutable_gamestartrejoinmessage();
|
||||||
|
netGameStart->set_gameid(server->GetId());
|
||||||
|
netGameStart->set_startdealerplayerid(curGame.getDealerPosition());
|
||||||
|
netGameStart->set_handnum(curGame.getCurrentHandID());
|
||||||
|
PlayerListIterator player_i = curGame.getSeatsList()->begin();
|
||||||
|
PlayerListIterator player_end = curGame.getSeatsList()->end();
|
||||||
|
int player_count = 0;
|
||||||
|
while (player_i != player_end && player_count < server->GetStartData().numberOfPlayers) {
|
||||||
|
boost::shared_ptr<PlayerInterface> tmpPlayer = *player_i;
|
||||||
|
GameStartRejoinMessage::RejoinPlayerData *playerSlot = netGameStart->add_rejoinplayerdata();
|
||||||
|
playerSlot->set_playerid(tmpPlayer->getMyUniqueID());
|
||||||
|
playerSlot->set_playermoney(tmpPlayer->getMyCash());
|
||||||
|
++player_i;
|
||||||
|
++player_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
server->GetLobbyThread().GetSender().Send(session, packet);
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@@ -1604,7 +1651,7 @@ ServerGameStateWaitNextHand::InternalProcessPacket(boost::shared_ptr<ServerGame>
|
|||||||
boost::shared_ptr<PlayerInterface> tmpPlayer(curGame.getPlayerByUniqueId(session->GetPlayerData()->GetUniqueId()));
|
boost::shared_ptr<PlayerInterface> tmpPlayer(curGame.getPlayerByUniqueId(session->GetPlayerData()->GetUniqueId()));
|
||||||
if (tmpPlayer) {
|
if (tmpPlayer) {
|
||||||
SetPlayerResult(*netShowCards->mutable_playerresult(), tmpPlayer, curGame.getCurrentHand()->getRoundBeforePostRiver());
|
SetPlayerResult(*netShowCards->mutable_playerresult(), tmpPlayer, curGame.getCurrentHand()->getRoundBeforePostRiver());
|
||||||
server->SendToAllPlayers(show, SessionData::Game);
|
server->SendToAllPlayers(show, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -426,7 +426,7 @@ ServerLobbyThread::NotifyPlayerJoinedLobby(unsigned playerId)
|
|||||||
{
|
{
|
||||||
boost::shared_ptr<NetPacket> notify = CreateNetPacketPlayerListNew(playerId);
|
boost::shared_ptr<NetPacket> notify = CreateNetPacketPlayerListNew(playerId);
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), notify, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), notify, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), notify, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), notify, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -434,7 +434,7 @@ ServerLobbyThread::NotifyPlayerLeftLobby(unsigned playerId)
|
|||||||
{
|
{
|
||||||
boost::shared_ptr<NetPacket> notify = CreateNetPacketPlayerListLeft(playerId);
|
boost::shared_ptr<NetPacket> notify = CreateNetPacketPlayerListLeft(playerId);
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), notify, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), notify, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), notify, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), notify, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -448,7 +448,7 @@ ServerLobbyThread::NotifyPlayerJoinedGame(unsigned gameId, unsigned playerId)
|
|||||||
netListMsg->set_playerid(playerId);
|
netListMsg->set_playerid(playerId);
|
||||||
|
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -462,7 +462,7 @@ ServerLobbyThread::NotifyPlayerLeftGame(unsigned gameId, unsigned playerId)
|
|||||||
netListMsg->set_playerid(playerId);
|
netListMsg->set_playerid(playerId);
|
||||||
|
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -476,7 +476,7 @@ ServerLobbyThread::NotifySpectatorJoinedGame(unsigned gameId, unsigned playerId)
|
|||||||
netListMsg->set_playerid(playerId);
|
netListMsg->set_playerid(playerId);
|
||||||
|
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -490,7 +490,7 @@ ServerLobbyThread::NotifySpectatorLeftGame(unsigned gameId, unsigned playerId)
|
|||||||
netListMsg->set_playerid(playerId);
|
netListMsg->set_playerid(playerId);
|
||||||
|
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -505,7 +505,7 @@ ServerLobbyThread::NotifyGameAdminChanged(unsigned gameId, unsigned newAdminPlay
|
|||||||
netListMsg->set_newadminplayerid(newAdminPlayerId);
|
netListMsg->set_newadminplayerid(newAdminPlayerId);
|
||||||
|
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -513,7 +513,7 @@ ServerLobbyThread::NotifyStartingGame(unsigned gameId)
|
|||||||
{
|
{
|
||||||
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(gameId, GAME_MODE_STARTED);
|
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(gameId, GAME_MODE_STARTED);
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -521,7 +521,7 @@ ServerLobbyThread::NotifyReopeningGame(unsigned gameId)
|
|||||||
{
|
{
|
||||||
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(gameId, GAME_MODE_CREATED);
|
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(gameId, GAME_MODE_CREATED);
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -649,7 +649,7 @@ ServerLobbyThread::SendGlobalChat(const string &message)
|
|||||||
netChat->set_chattext(message);
|
netChat->set_chattext(message);
|
||||||
|
|
||||||
m_sessionManager.SendToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -661,7 +661,7 @@ ServerLobbyThread::SendGlobalMsgBox(const string &message)
|
|||||||
netDialog->set_notificationtext(message);
|
netDialog->set_notificationtext(message);
|
||||||
|
|
||||||
m_sessionManager.SendToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -674,7 +674,7 @@ ServerLobbyThread::SendChatBotMsg(const std::string &message)
|
|||||||
netChat->set_chattext(message);
|
netChat->set_chattext(message);
|
||||||
|
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
|
|
||||||
GetIrcBotCallback().SignalLobbyMessage(
|
GetIrcBotCallback().SignalLobbyMessage(
|
||||||
0,
|
0,
|
||||||
@@ -694,7 +694,7 @@ ServerLobbyThread::SendChatBotMsg(unsigned gameId, const std::string &message)
|
|||||||
|
|
||||||
GameMap::const_iterator pos = m_gameMap.find(gameId);
|
GameMap::const_iterator pos = m_gameMap.find(gameId);
|
||||||
if (pos != m_gameMap.end()) {
|
if (pos != m_gameMap.end()) {
|
||||||
pos->second->SendToAllPlayers(packet, SessionData::Game);
|
pos->second->SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1415,7 +1415,7 @@ ServerLobbyThread::HandleNetPacketChatRequest(boost::shared_ptr<SessionData> ses
|
|||||||
netChat->set_chattext(chatMsg);
|
netChat->set_chattext(chatMsg);
|
||||||
|
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
|
|
||||||
// Send the message to the chat cleaner bot.
|
// Send the message to the chat cleaner bot.
|
||||||
m_chatCleanerManager->HandleLobbyChatText(
|
m_chatCleanerManager->HandleLobbyChatText(
|
||||||
@@ -1481,7 +1481,7 @@ ServerLobbyThread::HandleNetPacketRejectGameInvitation(boost::shared_ptr<Session
|
|||||||
netReject->set_playerid(tmpPlayerId);
|
netReject->set_playerid(tmpPlayerId);
|
||||||
netReject->set_playerrejectreason(reject.myrejectreason());
|
netReject->set_playerrejectreason(reject.myrejectreason());
|
||||||
|
|
||||||
game.SendToAllPlayers(packet, SessionData::Game);
|
game.SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1902,7 +1902,7 @@ ServerLobbyThread::InternalAddGame(boost::shared_ptr<ServerGame> game)
|
|||||||
m_gameMap.insert(GameMap::value_type(game->GetId(), game));
|
m_gameMap.insert(GameMap::value_type(game->GetId(), game));
|
||||||
// Notify all players.
|
// Notify all players.
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), CreateNetPacketGameListNew(*game), SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), CreateNetPacketGameListNew(*game), SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), CreateNetPacketGameListNew(*game), SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), CreateNetPacketGameListNew(*game), SessionData::Game | SessionData::Spectating);
|
||||||
|
|
||||||
{
|
{
|
||||||
boost::mutex::scoped_lock lock(m_statMutex);
|
boost::mutex::scoped_lock lock(m_statMutex);
|
||||||
@@ -1934,7 +1934,7 @@ ServerLobbyThread::InternalRemoveGame(boost::shared_ptr<ServerGame> game)
|
|||||||
// Notify all players.
|
// Notify all players.
|
||||||
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(game->GetId(), GAME_MODE_CLOSED);
|
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(game->GetId(), GAME_MODE_CLOSED);
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -2098,7 +2098,7 @@ ServerLobbyThread::SendPlayerList(boost::shared_ptr<SessionData> s)
|
|||||||
{
|
{
|
||||||
// Retrieve all player ids.
|
// Retrieve all player ids.
|
||||||
PlayerIdList idList(m_sessionManager.GetPlayerIdList(SessionData::Established));
|
PlayerIdList idList(m_sessionManager.GetPlayerIdList(SessionData::Established));
|
||||||
PlayerIdList gameIdList(m_gameSessionManager.GetPlayerIdList(SessionData::Game));
|
PlayerIdList gameIdList(m_gameSessionManager.GetPlayerIdList(SessionData::Game | SessionData::Spectating));
|
||||||
idList.splice(idList.begin(), gameIdList);
|
idList.splice(idList.begin(), gameIdList);
|
||||||
// Send all player ids to client.
|
// Send all player ids to client.
|
||||||
PlayerIdList::const_iterator i = idList.begin();
|
PlayerIdList::const_iterator i = idList.begin();
|
||||||
@@ -2152,7 +2152,7 @@ ServerLobbyThread::BroadcastStatisticsUpdate(const ServerStats &stats)
|
|||||||
data->set_statisticsvalue(m_sessionManager.GetRawSessionCount() + m_gameSessionManager.GetRawSessionCount());
|
data->set_statisticsvalue(m_sessionManager.GetRawSessionCount() + m_gameSessionManager.GetRawSessionCount());
|
||||||
|
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game | SessionData::Spectating);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2293,6 +2293,14 @@ ServerLobbyThread::CreateNetPacketGameListNew(const ServerGame &game)
|
|||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tmpList = game.GetSpectatorIdList();
|
||||||
|
i = tmpList.begin();
|
||||||
|
end = tmpList.end();
|
||||||
|
while (i != end) {
|
||||||
|
netGameList->add_spectatorids(*i);
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -77,8 +77,8 @@ public:
|
|||||||
ServerCallback &GetCallback();
|
ServerCallback &GetCallback();
|
||||||
GameState GetCurRound() const;
|
GameState GetCurRound() const;
|
||||||
|
|
||||||
void SendToAllPlayers(boost::shared_ptr<NetPacket> packet, SessionData::State state);
|
void SendToAllPlayers(boost::shared_ptr<NetPacket> packet, int state);
|
||||||
void SendToAllButOnePlayers(boost::shared_ptr<NetPacket> packet, SessionId except, SessionData::State state);
|
void SendToAllButOnePlayers(boost::shared_ptr<NetPacket> packet, SessionId except, int state);
|
||||||
void RemoveAllSessions();
|
void RemoveAllSessions();
|
||||||
|
|
||||||
bool IsPasswordProtected() const;
|
bool IsPasswordProtected() const;
|
||||||
@@ -88,6 +88,7 @@ public:
|
|||||||
|
|
||||||
boost::shared_ptr<PlayerData> GetPlayerDataByUniqueId(unsigned playerId) const;
|
boost::shared_ptr<PlayerData> GetPlayerDataByUniqueId(unsigned playerId) const;
|
||||||
PlayerIdList GetPlayerIdList() const;
|
PlayerIdList GetPlayerIdList() const;
|
||||||
|
PlayerIdList GetSpectatorIdList() const;
|
||||||
bool IsPlayerConnected(const std::string &name) const;
|
bool IsPlayerConnected(const std::string &name) const;
|
||||||
bool IsPlayerConnected(unsigned playerId) const;
|
bool IsPlayerConnected(unsigned playerId) const;
|
||||||
bool IsClientAddressConnected(const std::string &clientAddress) const;
|
bool IsClientAddressConnected(const std::string &clientAddress) const;
|
||||||
@@ -111,6 +112,9 @@ public:
|
|||||||
void AddReactivatePlayer(unsigned playerId);
|
void AddReactivatePlayer(unsigned playerId);
|
||||||
PlayerIdList GetAndResetReactivatePlayers();
|
PlayerIdList GetAndResetReactivatePlayers();
|
||||||
|
|
||||||
|
void AddNewSpectator(unsigned playerId);
|
||||||
|
PlayerIdList GetAndResetNewSpectators();
|
||||||
|
|
||||||
void SetNameReported();
|
void SetNameReported();
|
||||||
bool IsNameReported() const;
|
bool IsNameReported() const;
|
||||||
|
|
||||||
@@ -205,6 +209,9 @@ private:
|
|||||||
PlayerIdList m_reactivatePlayerList;
|
PlayerIdList m_reactivatePlayerList;
|
||||||
mutable boost::mutex m_reactivatePlayerListMutex;
|
mutable boost::mutex m_reactivatePlayerListMutex;
|
||||||
|
|
||||||
|
PlayerIdList m_newSpectatorList;
|
||||||
|
mutable boost::mutex m_newSpectatorListMutex;
|
||||||
|
|
||||||
PlayerIdList m_reportedAvatarList;
|
PlayerIdList m_reportedAvatarList;
|
||||||
|
|
||||||
RankingMap m_rankingMap;
|
RankingMap m_rankingMap;
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ public:
|
|||||||
static boost::shared_ptr<NetPacket> CreateNetPacketPlayerJoined(unsigned gameId, const PlayerData &playerData);
|
static boost::shared_ptr<NetPacket> CreateNetPacketPlayerJoined(unsigned gameId, const PlayerData &playerData);
|
||||||
static boost::shared_ptr<NetPacket> CreateNetPacketSpectatorJoined(unsigned gameId, const PlayerData &playerData);
|
static boost::shared_ptr<NetPacket> CreateNetPacketSpectatorJoined(unsigned gameId, const PlayerData &playerData);
|
||||||
static boost::shared_ptr<NetPacket> CreateNetPacketJoinGameAck(const ServerGame &server, const PlayerData &playerData, bool spectateOnly);
|
static boost::shared_ptr<NetPacket> CreateNetPacketJoinGameAck(const ServerGame &server, const PlayerData &playerData, bool spectateOnly);
|
||||||
|
static boost::shared_ptr<NetPacket> CreateNetPacketHandStart(const ServerGame &server);
|
||||||
|
|
||||||
static void AcceptNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, bool spectateOnly);
|
static void AcceptNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, bool spectateOnly);
|
||||||
|
|
||||||
@@ -190,7 +191,9 @@ protected:
|
|||||||
static void CheckPlayerTimeouts(boost::shared_ptr<ServerGame> server);
|
static void CheckPlayerTimeouts(boost::shared_ptr<ServerGame> server);
|
||||||
static void ReactivatePlayers(boost::shared_ptr<ServerGame> server);
|
static void ReactivatePlayers(boost::shared_ptr<ServerGame> server);
|
||||||
static void InitRejoiningPlayers(boost::shared_ptr<ServerGame> server);
|
static void InitRejoiningPlayers(boost::shared_ptr<ServerGame> server);
|
||||||
|
static void InitNewSpectators(boost::shared_ptr<ServerGame> server);
|
||||||
static void PerformRejoin(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session);
|
static void PerformRejoin(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session);
|
||||||
|
static void SendGameData(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static ServerGameStateHand s_state;
|
static ServerGameStateHand s_state;
|
||||||
|
|||||||
+58
-6
@@ -4569,6 +4569,7 @@ const int GameListNewMessage::kIsPrivateFieldNumber;
|
|||||||
const int GameListNewMessage::kPlayerIdsFieldNumber;
|
const int GameListNewMessage::kPlayerIdsFieldNumber;
|
||||||
const int GameListNewMessage::kAdminPlayerIdFieldNumber;
|
const int GameListNewMessage::kAdminPlayerIdFieldNumber;
|
||||||
const int GameListNewMessage::kGameInfoFieldNumber;
|
const int GameListNewMessage::kGameInfoFieldNumber;
|
||||||
|
const int GameListNewMessage::kSpectatorIdsFieldNumber;
|
||||||
#endif // !_MSC_VER
|
#endif // !_MSC_VER
|
||||||
|
|
||||||
GameListNewMessage::GameListNewMessage()
|
GameListNewMessage::GameListNewMessage()
|
||||||
@@ -4646,6 +4647,7 @@ void GameListNewMessage::Clear() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
playerids_.Clear();
|
playerids_.Clear();
|
||||||
|
spectatorids_.Clear();
|
||||||
::memset(_has_bits_, 0, sizeof(_has_bits_));
|
::memset(_has_bits_, 0, sizeof(_has_bits_));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4752,6 +4754,27 @@ bool GameListNewMessage::MergePartialFromCodedStream(
|
|||||||
} else {
|
} else {
|
||||||
goto handle_uninterpreted;
|
goto handle_uninterpreted;
|
||||||
}
|
}
|
||||||
|
if (input->ExpectTag(58)) goto parse_spectatorIds;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// repeated uint32 spectatorIds = 7 [packed = true];
|
||||||
|
case 7: {
|
||||||
|
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
|
||||||
|
::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
|
||||||
|
parse_spectatorIds:
|
||||||
|
DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
|
||||||
|
::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
|
||||||
|
input, this->mutable_spectatorids())));
|
||||||
|
} else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
|
||||||
|
== ::google::protobuf::internal::WireFormatLite::
|
||||||
|
WIRETYPE_VARINT) {
|
||||||
|
DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
|
||||||
|
::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
|
||||||
|
1, 58, input, this->mutable_spectatorids())));
|
||||||
|
} else {
|
||||||
|
goto handle_uninterpreted;
|
||||||
|
}
|
||||||
if (input->ExpectAtEnd()) return true;
|
if (input->ExpectAtEnd()) return true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -4810,6 +4833,16 @@ void GameListNewMessage::SerializeWithCachedSizes(
|
|||||||
6, this->gameinfo(), output);
|
6, this->gameinfo(), output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// repeated uint32 spectatorIds = 7 [packed = true];
|
||||||
|
if (this->spectatorids_size() > 0) {
|
||||||
|
::google::protobuf::internal::WireFormatLite::WriteTag(7, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
|
||||||
|
output->WriteVarint32(_spectatorids_cached_byte_size_);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < this->spectatorids_size(); i++) {
|
||||||
|
::google::protobuf::internal::WireFormatLite::WriteUInt32NoTag(
|
||||||
|
this->spectatorids(i), output);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int GameListNewMessage::ByteSize() const {
|
int GameListNewMessage::ByteSize() const {
|
||||||
@@ -4866,6 +4899,23 @@ int GameListNewMessage::ByteSize() const {
|
|||||||
total_size += data_size;
|
total_size += data_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// repeated uint32 spectatorIds = 7 [packed = true];
|
||||||
|
{
|
||||||
|
int data_size = 0;
|
||||||
|
for (int i = 0; i < this->spectatorids_size(); i++) {
|
||||||
|
data_size += ::google::protobuf::internal::WireFormatLite::
|
||||||
|
UInt32Size(this->spectatorids(i));
|
||||||
|
}
|
||||||
|
if (data_size > 0) {
|
||||||
|
total_size += 1 +
|
||||||
|
::google::protobuf::internal::WireFormatLite::Int32Size(data_size);
|
||||||
|
}
|
||||||
|
GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
|
||||||
|
_spectatorids_cached_byte_size_ = data_size;
|
||||||
|
GOOGLE_SAFE_CONCURRENT_WRITES_END();
|
||||||
|
total_size += data_size;
|
||||||
|
}
|
||||||
|
|
||||||
GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
|
GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
|
||||||
_cached_size_ = total_size;
|
_cached_size_ = total_size;
|
||||||
GOOGLE_SAFE_CONCURRENT_WRITES_END();
|
GOOGLE_SAFE_CONCURRENT_WRITES_END();
|
||||||
@@ -4880,6 +4930,7 @@ void GameListNewMessage::CheckTypeAndMergeFrom(
|
|||||||
void GameListNewMessage::MergeFrom(const GameListNewMessage& from) {
|
void GameListNewMessage::MergeFrom(const GameListNewMessage& from) {
|
||||||
GOOGLE_CHECK_NE(&from, this);
|
GOOGLE_CHECK_NE(&from, this);
|
||||||
playerids_.MergeFrom(from.playerids_);
|
playerids_.MergeFrom(from.playerids_);
|
||||||
|
spectatorids_.MergeFrom(from.spectatorids_);
|
||||||
if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
|
if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
|
||||||
if (from.has_gameid()) {
|
if (from.has_gameid()) {
|
||||||
set_gameid(from.gameid());
|
set_gameid(from.gameid());
|
||||||
@@ -4922,6 +4973,7 @@ void GameListNewMessage::Swap(GameListNewMessage* other) {
|
|||||||
playerids_.Swap(&other->playerids_);
|
playerids_.Swap(&other->playerids_);
|
||||||
std::swap(adminplayerid_, other->adminplayerid_);
|
std::swap(adminplayerid_, other->adminplayerid_);
|
||||||
std::swap(gameinfo_, other->gameinfo_);
|
std::swap(gameinfo_, other->gameinfo_);
|
||||||
|
spectatorids_.Swap(&other->spectatorids_);
|
||||||
std::swap(_has_bits_[0], other->_has_bits_[0]);
|
std::swap(_has_bits_[0], other->_has_bits_[0]);
|
||||||
std::swap(_cached_size_, other->_cached_size_);
|
std::swap(_cached_size_, other->_cached_size_);
|
||||||
}
|
}
|
||||||
@@ -7394,7 +7446,7 @@ bool JoinExistingGameMessage::MergePartialFromCodedStream(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bool autoLeave = 3;
|
// optional bool autoLeave = 3 [default = false];
|
||||||
case 3: {
|
case 3: {
|
||||||
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
|
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
|
||||||
::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
|
::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
|
||||||
@@ -7410,7 +7462,7 @@ bool JoinExistingGameMessage::MergePartialFromCodedStream(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bool spectateOnly = 4;
|
// optional bool spectateOnly = 4 [default = false];
|
||||||
case 4: {
|
case 4: {
|
||||||
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
|
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
|
||||||
::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
|
::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
|
||||||
@@ -7454,12 +7506,12 @@ void JoinExistingGameMessage::SerializeWithCachedSizes(
|
|||||||
2, this->password(), output);
|
2, this->password(), output);
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bool autoLeave = 3;
|
// optional bool autoLeave = 3 [default = false];
|
||||||
if (has_autoleave()) {
|
if (has_autoleave()) {
|
||||||
::google::protobuf::internal::WireFormatLite::WriteBool(3, this->autoleave(), output);
|
::google::protobuf::internal::WireFormatLite::WriteBool(3, this->autoleave(), output);
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bool spectateOnly = 4;
|
// optional bool spectateOnly = 4 [default = false];
|
||||||
if (has_spectateonly()) {
|
if (has_spectateonly()) {
|
||||||
::google::protobuf::internal::WireFormatLite::WriteBool(4, this->spectateonly(), output);
|
::google::protobuf::internal::WireFormatLite::WriteBool(4, this->spectateonly(), output);
|
||||||
}
|
}
|
||||||
@@ -7484,12 +7536,12 @@ int JoinExistingGameMessage::ByteSize() const {
|
|||||||
this->password());
|
this->password());
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bool autoLeave = 3;
|
// optional bool autoLeave = 3 [default = false];
|
||||||
if (has_autoleave()) {
|
if (has_autoleave()) {
|
||||||
total_size += 1 + 1;
|
total_size += 1 + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bool spectateOnly = 4;
|
// optional bool spectateOnly = 4 [default = false];
|
||||||
if (has_spectateonly()) {
|
if (has_spectateonly()) {
|
||||||
total_size += 1 + 1;
|
total_size += 1 + 1;
|
||||||
}
|
}
|
||||||
|
|||||||
+44
-5
@@ -2443,6 +2443,18 @@ class GameListNewMessage : public ::google::protobuf::MessageLite {
|
|||||||
inline ::NetGameInfo* release_gameinfo();
|
inline ::NetGameInfo* release_gameinfo();
|
||||||
inline void set_allocated_gameinfo(::NetGameInfo* gameinfo);
|
inline void set_allocated_gameinfo(::NetGameInfo* gameinfo);
|
||||||
|
|
||||||
|
// repeated uint32 spectatorIds = 7 [packed = true];
|
||||||
|
inline int spectatorids_size() const;
|
||||||
|
inline void clear_spectatorids();
|
||||||
|
static const int kSpectatorIdsFieldNumber = 7;
|
||||||
|
inline ::google::protobuf::uint32 spectatorids(int index) const;
|
||||||
|
inline void set_spectatorids(int index, ::google::protobuf::uint32 value);
|
||||||
|
inline void add_spectatorids(::google::protobuf::uint32 value);
|
||||||
|
inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
|
||||||
|
spectatorids() const;
|
||||||
|
inline ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
|
||||||
|
mutable_spectatorids();
|
||||||
|
|
||||||
// @@protoc_insertion_point(class_scope:GameListNewMessage)
|
// @@protoc_insertion_point(class_scope:GameListNewMessage)
|
||||||
private:
|
private:
|
||||||
inline void set_has_gameid();
|
inline void set_has_gameid();
|
||||||
@@ -2463,9 +2475,11 @@ class GameListNewMessage : public ::google::protobuf::MessageLite {
|
|||||||
bool isprivate_;
|
bool isprivate_;
|
||||||
::google::protobuf::uint32 adminplayerid_;
|
::google::protobuf::uint32 adminplayerid_;
|
||||||
::NetGameInfo* gameinfo_;
|
::NetGameInfo* gameinfo_;
|
||||||
|
::google::protobuf::RepeatedField< ::google::protobuf::uint32 > spectatorids_;
|
||||||
|
mutable int _spectatorids_cached_byte_size_;
|
||||||
|
|
||||||
mutable int _cached_size_;
|
mutable int _cached_size_;
|
||||||
::google::protobuf::uint32 _has_bits_[(6 + 31) / 32];
|
::google::protobuf::uint32 _has_bits_[(7 + 31) / 32];
|
||||||
|
|
||||||
#ifdef GOOGLE_PROTOBUF_NO_STATIC_INITIALIZER
|
#ifdef GOOGLE_PROTOBUF_NO_STATIC_INITIALIZER
|
||||||
friend void protobuf_AddDesc_pokerth_2eproto_impl();
|
friend void protobuf_AddDesc_pokerth_2eproto_impl();
|
||||||
@@ -3625,14 +3639,14 @@ class JoinExistingGameMessage : public ::google::protobuf::MessageLite {
|
|||||||
inline ::std::string* release_password();
|
inline ::std::string* release_password();
|
||||||
inline void set_allocated_password(::std::string* password);
|
inline void set_allocated_password(::std::string* password);
|
||||||
|
|
||||||
// optional bool autoLeave = 3;
|
// optional bool autoLeave = 3 [default = false];
|
||||||
inline bool has_autoleave() const;
|
inline bool has_autoleave() const;
|
||||||
inline void clear_autoleave();
|
inline void clear_autoleave();
|
||||||
static const int kAutoLeaveFieldNumber = 3;
|
static const int kAutoLeaveFieldNumber = 3;
|
||||||
inline bool autoleave() const;
|
inline bool autoleave() const;
|
||||||
inline void set_autoleave(bool value);
|
inline void set_autoleave(bool value);
|
||||||
|
|
||||||
// optional bool spectateOnly = 4;
|
// optional bool spectateOnly = 4 [default = false];
|
||||||
inline bool has_spectateonly() const;
|
inline bool has_spectateonly() const;
|
||||||
inline void clear_spectateonly();
|
inline void clear_spectateonly();
|
||||||
static const int kSpectateOnlyFieldNumber = 4;
|
static const int kSpectateOnlyFieldNumber = 4;
|
||||||
@@ -13381,6 +13395,31 @@ inline void GameListNewMessage::set_allocated_gameinfo(::NetGameInfo* gameinfo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// repeated uint32 spectatorIds = 7 [packed = true];
|
||||||
|
inline int GameListNewMessage::spectatorids_size() const {
|
||||||
|
return spectatorids_.size();
|
||||||
|
}
|
||||||
|
inline void GameListNewMessage::clear_spectatorids() {
|
||||||
|
spectatorids_.Clear();
|
||||||
|
}
|
||||||
|
inline ::google::protobuf::uint32 GameListNewMessage::spectatorids(int index) const {
|
||||||
|
return spectatorids_.Get(index);
|
||||||
|
}
|
||||||
|
inline void GameListNewMessage::set_spectatorids(int index, ::google::protobuf::uint32 value) {
|
||||||
|
spectatorids_.Set(index, value);
|
||||||
|
}
|
||||||
|
inline void GameListNewMessage::add_spectatorids(::google::protobuf::uint32 value) {
|
||||||
|
spectatorids_.Add(value);
|
||||||
|
}
|
||||||
|
inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
|
||||||
|
GameListNewMessage::spectatorids() const {
|
||||||
|
return spectatorids_;
|
||||||
|
}
|
||||||
|
inline ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
|
||||||
|
GameListNewMessage::mutable_spectatorids() {
|
||||||
|
return &spectatorids_;
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
|
||||||
// GameListUpdateMessage
|
// GameListUpdateMessage
|
||||||
@@ -14218,7 +14257,7 @@ inline void JoinExistingGameMessage::set_allocated_password(::std::string* passw
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bool autoLeave = 3;
|
// optional bool autoLeave = 3 [default = false];
|
||||||
inline bool JoinExistingGameMessage::has_autoleave() const {
|
inline bool JoinExistingGameMessage::has_autoleave() const {
|
||||||
return (_has_bits_[0] & 0x00000004u) != 0;
|
return (_has_bits_[0] & 0x00000004u) != 0;
|
||||||
}
|
}
|
||||||
@@ -14240,7 +14279,7 @@ inline void JoinExistingGameMessage::set_autoleave(bool value) {
|
|||||||
autoleave_ = value;
|
autoleave_ = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bool spectateOnly = 4;
|
// optional bool spectateOnly = 4 [default = false];
|
||||||
inline bool JoinExistingGameMessage::has_spectateonly() const {
|
inline bool JoinExistingGameMessage::has_spectateonly() const {
|
||||||
return (_has_bits_[0] & 0x00000008u) != 0;
|
return (_has_bits_[0] & 0x00000008u) != 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10182,6 +10182,20 @@ public final class ProtoBuf {
|
|||||||
* <code>required .NetGameInfo gameInfo = 6;</code>
|
* <code>required .NetGameInfo gameInfo = 6;</code>
|
||||||
*/
|
*/
|
||||||
de.pokerth.protocol.ProtoBuf.NetGameInfo getGameInfo();
|
de.pokerth.protocol.ProtoBuf.NetGameInfo getGameInfo();
|
||||||
|
|
||||||
|
// repeated uint32 spectatorIds = 7 [packed = true];
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
java.util.List<java.lang.Integer> getSpectatorIdsList();
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
int getSpectatorIdsCount();
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
int getSpectatorIds(int index);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Protobuf type {@code GameListNewMessage}
|
* Protobuf type {@code GameListNewMessage}
|
||||||
@@ -10284,6 +10298,27 @@ public final class ProtoBuf {
|
|||||||
bitField0_ |= 0x00000010;
|
bitField0_ |= 0x00000010;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 56: {
|
||||||
|
if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
|
||||||
|
spectatorIds_ = new java.util.ArrayList<java.lang.Integer>();
|
||||||
|
mutable_bitField0_ |= 0x00000040;
|
||||||
|
}
|
||||||
|
spectatorIds_.add(input.readUInt32());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 58: {
|
||||||
|
int length = input.readRawVarint32();
|
||||||
|
int limit = input.pushLimit(length);
|
||||||
|
if (!((mutable_bitField0_ & 0x00000040) == 0x00000040) && input.getBytesUntilLimit() > 0) {
|
||||||
|
spectatorIds_ = new java.util.ArrayList<java.lang.Integer>();
|
||||||
|
mutable_bitField0_ |= 0x00000040;
|
||||||
|
}
|
||||||
|
while (input.getBytesUntilLimit() > 0) {
|
||||||
|
spectatorIds_.add(input.readUInt32());
|
||||||
|
}
|
||||||
|
input.popLimit(limit);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
||||||
@@ -10295,6 +10330,9 @@ public final class ProtoBuf {
|
|||||||
if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
|
if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
|
||||||
playerIds_ = java.util.Collections.unmodifiableList(playerIds_);
|
playerIds_ = java.util.Collections.unmodifiableList(playerIds_);
|
||||||
}
|
}
|
||||||
|
if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
|
||||||
|
spectatorIds_ = java.util.Collections.unmodifiableList(spectatorIds_);
|
||||||
|
}
|
||||||
makeExtensionsImmutable();
|
makeExtensionsImmutable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10418,6 +10456,30 @@ public final class ProtoBuf {
|
|||||||
return gameInfo_;
|
return gameInfo_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// repeated uint32 spectatorIds = 7 [packed = true];
|
||||||
|
public static final int SPECTATORIDS_FIELD_NUMBER = 7;
|
||||||
|
private java.util.List<java.lang.Integer> spectatorIds_;
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
public java.util.List<java.lang.Integer>
|
||||||
|
getSpectatorIdsList() {
|
||||||
|
return spectatorIds_;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
public int getSpectatorIdsCount() {
|
||||||
|
return spectatorIds_.size();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
public int getSpectatorIds(int index) {
|
||||||
|
return spectatorIds_.get(index);
|
||||||
|
}
|
||||||
|
private int spectatorIdsMemoizedSerializedSize = -1;
|
||||||
|
|
||||||
private void initFields() {
|
private void initFields() {
|
||||||
gameId_ = 0;
|
gameId_ = 0;
|
||||||
gameMode_ = de.pokerth.protocol.ProtoBuf.NetGameMode.netGameCreated;
|
gameMode_ = de.pokerth.protocol.ProtoBuf.NetGameMode.netGameCreated;
|
||||||
@@ -10425,6 +10487,7 @@ public final class ProtoBuf {
|
|||||||
playerIds_ = java.util.Collections.emptyList();
|
playerIds_ = java.util.Collections.emptyList();
|
||||||
adminPlayerId_ = 0;
|
adminPlayerId_ = 0;
|
||||||
gameInfo_ = de.pokerth.protocol.ProtoBuf.NetGameInfo.getDefaultInstance();
|
gameInfo_ = de.pokerth.protocol.ProtoBuf.NetGameInfo.getDefaultInstance();
|
||||||
|
spectatorIds_ = java.util.Collections.emptyList();
|
||||||
}
|
}
|
||||||
private byte memoizedIsInitialized = -1;
|
private byte memoizedIsInitialized = -1;
|
||||||
public final boolean isInitialized() {
|
public final boolean isInitialized() {
|
||||||
@@ -10484,6 +10547,13 @@ public final class ProtoBuf {
|
|||||||
if (((bitField0_ & 0x00000010) == 0x00000010)) {
|
if (((bitField0_ & 0x00000010) == 0x00000010)) {
|
||||||
output.writeMessage(6, gameInfo_);
|
output.writeMessage(6, gameInfo_);
|
||||||
}
|
}
|
||||||
|
if (getSpectatorIdsList().size() > 0) {
|
||||||
|
output.writeRawVarint32(58);
|
||||||
|
output.writeRawVarint32(spectatorIdsMemoizedSerializedSize);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < spectatorIds_.size(); i++) {
|
||||||
|
output.writeUInt32NoTag(spectatorIds_.get(i));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int memoizedSerializedSize = -1;
|
private int memoizedSerializedSize = -1;
|
||||||
@@ -10526,6 +10596,20 @@ public final class ProtoBuf {
|
|||||||
size += com.google.protobuf.CodedOutputStream
|
size += com.google.protobuf.CodedOutputStream
|
||||||
.computeMessageSize(6, gameInfo_);
|
.computeMessageSize(6, gameInfo_);
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
int dataSize = 0;
|
||||||
|
for (int i = 0; i < spectatorIds_.size(); i++) {
|
||||||
|
dataSize += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeUInt32SizeNoTag(spectatorIds_.get(i));
|
||||||
|
}
|
||||||
|
size += dataSize;
|
||||||
|
if (!getSpectatorIdsList().isEmpty()) {
|
||||||
|
size += 1;
|
||||||
|
size += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeInt32SizeNoTag(dataSize);
|
||||||
|
}
|
||||||
|
spectatorIdsMemoizedSerializedSize = dataSize;
|
||||||
|
}
|
||||||
memoizedSerializedSize = size;
|
memoizedSerializedSize = size;
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
@@ -10629,6 +10713,8 @@ public final class ProtoBuf {
|
|||||||
bitField0_ = (bitField0_ & ~0x00000010);
|
bitField0_ = (bitField0_ & ~0x00000010);
|
||||||
gameInfo_ = de.pokerth.protocol.ProtoBuf.NetGameInfo.getDefaultInstance();
|
gameInfo_ = de.pokerth.protocol.ProtoBuf.NetGameInfo.getDefaultInstance();
|
||||||
bitField0_ = (bitField0_ & ~0x00000020);
|
bitField0_ = (bitField0_ & ~0x00000020);
|
||||||
|
spectatorIds_ = java.util.Collections.emptyList();
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000040);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10677,6 +10763,11 @@ public final class ProtoBuf {
|
|||||||
to_bitField0_ |= 0x00000010;
|
to_bitField0_ |= 0x00000010;
|
||||||
}
|
}
|
||||||
result.gameInfo_ = gameInfo_;
|
result.gameInfo_ = gameInfo_;
|
||||||
|
if (((bitField0_ & 0x00000040) == 0x00000040)) {
|
||||||
|
spectatorIds_ = java.util.Collections.unmodifiableList(spectatorIds_);
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000040);
|
||||||
|
}
|
||||||
|
result.spectatorIds_ = spectatorIds_;
|
||||||
result.bitField0_ = to_bitField0_;
|
result.bitField0_ = to_bitField0_;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -10708,6 +10799,16 @@ public final class ProtoBuf {
|
|||||||
if (other.hasGameInfo()) {
|
if (other.hasGameInfo()) {
|
||||||
mergeGameInfo(other.getGameInfo());
|
mergeGameInfo(other.getGameInfo());
|
||||||
}
|
}
|
||||||
|
if (!other.spectatorIds_.isEmpty()) {
|
||||||
|
if (spectatorIds_.isEmpty()) {
|
||||||
|
spectatorIds_ = other.spectatorIds_;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000040);
|
||||||
|
} else {
|
||||||
|
ensureSpectatorIdsIsMutable();
|
||||||
|
spectatorIds_.addAll(other.spectatorIds_);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11020,6 +11121,72 @@ public final class ProtoBuf {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// repeated uint32 spectatorIds = 7 [packed = true];
|
||||||
|
private java.util.List<java.lang.Integer> spectatorIds_ = java.util.Collections.emptyList();
|
||||||
|
private void ensureSpectatorIdsIsMutable() {
|
||||||
|
if (!((bitField0_ & 0x00000040) == 0x00000040)) {
|
||||||
|
spectatorIds_ = new java.util.ArrayList<java.lang.Integer>(spectatorIds_);
|
||||||
|
bitField0_ |= 0x00000040;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
public java.util.List<java.lang.Integer>
|
||||||
|
getSpectatorIdsList() {
|
||||||
|
return java.util.Collections.unmodifiableList(spectatorIds_);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
public int getSpectatorIdsCount() {
|
||||||
|
return spectatorIds_.size();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
public int getSpectatorIds(int index) {
|
||||||
|
return spectatorIds_.get(index);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
public Builder setSpectatorIds(
|
||||||
|
int index, int value) {
|
||||||
|
ensureSpectatorIdsIsMutable();
|
||||||
|
spectatorIds_.set(index, value);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
public Builder addSpectatorIds(int value) {
|
||||||
|
ensureSpectatorIdsIsMutable();
|
||||||
|
spectatorIds_.add(value);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
public Builder addAllSpectatorIds(
|
||||||
|
java.lang.Iterable<? extends java.lang.Integer> values) {
|
||||||
|
ensureSpectatorIdsIsMutable();
|
||||||
|
super.addAll(values, spectatorIds_);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>repeated uint32 spectatorIds = 7 [packed = true];</code>
|
||||||
|
*/
|
||||||
|
public Builder clearSpectatorIds() {
|
||||||
|
spectatorIds_ = java.util.Collections.emptyList();
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000040);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
// @@protoc_insertion_point(builder_scope:GameListNewMessage)
|
// @@protoc_insertion_point(builder_scope:GameListNewMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -16272,23 +16439,23 @@ public final class ProtoBuf {
|
|||||||
com.google.protobuf.ByteString
|
com.google.protobuf.ByteString
|
||||||
getPasswordBytes();
|
getPasswordBytes();
|
||||||
|
|
||||||
// optional bool autoLeave = 3;
|
// optional bool autoLeave = 3 [default = false];
|
||||||
/**
|
/**
|
||||||
* <code>optional bool autoLeave = 3;</code>
|
* <code>optional bool autoLeave = 3 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
boolean hasAutoLeave();
|
boolean hasAutoLeave();
|
||||||
/**
|
/**
|
||||||
* <code>optional bool autoLeave = 3;</code>
|
* <code>optional bool autoLeave = 3 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
boolean getAutoLeave();
|
boolean getAutoLeave();
|
||||||
|
|
||||||
// optional bool spectateOnly = 4;
|
// optional bool spectateOnly = 4 [default = false];
|
||||||
/**
|
/**
|
||||||
* <code>optional bool spectateOnly = 4;</code>
|
* <code>optional bool spectateOnly = 4 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
boolean hasSpectateOnly();
|
boolean hasSpectateOnly();
|
||||||
/**
|
/**
|
||||||
* <code>optional bool spectateOnly = 4;</code>
|
* <code>optional bool spectateOnly = 4 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
boolean getSpectateOnly();
|
boolean getSpectateOnly();
|
||||||
}
|
}
|
||||||
@@ -16441,33 +16608,33 @@ public final class ProtoBuf {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bool autoLeave = 3;
|
// optional bool autoLeave = 3 [default = false];
|
||||||
public static final int AUTOLEAVE_FIELD_NUMBER = 3;
|
public static final int AUTOLEAVE_FIELD_NUMBER = 3;
|
||||||
private boolean autoLeave_;
|
private boolean autoLeave_;
|
||||||
/**
|
/**
|
||||||
* <code>optional bool autoLeave = 3;</code>
|
* <code>optional bool autoLeave = 3 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasAutoLeave() {
|
public boolean hasAutoLeave() {
|
||||||
return ((bitField0_ & 0x00000004) == 0x00000004);
|
return ((bitField0_ & 0x00000004) == 0x00000004);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* <code>optional bool autoLeave = 3;</code>
|
* <code>optional bool autoLeave = 3 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
public boolean getAutoLeave() {
|
public boolean getAutoLeave() {
|
||||||
return autoLeave_;
|
return autoLeave_;
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bool spectateOnly = 4;
|
// optional bool spectateOnly = 4 [default = false];
|
||||||
public static final int SPECTATEONLY_FIELD_NUMBER = 4;
|
public static final int SPECTATEONLY_FIELD_NUMBER = 4;
|
||||||
private boolean spectateOnly_;
|
private boolean spectateOnly_;
|
||||||
/**
|
/**
|
||||||
* <code>optional bool spectateOnly = 4;</code>
|
* <code>optional bool spectateOnly = 4 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasSpectateOnly() {
|
public boolean hasSpectateOnly() {
|
||||||
return ((bitField0_ & 0x00000008) == 0x00000008);
|
return ((bitField0_ & 0x00000008) == 0x00000008);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* <code>optional bool spectateOnly = 4;</code>
|
* <code>optional bool spectateOnly = 4 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
public boolean getSpectateOnly() {
|
public boolean getSpectateOnly() {
|
||||||
return spectateOnly_;
|
return spectateOnly_;
|
||||||
@@ -16826,22 +16993,22 @@ public final class ProtoBuf {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bool autoLeave = 3;
|
// optional bool autoLeave = 3 [default = false];
|
||||||
private boolean autoLeave_ ;
|
private boolean autoLeave_ ;
|
||||||
/**
|
/**
|
||||||
* <code>optional bool autoLeave = 3;</code>
|
* <code>optional bool autoLeave = 3 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasAutoLeave() {
|
public boolean hasAutoLeave() {
|
||||||
return ((bitField0_ & 0x00000004) == 0x00000004);
|
return ((bitField0_ & 0x00000004) == 0x00000004);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* <code>optional bool autoLeave = 3;</code>
|
* <code>optional bool autoLeave = 3 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
public boolean getAutoLeave() {
|
public boolean getAutoLeave() {
|
||||||
return autoLeave_;
|
return autoLeave_;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* <code>optional bool autoLeave = 3;</code>
|
* <code>optional bool autoLeave = 3 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
public Builder setAutoLeave(boolean value) {
|
public Builder setAutoLeave(boolean value) {
|
||||||
bitField0_ |= 0x00000004;
|
bitField0_ |= 0x00000004;
|
||||||
@@ -16850,7 +17017,7 @@ public final class ProtoBuf {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* <code>optional bool autoLeave = 3;</code>
|
* <code>optional bool autoLeave = 3 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
public Builder clearAutoLeave() {
|
public Builder clearAutoLeave() {
|
||||||
bitField0_ = (bitField0_ & ~0x00000004);
|
bitField0_ = (bitField0_ & ~0x00000004);
|
||||||
@@ -16859,22 +17026,22 @@ public final class ProtoBuf {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional bool spectateOnly = 4;
|
// optional bool spectateOnly = 4 [default = false];
|
||||||
private boolean spectateOnly_ ;
|
private boolean spectateOnly_ ;
|
||||||
/**
|
/**
|
||||||
* <code>optional bool spectateOnly = 4;</code>
|
* <code>optional bool spectateOnly = 4 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
public boolean hasSpectateOnly() {
|
public boolean hasSpectateOnly() {
|
||||||
return ((bitField0_ & 0x00000008) == 0x00000008);
|
return ((bitField0_ & 0x00000008) == 0x00000008);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* <code>optional bool spectateOnly = 4;</code>
|
* <code>optional bool spectateOnly = 4 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
public boolean getSpectateOnly() {
|
public boolean getSpectateOnly() {
|
||||||
return spectateOnly_;
|
return spectateOnly_;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* <code>optional bool spectateOnly = 4;</code>
|
* <code>optional bool spectateOnly = 4 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
public Builder setSpectateOnly(boolean value) {
|
public Builder setSpectateOnly(boolean value) {
|
||||||
bitField0_ |= 0x00000008;
|
bitField0_ |= 0x00000008;
|
||||||
@@ -16883,7 +17050,7 @@ public final class ProtoBuf {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* <code>optional bool spectateOnly = 4;</code>
|
* <code>optional bool spectateOnly = 4 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
public Builder clearSpectateOnly() {
|
public Builder clearSpectateOnly() {
|
||||||
bitField0_ = (bitField0_ & ~0x00000008);
|
bitField0_ = (bitField0_ & ~0x00000008);
|
||||||
|
|||||||
@@ -40,7 +40,8 @@ import org.junit.runners.Suite;
|
|||||||
RunRankingGameTest.class,
|
RunRankingGameTest.class,
|
||||||
RejoinGameTest.class,
|
RejoinGameTest.class,
|
||||||
RejoinMultiGameTest.class,
|
RejoinMultiGameTest.class,
|
||||||
SeatStateTest.class
|
SeatStateTest.class,
|
||||||
|
SpectatorJoinTest.class
|
||||||
})
|
})
|
||||||
public class AllTests {
|
public class AllTests {
|
||||||
public static void main(String[] args)
|
public static void main(String[] args)
|
||||||
|
|||||||
@@ -0,0 +1,262 @@
|
|||||||
|
/* PokerTH automated tests.
|
||||||
|
Copyright (C) 2013 Lothar May
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as
|
||||||
|
published by the Free Software Foundation, either version 3 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.pokerth.test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import de.pokerth.protocol.ProtoBuf.NetGameInfo;
|
||||||
|
import de.pokerth.protocol.ProtoBuf.PokerTHMessage;
|
||||||
|
import de.pokerth.protocol.ProtoBuf.StartEventAckMessage;
|
||||||
|
import de.pokerth.protocol.ProtoBuf.NetGameInfo.EndRaiseMode;
|
||||||
|
import de.pokerth.protocol.ProtoBuf.NetGameInfo.NetGameType;
|
||||||
|
import de.pokerth.protocol.ProtoBuf.PokerTHMessage.PokerTHMessageType;
|
||||||
|
|
||||||
|
public class SpectatorJoinTest extends TestBase {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSpectatorJoinGameBeforeStart() throws Exception {
|
||||||
|
Guid firstPlayerSession = new Guid();
|
||||||
|
int firstPlayerId = userInit(sock, AuthUser, AuthPassword, null, firstPlayerSession);
|
||||||
|
|
||||||
|
// Waiting for player list update.
|
||||||
|
PokerTHMessage msg;
|
||||||
|
msg = receiveMessage();
|
||||||
|
if (!msg.hasPlayerListMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
|
||||||
|
Collection<Integer> l = new ArrayList<Integer>();
|
||||||
|
String gameName = AuthUser + " rejoin game";
|
||||||
|
NetGameInfo gameInfo = createGameInfo(NetGameType.normalGame, 5, 7, 5, EndRaiseMode.doubleBlinds, 0, 50, gameName, l, 10, 0, 11, 10000);
|
||||||
|
sendMessage(createGameRequestMsg(
|
||||||
|
gameInfo,
|
||||||
|
"",
|
||||||
|
false));
|
||||||
|
|
||||||
|
// Game list update (new game)
|
||||||
|
msg = receiveMessage();
|
||||||
|
if (!msg.hasGameListNewMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Join game ack.
|
||||||
|
msg = receiveMessage();
|
||||||
|
if (!msg.hasJoinGameAckMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Could not create game!");
|
||||||
|
}
|
||||||
|
int gameId = msg.getJoinGameAckMessage().getGameId();
|
||||||
|
|
||||||
|
// Game list update (player joined).
|
||||||
|
msg = receiveMessage();
|
||||||
|
if (!msg.hasGameListPlayerJoinedMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Let a spectator join.
|
||||||
|
Socket spectatorSock = new Socket("localhost", 7234);
|
||||||
|
int spectatorId = userInit(spectatorSock, "test20", "test20");
|
||||||
|
|
||||||
|
msg = receiveMessage(spectatorSock);
|
||||||
|
if (!msg.hasPlayerListMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
msg = receiveMessage(spectatorSock);
|
||||||
|
if (!msg.hasGameListNewMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
msg = receiveMessage(spectatorSock);
|
||||||
|
if (!msg.hasPlayerListMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
// Player List should also be updated for first player.
|
||||||
|
msg = receiveMessage();
|
||||||
|
if (!msg.hasPlayerListMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
|
||||||
|
sendMessage(joinGameRequestMsg(gameId, "", false, true), spectatorSock);
|
||||||
|
msg = receiveMessage(spectatorSock);
|
||||||
|
if (!msg.hasJoinGameAckMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
assertTrue(msg.getJoinGameAckMessage().getSpectateOnly());
|
||||||
|
|
||||||
|
msg = receiveMessage(spectatorSock);
|
||||||
|
if (!msg.hasGamePlayerJoinedMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
assertEquals(firstPlayerId, msg.getGamePlayerJoinedMessage().getPlayerId());
|
||||||
|
// TODO Spectator joined message is missing here!
|
||||||
|
|
||||||
|
msg = receiveMessage(spectatorSock);
|
||||||
|
if (!msg.hasGameListSpectatorJoinedMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
assertEquals(gameId, msg.getGameListSpectatorJoinedMessage().getGameId());
|
||||||
|
assertEquals(spectatorId, msg.getGameListSpectatorJoinedMessage().getPlayerId());
|
||||||
|
|
||||||
|
// Spectator should be visible for first player.
|
||||||
|
msg = receiveMessage();
|
||||||
|
if (!msg.hasGameSpectatorJoinedMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
msg = receiveMessage();
|
||||||
|
if (!msg.hasGameListSpectatorJoinedMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Let 9 additional clients join.
|
||||||
|
Socket s[] = new Socket[9];
|
||||||
|
int playerId[] = new int[9];
|
||||||
|
for (int i = 0; i < 9; i++) {
|
||||||
|
s[i] = new Socket("localhost", 7234);
|
||||||
|
String username = "test" + (i+1);
|
||||||
|
String password = username;
|
||||||
|
playerId[i] = userInit(s[i], username, password);
|
||||||
|
|
||||||
|
// Waiting for player list update.
|
||||||
|
do {
|
||||||
|
msg = receiveMessage(s[i]);
|
||||||
|
} while (msg.hasPlayerListMessage());
|
||||||
|
|
||||||
|
if (!msg.hasGameListNewMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
assertEquals(1, msg.getGameListNewMessage().getSpectatorIdsCount());
|
||||||
|
assertEquals(spectatorId, msg.getGameListNewMessage().getSpectatorIds(0));
|
||||||
|
do {
|
||||||
|
msg = receiveMessage(s[i]);
|
||||||
|
} while (msg.hasGameListPlayerJoinedMessage() || msg.hasGamePlayerJoinedMessage());
|
||||||
|
sendMessage(joinGameRequestMsg(gameId, "", false), s[i]);
|
||||||
|
do {
|
||||||
|
msg = receiveMessage(s[i]);
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
} while (!msg.hasJoinGameAckMessage() && !msg.hasJoinGameFailedMessage());
|
||||||
|
if (!msg.hasJoinGameAckMessage()) {
|
||||||
|
fail("User " + username + " could not join ranking game.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// The player should have joined the game.
|
||||||
|
msg = receiveMessage();
|
||||||
|
if (!msg.hasPlayerListMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
msg = receiveMessage();
|
||||||
|
if (!msg.hasGamePlayerJoinedMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
msg = receiveMessage();
|
||||||
|
if (!msg.hasGameListPlayerJoinedMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
// The spectator should also receive the updates.
|
||||||
|
msg = receiveMessage(spectatorSock);
|
||||||
|
if (!msg.hasPlayerListMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
msg = receiveMessage(spectatorSock);
|
||||||
|
if (!msg.hasGamePlayerJoinedMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
msg = receiveMessage(spectatorSock);
|
||||||
|
if (!msg.hasGameListPlayerJoinedMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Server should automatically send start event.
|
||||||
|
msg = receiveMessage();
|
||||||
|
if (!msg.hasStartEventMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 9; i++) {
|
||||||
|
do {
|
||||||
|
msg = receiveMessage(s[i]);
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
} while (!msg.hasStartEventMessage());
|
||||||
|
}
|
||||||
|
// Acknowledge start event.
|
||||||
|
StartEventAckMessage startAck = StartEventAckMessage.newBuilder()
|
||||||
|
.setGameId(gameId)
|
||||||
|
.build();
|
||||||
|
msg = PokerTHMessage.newBuilder()
|
||||||
|
.setMessageType(PokerTHMessageType.Type_StartEventAckMessage)
|
||||||
|
.setStartEventAckMessage(startAck)
|
||||||
|
.build();
|
||||||
|
sendMessage(msg);
|
||||||
|
for (int i = 0; i < 9; i++) {
|
||||||
|
sendMessage(msg, s[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Game list update (game now running).
|
||||||
|
msg = receiveMessage(spectatorSock);
|
||||||
|
if (!msg.hasGameListUpdateMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
|
||||||
|
msg = receiveMessage(spectatorSock);
|
||||||
|
if (!msg.hasGameStartInitialMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Spectator should receive a hand start message without cards.
|
||||||
|
msg = receiveMessage(spectatorSock);
|
||||||
|
if (!msg.hasHandStartMessage()) {
|
||||||
|
failOnErrorMessage(msg);
|
||||||
|
fail("Invalid message: " + msg.getMessageType());
|
||||||
|
}
|
||||||
|
assertFalse(msg.getHandStartMessage().hasEncryptedCards());
|
||||||
|
assertFalse(msg.getHandStartMessage().hasPlainCards());
|
||||||
|
assertEquals(gameId, msg.getHandStartMessage().getGameId());
|
||||||
|
|
||||||
|
for (int i = 0; i < 9; i++) {
|
||||||
|
s[i].close();
|
||||||
|
}
|
||||||
|
spectatorSock.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -289,9 +289,14 @@ public abstract class TestBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public PokerTHMessage joinGameRequestMsg(int gameId, String password, boolean autoLeave) {
|
public PokerTHMessage joinGameRequestMsg(int gameId, String password, boolean autoLeave) {
|
||||||
|
return joinGameRequestMsg(gameId, password, autoLeave, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PokerTHMessage joinGameRequestMsg(int gameId, String password, boolean autoLeave, boolean spectateOnly) {
|
||||||
JoinExistingGameMessage.Builder joinBuilder = JoinExistingGameMessage.newBuilder();
|
JoinExistingGameMessage.Builder joinBuilder = JoinExistingGameMessage.newBuilder();
|
||||||
joinBuilder.setGameId(gameId);
|
joinBuilder.setGameId(gameId);
|
||||||
joinBuilder.setAutoLeave(autoLeave);
|
joinBuilder.setAutoLeave(autoLeave);
|
||||||
|
joinBuilder.setSpectateOnly(spectateOnly);
|
||||||
if (!password.isEmpty()) {
|
if (!password.isEmpty()) {
|
||||||
joinBuilder.setPassword(password);
|
joinBuilder.setPassword(password);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user