ho fatto una semplice comunicazione presa web con molla 4, STOMP e sock.js, seguendo questo https://spring.io/guides/gs/messaging-stomp-websocket/come catturare iscriversi evento nel mio server websocket con la Primavera 4
Ora voglio aggiornarlo a semplice chat. Il mio problema è che quando l'utente si iscrive alla nuova chat room, dovrebbe passare i messaggi. Non so come catturare il momento in cui si è iscritto per mandargli la lista dei messaggi.
Ho provato ad utilizzare @MessageMapping annotazione, ma non ha raggiunto alcun successo:
@Controller
public class WebSocketController {
@Autowired
private SimpMessagingTemplate messagingTemplate;
@MessageMapping("/chat/{chatId}")
public void chat(ChatMessage message, @DestinationVariable String chatId) {
messagingTemplate.convertAndSend("/chat/" + chatId, new ChatMessage("message: " + message.getText()));
}
@SubscribeMapping("/chat")
public void chatInit() {
System.out.println("worked");
int chatId = 1; //for example
messagingTemplate.convertAndSend("/chat/" + chatId, new ChatMessage("connected"));
}
}
Poi ho creato che:
@Controller
public class ApplicationEventObserverController implements ApplicationListener<ApplicationEvent> {
@Override
public void onApplicationEvent(ApplicationEvent applicationEvent) {
System.out.println(applicationEvent);
}
}
Funziona, ma cattura tutti gli eventi possibili, I don' Penso che sia una buona pratica.
Quindi, la mia domanda può essere riformulata: come inviare i dati iniziali quando l'utente è abbonato a sth?
ho trovato la domanda simile qui: http://stackoverflow.com/questions/24795340/how-to-find-all-users-subscribed-to-a-topic-in-spring-websockets – sinedsem