package com.mgreau.wildfly.websocket;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import com.mgreau.wildfly.websocket.messages.MatchMessage;
@Startup
@Singleton
public class StarterService {
private Random random;
private Map<String, TennisMatch> matches = new ConcurrentHashMap<>();
private static final Logger logger = Logger.getLogger("StarterService");
@PostConstruct
public void init() {
logger.log(Level.INFO, "Initializing App.");
random = new Random();
matches.put("1234", new TennisMatch("1234", "US OPEN - QUARTER FINALS", "Ferrer D.", "es", "Almagro N.", "es"));
matches.put("1235", new TennisMatch("1235", "US OPEN - QUARTER FINALS", "Djokovic N.", "rs", "Berdych T.", "cz"));
matches.put("1236", new TennisMatch("1236", "US OPEN - QUARTER FINALS", "Murray A.", "gb", "Chardy J.", "fr"));
matches.put("1237", new TennisMatch("1237", "US OPEN - QUARTER FINALS", "Federer R.", "ch", "Tsonga J.W.", "fr"));
}
@Schedule(second="*/3", minute="*",hour="*", persistent=false)
public void play() {
for (Map.Entry<String,TennisMatch> match : matches.entrySet()){
TennisMatch m = match.getValue();
if (m.isFinished()){
//add a timer to restart a match after 20 secondes
m.reset();
}
//Handle point
if (random.nextInt(2) == 1){
m.playerOneScores();
} else {
m.playerTwoScores();
}
MatchEndpoint.send(new MatchMessage(m), match.getKey());
//if there is a winner, send result and reset the game
if (m.isFinished()){
MatchEndpoint.sendBetMessages(m.playerWithHighestSets(), match.getKey(), true);
}
}
}
public Map<String, TennisMatch> getMatches(){
return matches;
}
}