NewHighscoreEventListener.java
package me.schawe.multijsnake.highscore;
import me.schawe.multijsnake.gamemanagement.websocket.WebSocketService;
import me.schawe.multijsnake.snake.Snake;
import me.schawe.multijsnake.snake.SnakeDiesEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class NewHighscoreEventListener implements ApplicationListener<SnakeDiesEvent> {
private final HighscoreRepository highscoreRepository;
private final WebSocketService webSocketService;
public NewHighscoreEventListener(HighscoreRepository highscoreRepository, WebSocketService webSocketService) {
this.highscoreRepository = highscoreRepository;
this.webSocketService = webSocketService;
}
private void updateHighscore(Snake snake, int size) {
var score = snake.getLength();
// do not save highscore for AI snakes
// also do not save very low scores
if (snake.ai().isPresent() || score < 5) {
return;
}
Date date = new Date();
Highscore highscore = new Highscore(score, snake.getName(), size, date);
highscoreRepository.save(highscore);
webSocketService.updateHighscore(size);
webSocketService.updateGlobalHighscore();
}
@Override
public void onApplicationEvent(SnakeDiesEvent event) {
updateHighscore(event.getSnake(), event.getSize());
}
}