package com.xuezhanmaster.ws.service; import com.xuezhanmaster.game.event.GameEvent; import com.xuezhanmaster.ws.dto.PrivateActionMessage; import com.xuezhanmaster.ws.dto.PrivateTeachingMessage; import com.xuezhanmaster.ws.dto.PublicGameMessage; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Service; import java.util.List; @Service public class GameMessagePublisher { private final SimpMessagingTemplate messagingTemplate; public GameMessagePublisher(SimpMessagingTemplate messagingTemplate) { this.messagingTemplate = messagingTemplate; } public void publishPublicEvent(GameEvent event) { messagingTemplate.convertAndSend( "/topic/games/" + event.gameId() + "/events", new PublicGameMessage( event.gameId(), event.eventType().name(), event.seatNo(), event.payload(), event.createdAt() ) ); } public void publishPrivateActionRequired(String gameId, String userId, List availableActions, int currentSeatNo) { messagingTemplate.convertAndSend( "/topic/users/" + userId + "/actions", new PrivateActionMessage(gameId, userId, availableActions, currentSeatNo) ); } public void publishPrivateTeaching(String gameId, String userId, String teachingMode, String recommendedAction, String explanation) { messagingTemplate.convertAndSend( "/topic/users/" + userId + "/teaching", new PrivateTeachingMessage(gameId, userId, teachingMode, recommendedAction, explanation) ); } }