Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
843cd971
Commit
843cd971
authored
Feb 03, 2015
by
Jeffrey Oliver
Browse files
Reduce the whitespace in the server game constructor.
parent
bd39d603
Changes
1
Hide whitespace changes
Inline
Side-by-side
common/server_game.cpp
View file @
843cd971
...
@@ -56,7 +56,6 @@ Server_Game::Server_Game(const ServerInfo_User &_creatorInfo, int _gameId, const
...
@@ -56,7 +56,6 @@ Server_Game::Server_Game(const ServerInfo_User &_creatorInfo, int _gameId, const
gameStarted
(
false
),
gameStarted
(
false
),
gameClosed
(
false
),
gameClosed
(
false
),
gameId
(
_gameId
),
gameId
(
_gameId
),
description
(
_description
),
password
(
_password
),
password
(
_password
),
maxPlayers
(
_maxPlayers
),
maxPlayers
(
_maxPlayers
),
gameTypes
(
_gameTypes
),
gameTypes
(
_gameTypes
),
...
@@ -77,9 +76,10 @@ Server_Game::Server_Game(const ServerInfo_User &_creatorInfo, int _gameId, const
...
@@ -77,9 +76,10 @@ Server_Game::Server_Game(const ServerInfo_User &_creatorInfo, int _gameId, const
{
{
currentReplay
=
new
GameReplay
;
currentReplay
=
new
GameReplay
;
currentReplay
->
set_replay_id
(
room
->
getServer
()
->
getDatabaseInterface
()
->
getNextReplayId
());
currentReplay
->
set_replay_id
(
room
->
getServer
()
->
getDatabaseInterface
()
->
getNextReplayId
());
description
=
_description
.
simplified
();
connect
(
this
,
SIGNAL
(
sigStartGameIfReady
()),
this
,
SLOT
(
doStartGameIfReady
()),
Qt
::
QueuedConnection
);
connect
(
this
,
SIGNAL
(
sigStartGameIfReady
()),
this
,
SLOT
(
doStartGameIfReady
()),
Qt
::
QueuedConnection
);
getInfo
(
*
currentReplay
->
mutable_game_info
());
getInfo
(
*
currentReplay
->
mutable_game_info
());
if
(
room
->
getServer
()
->
getGameShouldPing
())
{
if
(
room
->
getServer
()
->
getGameShouldPing
())
{
...
@@ -93,36 +93,36 @@ Server_Game::~Server_Game()
...
@@ -93,36 +93,36 @@ Server_Game::~Server_Game()
{
{
room
->
gamesLock
.
lockForWrite
();
room
->
gamesLock
.
lockForWrite
();
gameMutex
.
lock
();
gameMutex
.
lock
();
gameClosed
=
true
;
gameClosed
=
true
;
sendGameEventContainer
(
prepareGameEvent
(
Event_GameClosed
(),
-
1
));
sendGameEventContainer
(
prepareGameEvent
(
Event_GameClosed
(),
-
1
));
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
while
(
playerIterator
.
hasNext
())
while
(
playerIterator
.
hasNext
())
playerIterator
.
next
().
value
()
->
prepareDestroy
();
playerIterator
.
next
().
value
()
->
prepareDestroy
();
players
.
clear
();
players
.
clear
();
room
->
removeGame
(
this
);
room
->
removeGame
(
this
);
delete
creatorInfo
;
delete
creatorInfo
;
creatorInfo
=
0
;
creatorInfo
=
0
;
gameMutex
.
unlock
();
gameMutex
.
unlock
();
room
->
gamesLock
.
unlock
();
room
->
gamesLock
.
unlock
();
currentReplay
->
set_duration_seconds
(
secondsElapsed
-
startTimeOfThisGame
);
currentReplay
->
set_duration_seconds
(
secondsElapsed
-
startTimeOfThisGame
);
replayList
.
append
(
currentReplay
);
replayList
.
append
(
currentReplay
);
storeGameInformation
();
storeGameInformation
();
for
(
int
i
=
0
;
i
<
replayList
.
size
();
++
i
)
for
(
int
i
=
0
;
i
<
replayList
.
size
();
++
i
)
delete
replayList
[
i
];
delete
replayList
[
i
];
qDebug
()
<<
"Server_Game destructor: gameId="
<<
gameId
;
qDebug
()
<<
"Server_Game destructor: gameId="
<<
gameId
;
}
}
void
Server_Game
::
storeGameInformation
()
void
Server_Game
::
storeGameInformation
()
{
{
const
ServerInfo_Game
&
gameInfo
=
replayList
.
first
()
->
game_info
();
const
ServerInfo_Game
&
gameInfo
=
replayList
.
first
()
->
game_info
();
Event_ReplayAdded
replayEvent
;
Event_ReplayAdded
replayEvent
;
ServerInfo_ReplayMatch
*
replayMatchInfo
=
replayEvent
.
mutable_match_info
();
ServerInfo_ReplayMatch
*
replayMatchInfo
=
replayEvent
.
mutable_match_info
();
replayMatchInfo
->
set_game_id
(
gameInfo
.
game_id
());
replayMatchInfo
->
set_game_id
(
gameInfo
.
game_id
());
...
@@ -130,26 +130,26 @@ void Server_Game::storeGameInformation()
...
@@ -130,26 +130,26 @@ void Server_Game::storeGameInformation()
replayMatchInfo
->
set_time_started
(
QDateTime
::
currentDateTime
().
addSecs
(
-
secondsElapsed
).
toTime_t
());
replayMatchInfo
->
set_time_started
(
QDateTime
::
currentDateTime
().
addSecs
(
-
secondsElapsed
).
toTime_t
());
replayMatchInfo
->
set_length
(
secondsElapsed
);
replayMatchInfo
->
set_length
(
secondsElapsed
);
replayMatchInfo
->
set_game_name
(
gameInfo
.
description
());
replayMatchInfo
->
set_game_name
(
gameInfo
.
description
());
const
QStringList
&
allGameTypes
=
room
->
getGameTypes
();
const
QStringList
&
allGameTypes
=
room
->
getGameTypes
();
QStringList
gameTypes
;
QStringList
gameTypes
;
for
(
int
i
=
gameInfo
.
game_types_size
()
-
1
;
i
>=
0
;
--
i
)
for
(
int
i
=
gameInfo
.
game_types_size
()
-
1
;
i
>=
0
;
--
i
)
gameTypes
.
append
(
allGameTypes
[
gameInfo
.
game_types
(
i
)]);
gameTypes
.
append
(
allGameTypes
[
gameInfo
.
game_types
(
i
)]);
QSetIterator
<
QString
>
playerIterator
(
allPlayersEver
);
QSetIterator
<
QString
>
playerIterator
(
allPlayersEver
);
while
(
playerIterator
.
hasNext
())
while
(
playerIterator
.
hasNext
())
replayMatchInfo
->
add_player_names
(
playerIterator
.
next
().
toStdString
());
replayMatchInfo
->
add_player_names
(
playerIterator
.
next
().
toStdString
());
for
(
int
i
=
0
;
i
<
replayList
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
replayList
.
size
();
++
i
)
{
ServerInfo_Replay
*
replayInfo
=
replayMatchInfo
->
add_replay_list
();
ServerInfo_Replay
*
replayInfo
=
replayMatchInfo
->
add_replay_list
();
replayInfo
->
set_replay_id
(
replayList
[
i
]
->
replay_id
());
replayInfo
->
set_replay_id
(
replayList
[
i
]
->
replay_id
());
replayInfo
->
set_replay_name
(
gameInfo
.
description
());
replayInfo
->
set_replay_name
(
gameInfo
.
description
());
replayInfo
->
set_duration
(
replayList
[
i
]
->
duration_seconds
());
replayInfo
->
set_duration
(
replayList
[
i
]
->
duration_seconds
());
}
}
QSet
<
QString
>
allUsersInGame
=
allPlayersEver
+
allSpectatorsEver
;
QSet
<
QString
>
allUsersInGame
=
allPlayersEver
+
allSpectatorsEver
;
QSetIterator
<
QString
>
allUsersIterator
(
allUsersInGame
);
QSetIterator
<
QString
>
allUsersIterator
(
allUsersInGame
);
SessionEvent
*
sessionEvent
=
Server_ProtocolHandler
::
prepareSessionEvent
(
replayEvent
);
SessionEvent
*
sessionEvent
=
Server_ProtocolHandler
::
prepareSessionEvent
(
replayEvent
);
Server
*
server
=
room
->
getServer
();
Server
*
server
=
room
->
getServer
();
server
->
clientsLock
.
lockForRead
();
server
->
clientsLock
.
lockForRead
();
...
@@ -160,7 +160,7 @@ void Server_Game::storeGameInformation()
...
@@ -160,7 +160,7 @@ void Server_Game::storeGameInformation()
}
}
server
->
clientsLock
.
unlock
();
server
->
clientsLock
.
unlock
();
delete
sessionEvent
;
delete
sessionEvent
;
server
->
getDatabaseInterface
()
->
storeGameInformation
(
room
->
getName
(),
gameTypes
,
gameInfo
,
allPlayersEver
,
allSpectatorsEver
,
replayList
);
server
->
getDatabaseInterface
()
->
storeGameInformation
(
room
->
getName
(),
gameTypes
,
gameInfo
,
allPlayersEver
,
allSpectatorsEver
,
replayList
);
}
}
...
@@ -168,10 +168,10 @@ void Server_Game::pingClockTimeout()
...
@@ -168,10 +168,10 @@ void Server_Game::pingClockTimeout()
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
++
secondsElapsed
;
++
secondsElapsed
;
GameEventStorage
ges
;
GameEventStorage
ges
;
ges
.
setGameEventContext
(
Context_PingChanged
());
ges
.
setGameEventContext
(
Context_PingChanged
());
QList
<
ServerInfo_PlayerPing
*>
pingList
;
QList
<
ServerInfo_PlayerPing
*>
pingList
;
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
bool
allPlayersInactive
=
true
;
bool
allPlayersInactive
=
true
;
...
@@ -180,7 +180,7 @@ void Server_Game::pingClockTimeout()
...
@@ -180,7 +180,7 @@ void Server_Game::pingClockTimeout()
Server_Player
*
player
=
playerIterator
.
next
().
value
();
Server_Player
*
player
=
playerIterator
.
next
().
value
();
if
(
!
player
->
getSpectator
())
if
(
!
player
->
getSpectator
())
++
playerCount
;
++
playerCount
;
const
int
oldPingTime
=
player
->
getPingTime
();
const
int
oldPingTime
=
player
->
getPingTime
();
player
->
playerMutex
.
lock
();
player
->
playerMutex
.
lock
();
int
newPingTime
;
int
newPingTime
;
...
@@ -189,20 +189,20 @@ void Server_Game::pingClockTimeout()
...
@@ -189,20 +189,20 @@ void Server_Game::pingClockTimeout()
else
else
newPingTime
=
-
1
;
newPingTime
=
-
1
;
player
->
playerMutex
.
unlock
();
player
->
playerMutex
.
unlock
();
if
((
newPingTime
!=
-
1
)
&&
!
player
->
getSpectator
())
if
((
newPingTime
!=
-
1
)
&&
!
player
->
getSpectator
())
allPlayersInactive
=
false
;
allPlayersInactive
=
false
;
if
((
abs
(
oldPingTime
-
newPingTime
)
>
1
)
||
((
newPingTime
==
-
1
)
&&
(
oldPingTime
!=
-
1
))
||
((
newPingTime
!=
-
1
)
&&
(
oldPingTime
==
-
1
)))
{
if
((
abs
(
oldPingTime
-
newPingTime
)
>
1
)
||
((
newPingTime
==
-
1
)
&&
(
oldPingTime
!=
-
1
))
||
((
newPingTime
!=
-
1
)
&&
(
oldPingTime
==
-
1
)))
{
player
->
setPingTime
(
newPingTime
);
player
->
setPingTime
(
newPingTime
);
Event_PlayerPropertiesChanged
event
;
Event_PlayerPropertiesChanged
event
;
event
.
mutable_player_properties
()
->
set_ping_seconds
(
newPingTime
);
event
.
mutable_player_properties
()
->
set_ping_seconds
(
newPingTime
);
ges
.
enqueueGameEvent
(
event
,
player
->
getPlayerId
());
ges
.
enqueueGameEvent
(
event
,
player
->
getPlayerId
());
}
}
}
}
ges
.
sendToGame
(
this
);
ges
.
sendToGame
(
this
);
const
int
maxTime
=
room
->
getServer
()
->
getMaxGameInactivityTime
();
const
int
maxTime
=
room
->
getServer
()
->
getMaxGameInactivityTime
();
if
(
allPlayersInactive
)
{
if
(
allPlayersInactive
)
{
if
(((
++
inactivityCounter
>=
maxTime
)
&&
(
maxTime
>
0
))
||
(
playerCount
<
maxPlayers
))
if
(((
++
inactivityCounter
>=
maxTime
)
&&
(
maxTime
>
0
))
||
(
playerCount
<
maxPlayers
))
...
@@ -214,7 +214,7 @@ void Server_Game::pingClockTimeout()
...
@@ -214,7 +214,7 @@ void Server_Game::pingClockTimeout()
int
Server_Game
::
getPlayerCount
()
const
int
Server_Game
::
getPlayerCount
()
const
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
int
result
=
0
;
int
result
=
0
;
while
(
playerIterator
.
hasNext
())
while
(
playerIterator
.
hasNext
())
...
@@ -226,7 +226,7 @@ int Server_Game::getPlayerCount() const
...
@@ -226,7 +226,7 @@ int Server_Game::getPlayerCount() const
int
Server_Game
::
getSpectatorCount
()
const
int
Server_Game
::
getSpectatorCount
()
const
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
int
result
=
0
;
int
result
=
0
;
while
(
playerIterator
.
hasNext
())
while
(
playerIterator
.
hasNext
())
...
@@ -244,7 +244,7 @@ void Server_Game::createGameStateChangedEvent(Event_GameStateChanged *event, Ser
...
@@ -244,7 +244,7 @@ void Server_Game::createGameStateChangedEvent(Event_GameStateChanged *event, Ser
event
->
set_active_phase
(
0
);
event
->
set_active_phase
(
0
);
}
else
}
else
event
->
set_game_started
(
false
);
event
->
set_game_started
(
false
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
while
(
playerIterator
.
hasNext
())
while
(
playerIterator
.
hasNext
())
playerIterator
.
next
().
value
()
->
getInfo
(
event
->
add_player_list
(),
playerWhosAsking
,
omniscient
,
withUserInfo
);
playerIterator
.
next
().
value
()
->
getInfo
(
event
->
add_player_list
(),
playerWhosAsking
,
omniscient
,
withUserInfo
);
...
@@ -255,13 +255,13 @@ void Server_Game::sendGameStateToPlayers()
...
@@ -255,13 +255,13 @@ void Server_Game::sendGameStateToPlayers()
// game state information for replay and omniscient spectators
// game state information for replay and omniscient spectators
Event_GameStateChanged
omniscientEvent
;
Event_GameStateChanged
omniscientEvent
;
createGameStateChangedEvent
(
&
omniscientEvent
,
0
,
true
,
false
);
createGameStateChangedEvent
(
&
omniscientEvent
,
0
,
true
,
false
);
GameEventContainer
*
replayCont
=
prepareGameEvent
(
omniscientEvent
,
-
1
);
GameEventContainer
*
replayCont
=
prepareGameEvent
(
omniscientEvent
,
-
1
);
replayCont
->
set_seconds_elapsed
(
secondsElapsed
-
startTimeOfThisGame
);
replayCont
->
set_seconds_elapsed
(
secondsElapsed
-
startTimeOfThisGame
);
replayCont
->
clear_game_id
();
replayCont
->
clear_game_id
();
currentReplay
->
add_event_list
()
->
CopyFrom
(
*
replayCont
);
currentReplay
->
add_event_list
()
->
CopyFrom
(
*
replayCont
);
delete
replayCont
;
delete
replayCont
;
// If spectators are not omniscient, we need an additional createGameStateChangedEvent call, otherwise we can use the data we used for the replay.
// If spectators are not omniscient, we need an additional createGameStateChangedEvent call, otherwise we can use the data we used for the replay.
// All spectators are equal, so we don't need to make a createGameStateChangedEvent call for each one.
// All spectators are equal, so we don't need to make a createGameStateChangedEvent call for each one.
Event_GameStateChanged
spectatorEvent
;
Event_GameStateChanged
spectatorEvent
;
...
@@ -269,7 +269,7 @@ void Server_Game::sendGameStateToPlayers()
...
@@ -269,7 +269,7 @@ void Server_Game::sendGameStateToPlayers()
spectatorEvent
=
omniscientEvent
;
spectatorEvent
=
omniscientEvent
;
else
else
createGameStateChangedEvent
(
&
spectatorEvent
,
0
,
false
,
false
);
createGameStateChangedEvent
(
&
spectatorEvent
,
0
,
false
,
false
);
// send game state info to clients according to their role in the game
// send game state info to clients according to their role in the game
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
while
(
playerIterator
.
hasNext
())
{
while
(
playerIterator
.
hasNext
())
{
...
@@ -280,7 +280,7 @@ void Server_Game::sendGameStateToPlayers()
...
@@ -280,7 +280,7 @@ void Server_Game::sendGameStateToPlayers()
else
{
else
{
Event_GameStateChanged
event
;
Event_GameStateChanged
event
;
createGameStateChangedEvent
(
&
event
,
player
,
false
,
false
);
createGameStateChangedEvent
(
&
event
,
player
,
false
,
false
);
gec
=
prepareGameEvent
(
event
,
-
1
);
gec
=
prepareGameEvent
(
event
,
-
1
);
}
}
player
->
sendGameEvent
(
*
gec
);
player
->
sendGameEvent
(
*
gec
);
...
@@ -292,7 +292,7 @@ void Server_Game::doStartGameIfReady()
...
@@ -292,7 +292,7 @@ void Server_Game::doStartGameIfReady()
{
{
Server_DatabaseInterface
*
databaseInterface
=
room
->
getServer
()
->
getDatabaseInterface
();
Server_DatabaseInterface
*
databaseInterface
=
room
->
getServer
()
->
getDatabaseInterface
();
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
if
(
getPlayerCount
()
<
maxPlayers
)
if
(
getPlayerCount
()
<
maxPlayers
)
return
;
return
;
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
...
@@ -315,7 +315,7 @@ void Server_Game::doStartGameIfReady()
...
@@ -315,7 +315,7 @@ void Server_Game::doStartGameIfReady()
player
->
setConceded
(
false
);
player
->
setConceded
(
false
);
player
->
setReadyStart
(
false
);
player
->
setReadyStart
(
false
);
}
}
if
(
firstGameStarted
)
{
if
(
firstGameStarted
)
{
currentReplay
->
set_duration_seconds
(
secondsElapsed
-
startTimeOfThisGame
);
currentReplay
->
set_duration_seconds
(
secondsElapsed
-
startTimeOfThisGame
);
replayList
.
append
(
currentReplay
);
replayList
.
append
(
currentReplay
);
...
@@ -324,27 +324,27 @@ void Server_Game::doStartGameIfReady()
...
@@ -324,27 +324,27 @@ void Server_Game::doStartGameIfReady()
ServerInfo_Game
*
gameInfo
=
currentReplay
->
mutable_game_info
();
ServerInfo_Game
*
gameInfo
=
currentReplay
->
mutable_game_info
();
getInfo
(
*
gameInfo
);
getInfo
(
*
gameInfo
);
gameInfo
->
set_started
(
false
);
gameInfo
->
set_started
(
false
);
Event_GameStateChanged
omniscientEvent
;
Event_GameStateChanged
omniscientEvent
;
createGameStateChangedEvent
(
&
omniscientEvent
,
0
,
true
,
true
);
createGameStateChangedEvent
(
&
omniscientEvent
,
0
,
true
,
true
);
GameEventContainer
*
replayCont
=
prepareGameEvent
(
omniscientEvent
,
-
1
);
GameEventContainer
*
replayCont
=
prepareGameEvent
(
omniscientEvent
,
-
1
);
replayCont
->
set_seconds_elapsed
(
0
);
replayCont
->
set_seconds_elapsed
(
0
);
replayCont
->
clear_game_id
();
replayCont
->
clear_game_id
();
currentReplay
->
add_event_list
()
->
CopyFrom
(
*
replayCont
);
currentReplay
->
add_event_list
()
->
CopyFrom
(
*
replayCont
);
delete
replayCont
;
delete
replayCont
;
startTimeOfThisGame
=
secondsElapsed
;
startTimeOfThisGame
=
secondsElapsed
;
}
else
}
else
firstGameStarted
=
true
;
firstGameStarted
=
true
;
sendGameStateToPlayers
();
sendGameStateToPlayers
();
activePlayer
=
-
1
;
activePlayer
=
-
1
;
nextTurn
();
nextTurn
();
locker
.
unlock
();
locker
.
unlock
();
ServerInfo_Game
gameInfo
;
ServerInfo_Game
gameInfo
;
gameInfo
.
set_room_id
(
room
->
getId
());
gameInfo
.
set_room_id
(
room
->
getId
());
gameInfo
.
set_game_id
(
gameId
);
gameInfo
.
set_game_id
(
gameId
);
...
@@ -360,7 +360,7 @@ void Server_Game::startGameIfReady()
...
@@ -360,7 +360,7 @@ void Server_Game::startGameIfReady()
void
Server_Game
::
stopGameIfFinished
()
void
Server_Game
::
stopGameIfFinished
()
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
int
playing
=
0
;
int
playing
=
0
;
while
(
playerIterator
.
hasNext
())
{
while
(
playerIterator
.
hasNext
())
{
...
@@ -381,9 +381,9 @@ void Server_Game::stopGameIfFinished()
...
@@ -381,9 +381,9 @@ void Server_Game::stopGameIfFinished()
}
}
sendGameStateToPlayers
();
sendGameStateToPlayers
();
locker
.
unlock
();
locker
.
unlock
();
ServerInfo_Game
gameInfo
;
ServerInfo_Game
gameInfo
;
gameInfo
.
set_room_id
(
room
->
getId
());
gameInfo
.
set_room_id
(
room
->
getId
());
gameInfo
.
set_game_id
(
gameId
);
gameInfo
.
set_game_id
(
gameId
);
...
@@ -417,14 +417,14 @@ Response::ResponseCode Server_Game::checkJoin(ServerInfo_User *user, const QStri
...
@@ -417,14 +417,14 @@ Response::ResponseCode Server_Game::checkJoin(ServerInfo_User *user, const QStri
}
}
if
(
!
spectator
&&
(
gameStarted
||
(
getPlayerCount
()
>=
getMaxPlayers
())))
if
(
!
spectator
&&
(
gameStarted
||
(
getPlayerCount
()
>=
getMaxPlayers
())))
return
Response
::
RespGameFull
;
return
Response
::
RespGameFull
;
return
Response
::
RespOk
;
return
Response
::
RespOk
;
}
}
bool
Server_Game
::
containsUser
(
const
QString
&
userName
)
const
bool
Server_Game
::
containsUser
(
const
QString
&
userName
)
const
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
while
(
playerIterator
.
hasNext
())
while
(
playerIterator
.
hasNext
())
if
(
playerIterator
.
next
().
value
()
->
getUserInfo
()
->
name
()
==
userName
.
toStdString
())
if
(
playerIterator
.
next
().
value
()
->
getUserInfo
()
->
name
()
==
userName
.
toStdString
())
...
@@ -435,14 +435,14 @@ bool Server_Game::containsUser(const QString &userName) const
...
@@ -435,14 +435,14 @@ bool Server_Game::containsUser(const QString &userName) const
void
Server_Game
::
addPlayer
(
Server_AbstractUserInterface
*
userInterface
,
ResponseContainer
&
rc
,
bool
spectator
,
bool
broadcastUpdate
)
void
Server_Game
::
addPlayer
(
Server_AbstractUserInterface
*
userInterface
,
ResponseContainer
&
rc
,
bool
spectator
,
bool
broadcastUpdate
)
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
Server_Player
*
newPlayer
=
new
Server_Player
(
this
,
nextPlayerId
++
,
userInterface
->
copyUserInfo
(
true
,
true
,
true
),
spectator
,
userInterface
);
Server_Player
*
newPlayer
=
new
Server_Player
(
this
,
nextPlayerId
++
,
userInterface
->
copyUserInfo
(
true
,
true
,
true
),
spectator
,
userInterface
);
newPlayer
->
moveToThread
(
thread
());
newPlayer
->
moveToThread
(
thread
());
Event_Join
joinEvent
;
Event_Join
joinEvent
;
newPlayer
->
getProperties
(
*
joinEvent
.
mutable_player_properties
(),
true
);
newPlayer
->
getProperties
(
*
joinEvent
.
mutable_player_properties
(),
true
);
sendGameEventContainer
(
prepareGameEvent
(
joinEvent
,
-
1
));
sendGameEventContainer
(
prepareGameEvent
(
joinEvent
,
-
1
));
const
QString
playerName
=
QString
::
fromStdString
(
newPlayer
->
getUserInfo
()
->
name
());
const
QString
playerName
=
QString
::
fromStdString
(
newPlayer
->
getUserInfo
()
->
name
());
if
(
spectator
)
if
(
spectator
)
allSpectatorsEver
.
insert
(
playerName
);
allSpectatorsEver
.
insert
(
playerName
);
...
@@ -453,7 +453,7 @@ void Server_Game::addPlayer(Server_AbstractUserInterface *userInterface, Respons
...
@@ -453,7 +453,7 @@ void Server_Game::addPlayer(Server_AbstractUserInterface *userInterface, Respons
hostId
=
newPlayer
->
getPlayerId
();
hostId
=
newPlayer
->
getPlayerId
();
sendGameEventContainer
(
prepareGameEvent
(
Event_GameHostChanged
(),
hostId
));
sendGameEventContainer
(
prepareGameEvent
(
Event_GameHostChanged
(),
hostId
));
}
}
if
(
broadcastUpdate
)
{
if
(
broadcastUpdate
)
{
ServerInfo_Game
gameInfo
;
ServerInfo_Game
gameInfo
;
gameInfo
.
set_room_id
(
room
->
getId
());
gameInfo
.
set_room_id
(
room
->
getId
());
...
@@ -462,12 +462,12 @@ void Server_Game::addPlayer(Server_AbstractUserInterface *userInterface, Respons
...
@@ -462,12 +462,12 @@ void Server_Game::addPlayer(Server_AbstractUserInterface *userInterface, Respons
gameInfo
.
set_spectators_count
(
getSpectatorCount
());
gameInfo
.
set_spectators_count
(
getSpectatorCount
());
emit
gameInfoChanged
(
gameInfo
);
emit
gameInfoChanged
(
gameInfo
);
}
}
if
((
newPlayer
->
getUserInfo
()
->
user_level
()
&
ServerInfo_User
::
IsRegistered
)
&&
!
spectator
)
if
((
newPlayer
->
getUserInfo
()
->
user_level
()
&
ServerInfo_User
::
IsRegistered
)
&&
!
spectator
)
room
->
getServer
()
->
addPersistentPlayer
(
playerName
,
room
->
getId
(),
gameId
,
newPlayer
->
getPlayerId
());
room
->
getServer
()
->
addPersistentPlayer
(
playerName
,
room
->
getId
(),
gameId
,
newPlayer
->
getPlayerId
());
userInterface
->
playerAddedToGame
(
gameId
,
room
->
getId
(),
newPlayer
->
getPlayerId
());
userInterface
->
playerAddedToGame
(
gameId
,
room
->
getId
(),
newPlayer
->
getPlayerId
());
createGameJoinedEvent
(
newPlayer
,
rc
,
false
);
createGameJoinedEvent
(
newPlayer
,
rc
,
false
);
}
}
...
@@ -475,18 +475,18 @@ void Server_Game::removePlayer(Server_Player *player)
...
@@ -475,18 +475,18 @@ void Server_Game::removePlayer(Server_Player *player)
{
{
room
->
getServer
()
->
removePersistentPlayer
(
QString
::
fromStdString
(
player
->
getUserInfo
()
->
name
()),
room
->
getId
(),
gameId
,
player
->
getPlayerId
());
room
->
getServer
()
->
removePersistentPlayer
(
QString
::
fromStdString
(
player
->
getUserInfo
()
->
name
()),
room
->
getId
(),
gameId
,
player
->
getPlayerId
());
players
.
remove
(
player
->
getPlayerId
());
players
.
remove
(
player
->
getPlayerId
());
GameEventStorage
ges
;
GameEventStorage
ges
;
removeArrowsRelatedToPlayer
(
ges
,
player
);
removeArrowsRelatedToPlayer
(
ges
,
player
);
unattachCards
(
ges
,
player
);
unattachCards
(
ges
,
player
);
ges
.
enqueueGameEvent
(
Event_Leave
(),
player
->
getPlayerId
());
ges
.
enqueueGameEvent
(
Event_Leave
(),
player
->
getPlayerId
());
ges
.
sendToGame
(
this
);
ges
.
sendToGame
(
this
);
bool
playerActive
=
activePlayer
==
player
->
getPlayerId
();
bool
playerActive
=
activePlayer
==
player
->
getPlayerId
();
bool
playerHost
=
hostId
==
player
->
getPlayerId
();
bool
playerHost
=
hostId
==
player
->
getPlayerId
();
bool
spectator
=
player
->
getSpectator
();
bool
spectator
=
player
->
getSpectator
();
player
->
prepareDestroy
();
player
->
prepareDestroy
();
if
(
!
getPlayerCount
())
{
if
(
!
getPlayerCount
())
{
gameClosed
=
true
;
gameClosed
=
true
;
deleteLater
();
deleteLater
();
...
@@ -511,7 +511,7 @@ void Server_Game::removePlayer(Server_Player *player)
...
@@ -511,7 +511,7 @@ void Server_Game::removePlayer(Server_Player *player)
if
(
gameStarted
&&
playerActive
)
if
(
gameStarted
&&
playerActive
)
nextTurn
();
nextTurn
();
}
}
ServerInfo_Game
gameInfo
;
ServerInfo_Game
gameInfo
;
gameInfo
.
set_room_id
(
room
->
getId
());
gameInfo
.
set_room_id
(
room
->
getId
());
gameInfo
.
set_game_id
(
gameId
);
gameInfo
.
set_game_id
(
gameId
);
...
@@ -523,7 +523,7 @@ void Server_Game::removePlayer(Server_Player *player)
...
@@ -523,7 +523,7 @@ void Server_Game::removePlayer(Server_Player *player)
void
Server_Game
::
removeArrowsRelatedToPlayer
(
GameEventStorage
&
ges
,
Server_Player
*
player
)
void
Server_Game
::
removeArrowsRelatedToPlayer
(
GameEventStorage
&
ges
,
Server_Player
*
player
)
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
// Remove all arrows of other players pointing to the player being removed or to one of his cards.
// Remove all arrows of other players pointing to the player being removed or to one of his cards.
// Also remove all arrows starting at one of his cards. This is necessary since players can create
// Also remove all arrows starting at one of his cards. This is necessary since players can create
// arrows that start at another person's cards.
// arrows that start at another person's cards.
...
@@ -540,7 +540,7 @@ void Server_Game::removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_Play
...
@@ -540,7 +540,7 @@ void Server_Game::removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_Play
toDelete
.
append
(
a
);
toDelete
.
append
(
a
);
}
else
if
(
static_cast
<
Server_Player
*>
(
a
->
getTargetItem
())
==
player
)
}
else
if
(
static_cast
<
Server_Player
*>
(
a
->
getTargetItem
())
==
player
)
toDelete
.
append
(
a
);
toDelete
.
append
(
a
);
// Don't use else here! It has to happen regardless of whether targetCard == 0.
// Don't use else here! It has to happen regardless of whether targetCard == 0.
if
(
a
->
getStartCard
()
->
getZone
()
->
getPlayer
()
==
player
)
if
(
a
->
getStartCard
()
->
getZone
()
->
getPlayer
()
==
player
)
toDelete
.
append
(
a
);
toDelete
.
append
(
a
);
...
@@ -549,7 +549,7 @@ void Server_Game::removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_Play
...
@@ -549,7 +549,7 @@ void Server_Game::removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_Play
Event_DeleteArrow
event
;
Event_DeleteArrow
event
;
event
.
set_arrow_id
(
toDelete
[
i
]
->
getId
());
event
.
set_arrow_id
(
toDelete
[
i
]
->
getId
());
ges
.
enqueueGameEvent
(
event
,
p
->
getPlayerId
());
ges
.
enqueueGameEvent
(
event
,
p
->
getPlayerId
());
p
->
deleteArrow
(
toDelete
[
i
]
->
getId
());
p
->
deleteArrow
(
toDelete
[
i
]
->
getId
());
}
}
}
}
...
@@ -558,13 +558,13 @@ void Server_Game::removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_Play
...
@@ -558,13 +558,13 @@ void Server_Game::removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_Play
void
Server_Game
::
unattachCards
(
GameEventStorage
&
ges
,
Server_Player
*
player
)
void
Server_Game
::
unattachCards
(
GameEventStorage
&
ges
,
Server_Player
*
player
)
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
QMapIterator
<
QString
,
Server_CardZone
*>
zoneIterator
(
player
->
getZones
());
QMapIterator
<
QString
,
Server_CardZone
*>
zoneIterator
(
player
->
getZones
());
while
(
zoneIterator
.
hasNext
())
{
while
(
zoneIterator
.
hasNext
())
{
Server_CardZone
*
zone
=
zoneIterator
.
next
().
value
();
Server_CardZone
*
zone
=
zoneIterator
.
next
().
value
();
for
(
int
i
=
0
;
i
<
zone
->
getCards
().
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
zone
->
getCards
().
size
();
++
i
)
{
Server_Card
*
card
=
zone
->
getCards
().
at
(
i
);
Server_Card
*
card
=
zone
->
getCards
().
at
(
i
);
// Make a copy of the list because the original one gets modified during the loop
// Make a copy of the list because the original one gets modified during the loop
QList
<
Server_Card
*>
attachedCards
=
card
->
getAttachedCards
();
QList
<
Server_Card
*>
attachedCards
=
card
->
getAttachedCards
();
for
(
int
i
=
0
;
i
<
attachedCards
.
size
();
++
i
)
for
(
int
i
=
0
;
i
<
attachedCards
.
size
();
++
i
)
...
@@ -576,54 +576,54 @@ void Server_Game::unattachCards(GameEventStorage &ges, Server_Player *player)
...
@@ -576,54 +576,54 @@ void Server_Game::unattachCards(GameEventStorage &ges, Server_Player *player)
bool
Server_Game
::
kickPlayer
(
int
playerId
)
bool
Server_Game
::
kickPlayer
(
int
playerId
)
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
Server_Player
*
playerToKick
=
players
.
value
(
playerId
);
Server_Player
*
playerToKick
=
players
.
value
(
playerId
);
if
(
!
playerToKick
)
if
(
!
playerToKick
)
return
false
;
return
false
;
GameEventContainer
*
gec
=
prepareGameEvent
(
Event_Kicked
(),
-
1
);
GameEventContainer
*
gec
=
prepareGameEvent
(
Event_Kicked
(),
-
1
);
playerToKick
->
sendGameEvent
(
*
gec
);
playerToKick
->
sendGameEvent
(
*
gec
);
delete
gec
;
delete
gec
;
removePlayer
(
playerToKick
);
removePlayer
(
playerToKick
);
return
true
;
return
true
;
}
}
void
Server_Game
::
setActivePlayer
(
int
_activePlayer
)
void
Server_Game
::
setActivePlayer
(
int
_activePlayer
)
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
activePlayer
=
_activePlayer
;
activePlayer
=
_activePlayer
;
Event_SetActivePlayer
event
;
Event_SetActivePlayer
event
;
event
.
set_active_player_id
(
activePlayer
);
event
.
set_active_player_id
(
activePlayer
);
sendGameEventContainer
(
prepareGameEvent
(
event
,
-
1
));
sendGameEventContainer
(
prepareGameEvent
(
event
,
-
1
));
setActivePhase
(
0
);
setActivePhase
(
0
);
}
}
void
Server_Game
::
setActivePhase
(
int
_activePhase
)
void
Server_Game
::
setActivePhase
(
int
_activePhase
)
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
while
(
playerIterator
.
hasNext
())
{
while
(
playerIterator
.
hasNext
())
{
Server_Player
*
player
=
playerIterator
.
next
().
value
();
Server_Player
*
player
=
playerIterator
.
next
().
value
();
QList
<
Server_Arrow
*>
toDelete
=
player
->
getArrows
().
values
();
QList
<
Server_Arrow
*>
toDelete
=
player
->
getArrows
().
values
();
for
(
int
i
=
0
;
i
<
toDelete
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
toDelete
.
size
();
++
i
)
{
Server_Arrow
*
a
=
toDelete
[
i
];
Server_Arrow
*
a
=
toDelete
[
i
];
Event_DeleteArrow
event
;
Event_DeleteArrow
event
;
event
.
set_arrow_id
(
a
->
getId
());
event
.
set_arrow_id
(
a
->
getId
());
sendGameEventContainer
(
prepareGameEvent
(
event
,
player
->
getPlayerId
()));
sendGameEventContainer
(
prepareGameEvent
(
event
,
player
->
getPlayerId
()));
player
->
deleteArrow
(
a
->
getId
());
player
->
deleteArrow
(
a
->
getId
());
}
}
}
}
activePhase
=
_activePhase
;
activePhase
=
_activePhase
;
Event_SetActivePhase
event
;
Event_SetActivePhase
event
;
event
.
set_phase
(
activePhase
);
event
.
set_phase
(
activePhase
);
sendGameEventContainer
(
prepareGameEvent
(
event
,
-
1
));
sendGameEventContainer
(
prepareGameEvent
(
event
,
-
1
));
...
@@ -632,7 +632,7 @@ void Server_Game::setActivePhase(int _activePhase)
...
@@ -632,7 +632,7 @@ void Server_Game::setActivePhase(int _activePhase)
void
Server_Game
::
nextTurn
()
void
Server_Game
::
nextTurn
()
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
const
QList
<
int
>
keys
=
players
.
keys
();
const
QList
<
int
>
keys
=
players
.
keys
();
int
listPos
=
-
1
;
int
listPos
=
-
1
;
if
(
activePlayer
!=
-
1
)
if
(
activePlayer
!=
-
1
)
...
@@ -642,7 +642,7 @@ void Server_Game::nextTurn()
...
@@ -642,7 +642,7 @@ void Server_Game::nextTurn()
if
(
listPos
==
keys
.
size
())
if
(
listPos
==
keys
.
size
())
listPos
=
0
;
listPos
=
0
;
}
while
(
players
.
value
(
keys
[
listPos
])
->
getSpectator
()
||
players
.
value
(
keys
[
listPos
])
->
getConceded
());
}
while
(
players
.
value
(
keys
[
listPos
])
->
getSpectator
()
||
players
.
value
(
keys
[
listPos
])
->
getConceded
());
setActivePlayer
(
keys
[
listPos
]);
setActivePlayer
(
keys
[
listPos
]);
}
}
...
@@ -663,13 +663,13 @@ void Server_Game::createGameJoinedEvent(Server_Player *player, ResponseContainer
...
@@ -663,13 +663,13 @@ void Server_Game::createGameJoinedEvent(Server_Player *player, ResponseContainer
}
}
}
}
rc
.
enqueuePostResponseItem
(
ServerMessage
::
SESSION_EVENT
,
Server_AbstractUserInterface
::
prepareSessionEvent
(
event1
));
rc
.
enqueuePostResponseItem
(
ServerMessage
::
SESSION_EVENT
,
Server_AbstractUserInterface
::
prepareSessionEvent
(
event1
));
Event_GameStateChanged
event2
;
Event_GameStateChanged
event2
;
event2
.
set_seconds_elapsed
(
secondsElapsed
);
event2
.
set_seconds_elapsed
(
secondsElapsed
);
event2
.
set_game_started
(
gameStarted
);
event2
.
set_game_started
(
gameStarted
);
event2
.
set_active_player_id
(
activePlayer
);
event2
.
set_active_player_id
(
activePlayer
);
event2
.
set_active_phase
(
activePhase
);
event2
.
set_active_phase
(
activePhase
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
while
(
playerIterator
.
hasNext
())
while
(
playerIterator
.
hasNext
())
playerIterator
.
next
().
value
()
->
getInfo
(
event2
.
add_player_list
(),
player
,
player
->
getSpectator
()
&&
spectatorsSeeEverything
,
true
);
playerIterator
.
next
().
value
()
->
getInfo
(
event2
.
add_player_list
(),
player
,
player
->
getSpectator
()
&&
spectatorsSeeEverything
,
true
);
...
@@ -680,7 +680,7 @@ void Server_Game::createGameJoinedEvent(Server_Player *player, ResponseContainer
...
@@ -680,7 +680,7 @@ void Server_Game::createGameJoinedEvent(Server_Player *player, ResponseContainer
void
Server_Game
::
sendGameEventContainer
(
GameEventContainer
*
cont
,
GameEventStorageItem
::
EventRecipients
recipients
,
int
privatePlayerId
)
void
Server_Game
::
sendGameEventContainer
(
GameEventContainer
*
cont
,
GameEventStorageItem
::
EventRecipients
recipients
,
int
privatePlayerId
)
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
cont
->
set_game_id
(
gameId
);
cont
->
set_game_id
(
gameId
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
while
(
playerIterator
.
hasNext
())
{
while
(
playerIterator
.
hasNext
())
{
...
@@ -694,7 +694,7 @@ void Server_Game::sendGameEventContainer(GameEventContainer *cont, GameEventStor
...
@@ -694,7 +694,7 @@ void Server_Game::sendGameEventContainer(GameEventContainer *cont, GameEventStor
cont
->
clear_game_id
();
cont
->
clear_game_id
();
currentReplay
->
add_event_list
()
->
CopyFrom
(
*
cont
);
currentReplay
->
add_event_list
()
->
CopyFrom
(
*
cont
);
}
}
delete
cont
;
delete
cont
;
}
}
...
@@ -714,7 +714,7 @@ GameEventContainer *Server_Game::prepareGameEvent(const ::google::protobuf::Mess
...
@@ -714,7 +714,7 @@ GameEventContainer *Server_Game::prepareGameEvent(const ::google::protobuf::Mess
void
Server_Game
::
getInfo
(
ServerInfo_Game
&
result
)
const
void
Server_Game
::
getInfo
(
ServerInfo_Game
&
result
)
const
{
{
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
result
.
set_room_id
(
room
->
getId
());
result
.
set_room_id
(
room
->
getId
());
result
.
set_game_id
(
gameId
);
result
.
set_game_id
(
gameId
);
if
(
gameClosed
)
if
(
gameClosed
)
...
@@ -722,7 +722,7 @@ void Server_Game::getInfo(ServerInfo_Game &result) const
...
@@ -722,7 +722,7 @@ void Server_Game::getInfo(ServerInfo_Game &result) const
else
{
else
{
for
(
int
i
=
0
;
i
<
gameTypes
.
size
();
++
i
)
for
(
int
i
=
0
;
i
<
gameTypes
.
size
();
++
i
)
result
.
add_game_types
(
gameTypes
[
i
]);
result
.
add_game_types
(
gameTypes
[
i
]);
result
.
set_max_players
(
getMaxPlayers
());
result
.
set_max_players
(
getMaxPlayers
());
result
.
set_description
(
getDescription
().
toStdString
());
result
.
set_description
(
getDescription
().
toStdString
());
result
.
set_with_password
(
!
getPassword
().
isEmpty
());
result
.
set_with_password
(
!
getPassword
().
isEmpty
());
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment