Merge pull request #9451 from benediktwerner/takeback-stream
Update game stream on takeback
This commit is contained in:
commit
d7048d1910
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue