Back to Demos
Lottery WebSocket
Real-time lottery with session state machine based on LotteryWebsocket
Stats
Total Sessions
0Subscribers
0Controls
Production Code (Java)
// From lottery-api/LotteryWebsocket - WebSocketHandler.java
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
SocketRequest req = JsonUtils.deSerialize(message.getPayload(), SocketRequest.class);
switch (req.getCommand()) {
case LotteryCommand.SUBSCRIBE -> resultService.handleSubscribe(session, req.getData());
case LotteryCommand.PING -> resultService.handlePing(session);
case LotteryCommand.MOCK_RESULT -> mockupResultService.handleSubscribe(session, req.getData());
default -> resultService.handleUnknown(session, req.getCommand());
}
}
// GameLogic.java - Session state machine
public class GameLogic {
private SessionState state = SessionState.WAITING;
@Scheduled(fixedRate = 30000) // 30 seconds betting window
public void processBettingRound() {
switch (state) {
case WAITING -> startBetting();
case BETTING -> endBettingAndGenerateResult();
case ENDED -> calculatePayouts();
}
}
private void endBettingAndGenerateResult() {
// Shuffle and generate 6 winning numbers (1-45)
List<Integer> numbers = IntStream.rangeClosed(1, 45).boxed().collect(toList());
Collections.shuffle(numbers);
this.result = numbers.subList(0, 6);
broadcast(new ResultEvent(sessionId, result));
}
}