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
befe2d52
Commit
befe2d52
authored
Mar 31, 2012
by
Max-Wilhelm Bruker
Browse files
Merge branch 'server_crash_fix'
parents
0165ea61
b289ab0d
Changes
3
Hide whitespace changes
Inline
Side-by-side
common/server_game.cpp
View file @
befe2d52
...
@@ -266,7 +266,7 @@ void Server_Game::removePlayer(Server_Player *player)
...
@@ -266,7 +266,7 @@ void Server_Game::removePlayer(Server_Player *player)
QMutexLocker
locker
(
&
gameMutex
);
QMutexLocker
locker
(
&
gameMutex
);
players
.
remove
(
player
->
getPlayerId
());
players
.
remove
(
player
->
getPlayerId
());
removeArrowsToPlayer
(
player
);
removeArrows
Related
ToPlayer
(
player
);
sendGameEvent
(
new
Event_Leave
(
player
->
getPlayerId
()));
sendGameEvent
(
new
Event_Leave
(
player
->
getPlayerId
()));
bool
playerActive
=
activePlayer
==
player
->
getPlayerId
();
bool
playerActive
=
activePlayer
==
player
->
getPlayerId
();
...
@@ -299,11 +299,13 @@ void Server_Game::removePlayer(Server_Player *player)
...
@@ -299,11 +299,13 @@ void Server_Game::removePlayer(Server_Player *player)
room
->
broadcastGameListUpdate
(
this
);
room
->
broadcastGameListUpdate
(
this
);
}
}
void
Server_Game
::
removeArrowsToPlayer
(
Server_Player
*
player
)
void
Server_Game
::
removeArrows
Related
ToPlayer
(
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
// arrows that start at another person's cards.
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
while
(
playerIterator
.
hasNext
())
{
while
(
playerIterator
.
hasNext
())
{
Server_Player
*
p
=
playerIterator
.
next
().
value
();
Server_Player
*
p
=
playerIterator
.
next
().
value
();
...
@@ -315,7 +317,11 @@ void Server_Game::removeArrowsToPlayer(Server_Player *player)
...
@@ -315,7 +317,11 @@ void Server_Game::removeArrowsToPlayer(Server_Player *player)
if
(
targetCard
)
{
if
(
targetCard
)
{
if
(
targetCard
->
getZone
()
->
getPlayer
()
==
player
)
if
(
targetCard
->
getZone
()
->
getPlayer
()
==
player
)
toDelete
.
append
(
a
);
toDelete
.
append
(
a
);
}
else
if
((
static_cast
<
Server_Player
*>
(
a
->
getTargetItem
())
==
player
)
||
(
a
->
getStartCard
()
->
getZone
()
->
getPlayer
()
==
player
))
}
else
if
(
static_cast
<
Server_Player
*>
(
a
->
getTargetItem
())
==
player
)
toDelete
.
append
(
a
);
// Don't use else here! It has to happen regardless of whether targetCard == 0.
if
(
a
->
getStartCard
()
->
getZone
()
->
getPlayer
()
==
player
)
toDelete
.
append
(
a
);
toDelete
.
append
(
a
);
}
}
for
(
int
i
=
0
;
i
<
toDelete
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
toDelete
.
size
();
++
i
)
{
...
...
common/server_game.h
View file @
befe2d52
...
@@ -82,7 +82,7 @@ public:
...
@@ -82,7 +82,7 @@ public:
bool
containsUser
(
const
QString
&
userName
)
const
;
bool
containsUser
(
const
QString
&
userName
)
const
;
Server_Player
*
addPlayer
(
Server_ProtocolHandler
*
handler
,
bool
spectator
,
bool
broadcastUpdate
=
true
);
Server_Player
*
addPlayer
(
Server_ProtocolHandler
*
handler
,
bool
spectator
,
bool
broadcastUpdate
=
true
);
void
removePlayer
(
Server_Player
*
player
);
void
removePlayer
(
Server_Player
*
player
);
void
removeArrowsToPlayer
(
Server_Player
*
player
);
void
removeArrows
Related
ToPlayer
(
Server_Player
*
player
);
bool
kickPlayer
(
int
playerId
);
bool
kickPlayer
(
int
playerId
);
void
startGameIfReady
();
void
startGameIfReady
();
void
stopGameIfFinished
();
void
stopGameIfFinished
();
...
...
common/server_protocolhandler.cpp
View file @
befe2d52
...
@@ -632,7 +632,7 @@ ResponseCode Server_ProtocolHandler::cmdConcede(Command_Concede * /*cmd*/, Comma
...
@@ -632,7 +632,7 @@ ResponseCode Server_ProtocolHandler::cmdConcede(Command_Concede * /*cmd*/, Comma
return
RespContextError
;
return
RespContextError
;
player
->
setConceded
(
true
);
player
->
setConceded
(
true
);
game
->
removeArrowsToPlayer
(
player
);
game
->
removeArrows
Related
ToPlayer
(
player
);
player
->
clearZones
();
player
->
clearZones
();
game
->
sendGameEvent
(
new
Event_PlayerPropertiesChanged
(
player
->
getPlayerId
(),
player
->
getProperties
()),
new
Context_Concede
);
game
->
sendGameEvent
(
new
Event_PlayerPropertiesChanged
(
player
->
getPlayerId
(),
player
->
getProperties
()),
new
Context_Concede
);
game
->
stopGameIfFinished
();
game
->
stopGameIfFinished
();
...
...
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