Update game stream on takeback

pull/9451/head
Benedikt Werner 2021-07-23 11:23:53 +02:00
parent 63fc7290f1
commit f56c47324f
No known key found for this signature in database
GPG Key ID: 1DBFF0F8E9E121EB
4 changed files with 30 additions and 4 deletions

View File

@ -62,6 +62,7 @@ final class GameStateStream(
private val classifiers = List(
MoveGameEvent makeChan id,
s"boardDrawOffer:$id",
s"boardTakeback:$id",
"finishGame",
"abortGame",
uniqChan(init.game pov as),
@ -102,6 +103,7 @@ final class GameStateStream(
case FinishGame(g, _, _) if g.id == id => onGameOver(g.some).unit
case AbortedBy(pov) if pov.gameId == id => onGameOver(pov.game.some).unit
case lila.game.actorApi.BoardDrawOffer(pov) if pov.gameId == id => pushState(pov.game).unit
case lila.game.actorApi.BoardTakeback(pov) if pov.gameId == id => pushState(pov.game).unit
case SetOnline =>
onlineApiUsers.setOnline(user.id)
context.system.scheduler

View File

@ -31,3 +31,11 @@ object MoveGameEvent {
}
case class BoardDrawOffer(pov: Pov)
object BoardDrawOffer {
def makeChan(gameId: Game.ID) = s"boardDrawOffer:$gameId"
}
case class BoardTakeback(pov: Pov)
object BoardTakeback {
def makeChan(gameId: Game.ID) = s"boardTakeback:$gameId"
}

View File

@ -88,7 +88,7 @@ final private[round] class Drawer(
fuccess(
Bus.publish(
lila.game.actorApi.BoardDrawOffer(p),
s"boardDrawOffer:${pov.gameId}"
lila.game.actorApi.BoardDrawOffer makeChan pov.gameId
)
)
}

View File

@ -28,9 +28,11 @@ final private class Takebacker(
.fromPly(pov.opponent.proposeTakebackAt)
) single(game)
else double(game)
} dmap (_ -> situation.reset)
case Pov(game, _) if pov.game.playableByAi => single(game) dmap (_ -> situation)
case Pov(game, _) if pov.opponent.isAi => double(game) dmap (_ -> situation)
} >>- publishTakeback(pov) dmap (_ -> situation.reset)
case Pov(game, _) if pov.game.playableByAi =>
single(game) >>- publishTakeback(pov) dmap (_ -> situation)
case Pov(game, _) if pov.opponent.isAi =>
double(game) >>- publishTakeback(pov) dmap (_ -> situation)
case Pov(game, color) if (game playerCanProposeTakeback color) && situation.offerable =>
{
messenger.system(game, trans.takebackPropositionSent.txt())
@ -122,4 +124,18 @@ final private class Takebacker(
messenger.system(p2.game, trans.takebackPropositionAccepted.txt())
proxy.save(p2) inject p2.events
}
private def publishTakeback(pov: Pov)(implicit proxy: GameProxy): Unit = {
if (lila.game.Game.isBoardCompatible(pov.game))
proxy
.withPov(pov.color) { p =>
fuccess(
Bus.publish(
lila.game.actorApi.BoardTakeback(p),
lila.game.actorApi.BoardTakeback makeChan pov.gameId
)
)
}
.unit
}
}