Я пытаюсь создать приватный чат, используя Spring Socket и Socket JS.
Я чувствую, что достиг последнего шага, но не могу получить сообщение в конце.
Я следовал учебному пособию, чтобы приспособиться к своему конкретному c случаю. Мне интересно, если я забыл какой-либо шаг или что-то.
Вот основная часть кода:
JAVA
1.Конфигурация класса
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
private static final Logger logger = Logger.getLogger("WebSocketConfig");
@Override
public void configureMessageBroker(final MessageBrokerRegistry config) {
config.enableSimpleBroker("/secured/user/queue/specific-user");
config.setUserDestinationPrefix( "/secured/user");
}
@Override
public void registerStompEndpoints(final StompEndpointRegistry registry) {
registry.addEndpoint("/secured/room").withSockJS();
}
}
2 .Контроллер класса
@Controller
public class ChatController {
@Autowired
SimpMessagingTemplate simpMessagingTemplate;
private static final Logger logger = Logger.getLogger("ChatController");
@MessageMapping("/secured/room")
public void sendSpecific(@Payload Message message, Principal user, @Header("simpSessionId") String sessionId) throws Exception {
final String time = new SimpleDateFormat("HH:mm").format(new Date());
OutputMessage out = new OutputMessage(message.getFrom(), message.getText(), time);
simpMessagingTemplate.convertAndSendToUser("benoit", "/secured/user/queue/specific-user", out);
}
}
JavaScript
var stompClient = null;
var sessionId = "";
function setConnected(connected) {
document.getElementById('connect').disabled = connected;
document.getElementById('disconnect').disabled = !connected;
document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden';
document.getElementById('response').innerHTML = '';
}
function connect() {
var socket = new SockJS('/secured/room');
stompClient = Stomp.over(socket);
stompClient.connect({
name:"benoit"
}, function (frame) {
var url = stompClient.ws._transport.url;
console.log(url);
url = url.replace(
"ws://localhost:8080/secured/room/", "");
url = url.replace("/websocket", "");
url = url.replace(/^[0-9]+\//, "");
console.log("Your current session is: " + url);
sessionId = url;
setConnected(true);
console.log(stompClient);
stompClient.subscribe('/secured/user/queue/specific-user'
+ '-user' + sessionId, function (msgOut) {
var response = document.getElementById('response');
var p = document.createElement('p');
p.style.wordWrap = 'break-word';
p.appendChild(document.createTextNode(messageOutput.from + ": " + messageOutput.text + " (" + messageOutput.time + ")"));
response.appendChild(p);
});
});
}
function disconnect() {
if(stompClient != null) {
stompClient.disconnect();
}
setConnected(false);
console.log("Disconnected");
}
function sendMessage() {
var from = document.getElementById('from').value;
var text = document.getElementById('text').value;
console.log(stompClient);
var msg = {
'from': (from === undefined || from === null ) ? to : from,
'to': "benoit",
'text': text
};
console.log(JSON.stringify(msg));
stompClient.send('/secured/room', {}, JSON.stringify(msg));
}
Вот страница html с журналом:
Скриншот журнала