corrections and starting reentry development
This commit is contained in:
@@ -424,6 +424,7 @@ message StartEventMessage {
|
|||||||
enum StartEventType {
|
enum StartEventType {
|
||||||
startEvent = 0;
|
startEvent = 0;
|
||||||
rejoinEvent = 1;
|
rejoinEvent = 1;
|
||||||
|
reentryEvent = 2;
|
||||||
}
|
}
|
||||||
required StartEventType startEventType = 2;
|
required StartEventType startEventType = 2;
|
||||||
optional bool fillWithComputerPlayers = 3;
|
optional bool fillWithComputerPlayers = 3;
|
||||||
|
|||||||
@@ -324,3 +324,20 @@ void Game::raiseBlinds()
|
|||||||
currentSmallBlind = min(currentSmallBlind,startQuantityPlayers*startCash/2);
|
currentSmallBlind = min(currentSmallBlind,startQuantityPlayers*startCash/2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::shared_ptr<PlayerInterface>
|
||||||
|
Game::addNewPlayer(boost::shared_ptr<PlayerData> player)
|
||||||
|
{
|
||||||
|
|
||||||
|
// TODO (albmed): We must think how:
|
||||||
|
// also add to seatList (or replace a free slot if 10 players tops)
|
||||||
|
|
||||||
|
int i = 0; // ERROR. Thik about approppiate value (probably this should be set after a seat is found)
|
||||||
|
|
||||||
|
boost::shared_ptr<PlayerInterface> tmpPlayer = myFactory->createPlayer(i, player->GetUniqueId(), player->GetType(), player->GetName(), player->GetAvatarFile(), player->GetStartCash(), startQuantityPlayers > i, PLAYER_TYPE_HUMAN, 0);
|
||||||
|
tmpPlayer->setIsSessionActive(true); // ??? Really ???
|
||||||
|
tmpPlayer->setMyGuid(player->GetGuid());
|
||||||
|
|
||||||
|
|
||||||
|
return tmpPlayer;
|
||||||
|
}
|
||||||
|
|||||||
@@ -142,6 +142,8 @@ public:
|
|||||||
boost::shared_ptr<PlayerInterface> getPlayerByName(const std::string &name);
|
boost::shared_ptr<PlayerInterface> getPlayerByName(const std::string &name);
|
||||||
boost::shared_ptr<PlayerInterface> getCurrentPlayer();
|
boost::shared_ptr<PlayerInterface> getCurrentPlayer();
|
||||||
|
|
||||||
|
boost::shared_ptr<PlayerInterface> addNewPlayer(boost::shared_ptr<PlayerData> player);
|
||||||
|
|
||||||
void raiseBlinds();
|
void raiseBlinds();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -76,10 +76,18 @@ ServerGame::ServerGame(boost::shared_ptr<ServerLobbyThread> lobbyThread, u_int32
|
|||||||
{
|
{
|
||||||
LOG_VERBOSE("Game object " << GetId() << " created.");
|
LOG_VERBOSE("Game object " << GetId() << " created.");
|
||||||
|
|
||||||
|
// TODO (albmed): Next is wrong!!
|
||||||
|
// If game is restarted without being created, m_isLateRegAllowed probably will be always false because its timer would already be cancelled in previous game and object is not created again.
|
||||||
|
// So, constructor is not called again.
|
||||||
|
// m_isLateRegAllowed should probably be set on Init() function or in ServerGameStateInit::Enter. To be checked!!
|
||||||
|
|
||||||
|
|
||||||
// set late reg allowed
|
// set late reg allowed
|
||||||
if ((m_gameData.gameType == GAME_TYPE_NORMAL || m_gameData.gameType == GAME_TYPE_REGISTERED_ONLY) &&
|
if ((m_gameData.gameType == GAME_TYPE_NORMAL || m_gameData.gameType == GAME_TYPE_REGISTERED_ONLY) &&
|
||||||
(m_gameData.allowLateReg || m_gameData.allowReentries) &&
|
(m_gameData.allowLateReg || m_gameData.allowReentries) &&
|
||||||
m_gameData.maxTimeLateReg > 0) m_isLateRegAllowed = true;
|
m_gameData.maxTimeLateReg > 0) m_isLateRegAllowed = true;
|
||||||
|
|
||||||
|
LOG_MSG("m_isLateRegAllowed: " << std::boolalpha << m_isLateRegAllowed);
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerGame::~ServerGame()
|
ServerGame::~ServerGame()
|
||||||
@@ -787,6 +795,13 @@ ServerGame::AddRejoinPlayer(unsigned playerId)
|
|||||||
m_rejoinPlayerList.push_back(playerId);
|
m_rejoinPlayerList.push_back(playerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ServerGame::AddReentryPlayer(unsigned playerId)
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(m_reentryPlayerListMutex);
|
||||||
|
m_reentryPlayerList.push_back(playerId);
|
||||||
|
}
|
||||||
|
|
||||||
PlayerIdList
|
PlayerIdList
|
||||||
ServerGame::GetAndResetRejoinPlayers()
|
ServerGame::GetAndResetRejoinPlayers()
|
||||||
{
|
{
|
||||||
@@ -796,6 +811,22 @@ ServerGame::GetAndResetRejoinPlayers()
|
|||||||
return tmpList;
|
return tmpList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned
|
||||||
|
ServerGame::GetNumberPlayersReentry()
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(m_rejoinPlayerListMutex);
|
||||||
|
return static_cast<unsigned>(m_rejoinPlayerList.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerIdList
|
||||||
|
ServerGame::GetAndResetReentryPlayers()
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(m_reentryPlayerListMutex);
|
||||||
|
PlayerIdList tmpList(m_reentryPlayerList);
|
||||||
|
m_reentryPlayerList.clear();
|
||||||
|
return tmpList;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::AddReactivatePlayer(unsigned playerId)
|
ServerGame::AddReactivatePlayer(unsigned playerId)
|
||||||
{
|
{
|
||||||
@@ -1258,6 +1289,18 @@ ServerGame::setEntries(const PlayerDataList &playerDataList) {
|
|||||||
m_numEntriesPlayer[tmpPlayer->GetName()] = 0;
|
m_numEntriesPlayer[tmpPlayer->GetName()] = 0;
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
LOG_MSG("Printting set entries:");
|
||||||
|
|
||||||
|
NumJoinsPerPlayerMap::const_iterator i = m_numEntriesPlayer.begin();
|
||||||
|
NumJoinsPerPlayerMap::const_iterator end = m_numEntriesPlayer.end();
|
||||||
|
|
||||||
|
while (i != end) {
|
||||||
|
LOG_MSG("\t{player, entries}: {" << (*i).first << ", " << (*i).second << "}");
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@@ -1266,7 +1309,8 @@ ServerGame::admitReentries(boost::shared_ptr<PlayerData> player) { // FIXME: may
|
|||||||
bool retVal = false;
|
bool retVal = false;
|
||||||
const GameData &tmpGameData = GetGameData();
|
const GameData &tmpGameData = GetGameData();
|
||||||
|
|
||||||
if (!m_isLateRegAllowed) return retVal;
|
// uncomment to remove logs
|
||||||
|
/*if (!m_isLateRegAllowed) return retVal;
|
||||||
NumJoinsPerPlayerMap::iterator pos = m_numEntriesPlayer.find(player->GetName());
|
NumJoinsPerPlayerMap::iterator pos = m_numEntriesPlayer.find(player->GetName());
|
||||||
if (pos != m_numEntriesPlayer.end()) { // is reentry
|
if (pos != m_numEntriesPlayer.end()) { // is reentry
|
||||||
if (!tmpGameData.allowReentries || pos->second++ >= tmpGameData.numReentries ) return retVal; // number of entries exceeded
|
if (!tmpGameData.allowReentries || pos->second++ >= tmpGameData.numReentries ) return retVal; // number of entries exceeded
|
||||||
@@ -1274,7 +1318,35 @@ ServerGame::admitReentries(boost::shared_ptr<PlayerData> player) { // FIXME: may
|
|||||||
else { // is late reg
|
else { // is late reg
|
||||||
if (!tmpGameData.allowLateReg) return false; // does not allow late reg
|
if (!tmpGameData.allowLateReg) return false; // does not allow late reg
|
||||||
m_numEntriesPlayer[player->GetName()] = 0; // add player as new entry. Perhaps this should be set otherplace
|
m_numEntriesPlayer[player->GetName()] = 0; // add player as new entry. Perhaps this should be set otherplace
|
||||||
|
}*/
|
||||||
|
|
||||||
|
// comment or delete to remove logs -- begin
|
||||||
|
if (!m_isLateRegAllowed) {
|
||||||
|
LOG_MSG("Late reg was not allowed or is no longer available");
|
||||||
|
return retVal;
|
||||||
}
|
}
|
||||||
|
NumJoinsPerPlayerMap::iterator pos = m_numEntriesPlayer.find(player->GetName());
|
||||||
|
if (pos != m_numEntriesPlayer.end()) { // is reentry
|
||||||
|
LOG_MSG("Player " << player->GetName() << " is trying to re-entry. Previous entries: " << pos->second);
|
||||||
|
if (!tmpGameData.allowReentries || pos->second++ >= tmpGameData.numReentries ) {
|
||||||
|
LOG_MSG("Number of reentries exceeded");
|
||||||
|
return retVal; // number of entries exceeded
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LOG_MSG("Allowed to re-entry");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else { // is late reg
|
||||||
|
LOG_MSG("Player " << player->GetName() << " is trying a late reg");
|
||||||
|
if (!tmpGameData.allowLateReg) {
|
||||||
|
LOG_MSG("Game does not allow late reg");
|
||||||
|
return false; // does not allow late reg
|
||||||
|
}
|
||||||
|
m_numEntriesPlayer[player->GetName()] = 0; // add player as new entry. Perhaps this should be set otherplace
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_MSG("Late reg allowed!! ");
|
||||||
|
// comment or delete to remove logs -- end
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1282,6 +1354,8 @@ ServerGame::admitReentries(boost::shared_ptr<PlayerData> player) { // FIXME: may
|
|||||||
void
|
void
|
||||||
ServerGame::CancelLateReg() {
|
ServerGame::CancelLateReg() {
|
||||||
m_isLateRegAllowed = false;
|
m_isLateRegAllowed = false;
|
||||||
|
|
||||||
|
LOG_MSG("Called CancelLateReg");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|||||||
@@ -92,6 +92,8 @@ using namespace boost::chrono;
|
|||||||
|
|
||||||
#define GAME_MAX_NUM_JOINS_PER_PLAYER 6
|
#define GAME_MAX_NUM_JOINS_PER_PLAYER 6
|
||||||
|
|
||||||
|
//#define TESTS_LATE_REG // (albmed) To develop set this define, to compile comment until reentry is implemented
|
||||||
|
|
||||||
// Helper functions
|
// Helper functions
|
||||||
|
|
||||||
static void SendPlayerAction(ServerGame &server, boost::shared_ptr<PlayerInterface> player)
|
static void SendPlayerAction(ServerGame &server, boost::shared_ptr<PlayerInterface> player)
|
||||||
@@ -227,6 +229,35 @@ SetPlayerResult(PlayerResult &playerResult, boost::shared_ptr<PlayerInterface> t
|
|||||||
playerResult.set_playermoney(tmpPlayer->getMyCash());
|
playerResult.set_playermoney(tmpPlayer->getMyCash());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
GetRandomFreeSeat(PlayerList playerList) {
|
||||||
|
|
||||||
|
// seek for a free seat
|
||||||
|
PlayerListConstIterator player_i = playerList->begin();
|
||||||
|
PlayerListConstIterator player_end = playerList->end();
|
||||||
|
|
||||||
|
std::vector<int> v(10, 0);
|
||||||
|
while (player_i != player_end) {
|
||||||
|
v[(*player_i)->getMyID()] = 1; // mark seats with player
|
||||||
|
++player_i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// random seats
|
||||||
|
random_shuffle(v.begin(), v.end());
|
||||||
|
|
||||||
|
int seat = -1;
|
||||||
|
// seeks first free seat
|
||||||
|
for (int i = 0; i < v.size(); i++) {
|
||||||
|
if (v[i] == 0) {
|
||||||
|
seat = i;
|
||||||
|
beak;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return seat;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
ServerGameState::~ServerGameState()
|
ServerGameState::~ServerGameState()
|
||||||
@@ -828,7 +859,7 @@ ServerGameStateStartGame::TimerTimeout(const boost::system::error_code &ec, boos
|
|||||||
void
|
void
|
||||||
ServerGameStateStartGame::TimerAllowLateRegTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server)
|
ServerGameStateStartGame::TimerAllowLateRegTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server)
|
||||||
{
|
{
|
||||||
if (!ec) { // ( && &server->GetState() != &ServerGameStateFinal::s_state ) I don't know how to check if state is not final
|
if (!ec && &server->GetState() != &ServerGameStateFinal::Instance()) {
|
||||||
server->CancelLateReg();
|
server->CancelLateReg();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -869,11 +900,11 @@ ServerGameStateStartGame::DoStart(boost::shared_ptr<ServerGame> server)
|
|||||||
|
|
||||||
while (player_i != player_end) {
|
while (player_i != player_end) {
|
||||||
boost::shared_ptr<PlayerData> tmpPlayer = (*player_i);
|
boost::shared_ptr<PlayerData> tmpPlayer = (*player_i);
|
||||||
LOG_MSG("\t\t {UID, name, GUID, seat}" <<
|
LOG_MSG("\t\t {UID, name, GUID, seat}: -> {" <<
|
||||||
tmpPlayer->GetUniqueId() << ", " <<
|
tmpPlayer->GetUniqueId() << ", " <<
|
||||||
tmpPlayer->GetName() << ", " <<
|
tmpPlayer->GetName() << ", " <<
|
||||||
tmpPlayer->GetGuid() << ", " <<
|
tmpPlayer->GetGuid() << ", " <<
|
||||||
tmpPlayer->GetNumber()
|
tmpPlayer->GetNumber() << "}"
|
||||||
);
|
);
|
||||||
++player_i;
|
++player_i;
|
||||||
}
|
}
|
||||||
@@ -882,6 +913,8 @@ ServerGameStateStartGame::DoStart(boost::shared_ptr<ServerGame> server)
|
|||||||
|
|
||||||
server->SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating);
|
server->SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating);
|
||||||
|
|
||||||
|
LOG_MSG("Starting timer for LateReg");
|
||||||
|
|
||||||
// set late reg timer (if allowed)
|
// set late reg timer (if allowed)
|
||||||
if (server->IsLateReg()) {
|
if (server->IsLateReg()) {
|
||||||
server->GetAllowEntryTimer().expires_from_now(
|
server->GetAllowEntryTimer().expires_from_now(
|
||||||
@@ -929,17 +962,42 @@ AbstractServerGameStateRunning::HandleNewPlayer(boost::shared_ptr<ServerGame> se
|
|||||||
else if (session && session->GetPlayerData() && server->admitReentries(session->GetPlayerData())) {
|
else if (session && session->GetPlayerData() && server->admitReentries(session->GetPlayerData())) {
|
||||||
const GameData tmpGameData = server->GetGameData();
|
const GameData tmpGameData = server->GetGameData();
|
||||||
|
|
||||||
if (server->GetCurNumberOfPlayers() < tmpGameData.maxNumberOfPlayers) { // there is a seat available
|
if (server->GetCurNumberOfPlayers() + server->GetNumberPlayersReentry() < tmpGameData.maxNumberOfPlayers) { // there is a seat available
|
||||||
AcceptNewSession(server, session, false); // player wants to join
|
|
||||||
|
|
||||||
// TODO:
|
|
||||||
// - locate seat
|
|
||||||
|
|
||||||
|
#ifndef TESTS_LATE_REG
|
||||||
|
server->MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL);
|
||||||
|
#else
|
||||||
|
// Uncomment next line when implemented
|
||||||
|
AcceptNewSession(server, session, false); // player wants to join
|
||||||
|
server->AddReentryPlayer(session->GetPlayerData()->GetUniqueId()); // add to list of players to reentry
|
||||||
|
|
||||||
|
LOG_MSG("Late reg is allowed and there is a seat available... unfortunatelly not implemented, yet ;)");
|
||||||
|
|
||||||
|
// Send start event right away.
|
||||||
|
boost::shared_ptr<NetPacket> packet(new NetPacket);
|
||||||
|
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_StartEventMessage);
|
||||||
|
StartEventMessage *netStartEvent = packet->GetMsg()->mutable_starteventmessage();
|
||||||
|
netStartEvent->set_starteventtype(StartEventMessage::reentryEvent); // <-- set reentry event!! TODO (albmed): Fist we have to check proto NET versions. Both NET_VERSION_MAJOR & NET_VERSION_MINOR
|
||||||
|
netStartEvent->set_gameid(server->GetId());
|
||||||
|
|
||||||
|
// Wait for rejoining player to confirm start of game.
|
||||||
|
server->GetLobbyThread().GetSender().Send(session, packet);
|
||||||
|
|
||||||
|
|
||||||
|
// TODO (albmed):
|
||||||
|
// - locate seat ---> this should be done in ServerGameStateHand::StartNewHand
|
||||||
// - notify players and users
|
// - notify players and users
|
||||||
// - move session to server
|
// - move session to server
|
||||||
// - set cash
|
// - set cash
|
||||||
// - wait for button to pass (if necessary)
|
// - wait for button to pass (if necessary)
|
||||||
// - let player play
|
// - let player play
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
server->MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL);
|
server->MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL);
|
||||||
@@ -1323,11 +1381,11 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
|
|||||||
while (i != end) {
|
while (i != end) {
|
||||||
boost::shared_ptr<PlayerInterface> tmpPlayer = (*i);
|
boost::shared_ptr<PlayerInterface> tmpPlayer = (*i);
|
||||||
|
|
||||||
LOG_MSG("\t\t {ID, name, GUID; UID} => " <<
|
LOG_MSG("\t\t {ID, name, UID} -> {" <<
|
||||||
tmpPlayer->getMyID() << ", " <<
|
tmpPlayer->getMyID() << ", " <<
|
||||||
tmpPlayer->getMyName() << ", " <<
|
tmpPlayer->getMyName() << ", " <<
|
||||||
tmpPlayer->getMyUniqueID() << ", " <<
|
tmpPlayer->getMyUniqueID() << "}"
|
||||||
tmpPlayer->getMyGuid());
|
);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1338,11 +1396,11 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
|
|||||||
while (i != end) {
|
while (i != end) {
|
||||||
boost::shared_ptr<PlayerInterface> tmpPlayer = (*i);
|
boost::shared_ptr<PlayerInterface> tmpPlayer = (*i);
|
||||||
|
|
||||||
LOG_MSG("\t\t {ID, name, GUID; UID} => " <<
|
LOG_MSG("\t\t {ID, name, UID} -> {" <<
|
||||||
tmpPlayer->getMyID() << ", " <<
|
tmpPlayer->getMyID() << ", " <<
|
||||||
tmpPlayer->getMyName() << ", " <<
|
tmpPlayer->getMyName() << ", " <<
|
||||||
tmpPlayer->getMyUniqueID() << ", " <<
|
tmpPlayer->getMyUniqueID() << "}"
|
||||||
tmpPlayer->getMyGuid());
|
);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1353,11 +1411,11 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
|
|||||||
while (i != end) {
|
while (i != end) {
|
||||||
boost::shared_ptr<PlayerInterface> tmpPlayer = (*i);
|
boost::shared_ptr<PlayerInterface> tmpPlayer = (*i);
|
||||||
|
|
||||||
LOG_MSG("\t\t {ID, name, GUID; UID} => " <<
|
LOG_MSG("\t\t {ID, name, UID} -> {" <<
|
||||||
tmpPlayer->getMyID() << ", " <<
|
tmpPlayer->getMyID() << ", " <<
|
||||||
tmpPlayer->getMyName() << ", " <<
|
tmpPlayer->getMyName() << ", " <<
|
||||||
tmpPlayer->getMyUniqueID() << ", " <<
|
tmpPlayer->getMyUniqueID() << "}"
|
||||||
tmpPlayer->getMyGuid());
|
);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1370,11 +1428,11 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
|
|||||||
while (player_i != player_end) {
|
while (player_i != player_end) {
|
||||||
boost::shared_ptr<PlayerData> tmpPlayer = (*player_i);
|
boost::shared_ptr<PlayerData> tmpPlayer = (*player_i);
|
||||||
|
|
||||||
LOG_MSG("PlayerData: {playerId, name, GUID, number} -> {" <<
|
LOG_MSG("\t\tPlayerData: {playerId, name, number} -> {" <<
|
||||||
tmpPlayer->GetUniqueId() << "," <<
|
tmpPlayer->GetUniqueId() << "," <<
|
||||||
tmpPlayer->GetName() << "," <<
|
tmpPlayer->GetName() << "," <<
|
||||||
tmpPlayer->GetGuid() << "," <<
|
//tmpPlayer->GetGuid() << "," <<
|
||||||
tmpPlayer->GetNumber()
|
tmpPlayer->GetNumber() << "}"
|
||||||
);
|
);
|
||||||
|
|
||||||
++player_i;
|
++player_i;
|
||||||
@@ -1550,6 +1608,21 @@ ServerGameStateHand::InitRejoiningPlayers(boost::shared_ptr<ServerGame> server)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ServerGameStateHand::InitReetryPlayers(boost::shared_ptr<ServerGame> server)
|
||||||
|
{
|
||||||
|
PlayerIdList reentryIdList(server->GetAndResetReentryPlayers());
|
||||||
|
PlayerIdList::iterator i = reentryIdList.begin();
|
||||||
|
PlayerIdList::iterator end = reentryIdList.end();
|
||||||
|
while (i != end) {
|
||||||
|
boost::shared_ptr<SessionData> session(server->GetSessionManager().GetSessionByUniquePlayerId(*i));
|
||||||
|
if (session && session->GetPlayerData()) {
|
||||||
|
PerformReentry(server, session);
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateHand::InitNewSpectators(boost::shared_ptr<ServerGame> server)
|
ServerGameStateHand::InitNewSpectators(boost::shared_ptr<ServerGame> server)
|
||||||
{
|
{
|
||||||
@@ -1596,6 +1669,30 @@ ServerGameStateHand::PerformRejoin(boost::shared_ptr<ServerGame> server, boost::
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ServerGameStateHand::PerformReentry(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
||||||
|
{
|
||||||
|
Game &curGame = server->GetGame();
|
||||||
|
|
||||||
|
// TODO (albmed):
|
||||||
|
// Create player interface
|
||||||
|
if (session) {
|
||||||
|
// check if player already played this game
|
||||||
|
boost::shared_ptr<PlayerInterface> tmpPlayer = curGame.getPlayerByName(session->GetPlayerData()->GetName());
|
||||||
|
if (!tmpPlayer) {
|
||||||
|
tmpPlayer = curGame.addNewPlayer(session->GetPlayerData()); // TODO (albmed): Create addNewPlayer method
|
||||||
|
}
|
||||||
|
|
||||||
|
int seat = getRandomFreeSeat(curGame.getActivePlayerList());
|
||||||
|
if (seat >= 0) { // ok
|
||||||
|
// seat found....
|
||||||
|
}
|
||||||
|
else throw ServerException(__FILE__, __LINE__, ERR_NET_INTERNAL_GAME_ERROR, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateHand::SendGameData(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
ServerGameStateHand::SendGameData(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -111,6 +111,10 @@ public:
|
|||||||
void AddRejoinPlayer(unsigned playerId);
|
void AddRejoinPlayer(unsigned playerId);
|
||||||
PlayerIdList GetAndResetRejoinPlayers();
|
PlayerIdList GetAndResetRejoinPlayers();
|
||||||
|
|
||||||
|
void AddReentryPlayer(unsigned playerId);
|
||||||
|
PlayerIdList GetAndResetReentryPlayers();
|
||||||
|
int GetNumberPlayersReentry();
|
||||||
|
|
||||||
void AddReactivatePlayer(unsigned playerId);
|
void AddReactivatePlayer(unsigned playerId);
|
||||||
PlayerIdList GetAndResetReactivatePlayers();
|
PlayerIdList GetAndResetReactivatePlayers();
|
||||||
|
|
||||||
@@ -221,6 +225,9 @@ private:
|
|||||||
PlayerIdList m_rejoinPlayerList;
|
PlayerIdList m_rejoinPlayerList;
|
||||||
mutable boost::mutex m_rejoinPlayerListMutex;
|
mutable boost::mutex m_rejoinPlayerListMutex;
|
||||||
|
|
||||||
|
PlayerIdList m_reentryPlayerList;
|
||||||
|
mutable boost::mutex m_reentryPlayerListMutex;
|
||||||
|
|
||||||
PlayerIdList m_reactivatePlayerList;
|
PlayerIdList m_reactivatePlayerList;
|
||||||
mutable boost::mutex m_reactivatePlayerListMutex;
|
mutable boost::mutex m_reactivatePlayerListMutex;
|
||||||
|
|
||||||
|
|||||||
@@ -192,8 +192,10 @@ 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 InitReetryPlayers(boost::shared_ptr<ServerGame> server);
|
||||||
static void InitNewSpectators(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 PerformReentry(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session);
|
||||||
static void SendGameData(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:
|
||||||
|
|||||||
Reference in New Issue
Block a user