Skip to content

Instantly share code, notes, and snippets.

<div ng-switch on="page">
<div ng-switch-when="create" ng-controller="CreateGameController">
<!-- content -->
</div>
<div ng-switch-when="choose_players" ng-controller="StartGameController">
<!-- content -->
</div>
<div ng-switch-when="game" ng-controller="GameController">
<!-- content -->
module.controller('CreateGameController', function($scope, $rootScope, commandService, eventService) {
$scope.loading = false;
$scope.createNewGame = function() {
$scope.loading = true;
commandService.createGame(function(data) {
$scope.loading = false;
$rootScope.gameId = data.id;
$rootScope.page = "choose_players";
module.controller('StartGameController', function($scope, $rootScope, commandService) {
$scope.playersCount = 6;
$scope.loading = false;
$scope.hidePopoverTimeout = null;
$scope.startGame = function() {
$scope.loading = true;
$rootScope.$on('events.GameStarted', function(event, data) {
$rootScope.game = {
players: data.players,
turn: data.initialTurn,
scores: []
};
$rootScope.page = "game";
$rootScope.$apply();
});
$rootScope.$on('events.TurnCountdownUpdated', function(event, data) {
$rootScope.game.turn.secondsLeft = data.secondsLeft;
$rootScope.$apply();
});
$rootScope.$on('events.TurnChanged', function(event, data) {
$rootScope.game.turn = data.turn;
$rootScope.$apply();
});
module.controller('GameController', function($scope, $rootScope, commandService) {
$scope.selectedPlayer = $rootScope.game.players[0];
$scope.winners = [];
$scope.gameFinished = false;
$scope.playAgain = function() {
$rootScope.gameId = null;
implicit val connection = Connection()
val queue = Queue(queueName, durable = false, autoDelete = true)
val bindArgs = Map("x-match" -> "all", "type" -> "DiceRolled")
val resultFuture = for {
_ <- connection.queueDeclare(queue)
_ <- connection.queueBind(queueName, exchangeName, "", bindArgs)
} yield ()
resultFuture onComplete {
class SubscriberActor(statsActor: ActorRef) extends ActorSubscriber {
override def receive = {
case OnNext(message: Message) =>
for {
eventType <- message.headers.get("type") if eventType == "DiceRolled"
content <- parseOpt(message.body.decodeString("UTF-8"))
JInt(rolledNumber) <- content \ "rolledNumber"
} statsActor ! StatsActor.IncRollsCount(rolledNumber.toInt)
case OnComplete =>
case class IncRollsCount(rolledNumber: Int) extends Command
case class RollsCountIncreased(rolledNumber: Int) extends Event
case object GetState extends Command
class StatsActor extends PersistentActor {
override val persistenceId = "rolls_stats"
var state: Stats = Stats(Map.empty)
case class Stats(rollsCounts: Map[Int, Int]) {
def incRollsCount(rolledNumber: Int) = {
val currentCount = rollsCounts.getOrElse(rolledNumber, 0)
copy(rollsCounts = rollsCounts + (rolledNumber -> (currentCount + 1)))
}
}