48 lines
1.7 KiB
Java
48 lines
1.7 KiB
Java
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<String> 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)
|
|
);
|
|
}
|
|
}
|