Я новичок в весенней паутине. Я пытался разными способами отправить сообщение указанному c пользователю. Но не удалось. Что я пытаюсь сказать, у меня есть два пользователя jhon & alex. Когда Джон вошел в систему, он может отправить сообщение Алексу.
@MessageMapping("/message")
public void processMessageFromClient(@Payload Message msg, Principal principal) throws Exception {
OutputMessage out = new OutputMessage(principal.getName(), msg.getText(),
new SimpleDateFormat("HH:mm").format(new Date()));
//*msg.getTo() gives the target user alex*
messagingTemplate.convertAndSendToUser(msg.getTo(), "/queue/reply", out);
}
С помощью приведенного выше кода сообщение не отправляется alex (также аутентифицированному пользователю), на самом деле в этот момент ничего не происходит. Однако, если я изменяю msg.getTo () на Principal.getName (), которая является именем пользователя для текущего вошедшего в систему пользователя, это отправляет сообщение текущему вошедшему в систему пользователю, т.е. jhon. Но я хочу отправить Алексу.
Здесь мы используем конфигурацию сокета.
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic/", "/queue/");
config.setApplicationDestinationPrefixes("/app");
config.setUserDestinationPrefix("/user");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ict-socket-endpoint").setAllowedOrigins("*");
}
}
А ниже javascript клиент
var ws;
function setConnected(connected) {
$("#connect").prop("disabled", connected);
$("#disconnect").prop("disabled", !connected);
if (connected) {
$("#conversation").show();
} else {
$("#conversation").hide();
}
$("#greetings").html("");
}
function connect() {
// connect to stomp where stomp endpoint is exposed
var socket = new WebSocket("ws://localhost:8084/ict-socket-endpoint");
ws = Stomp.over(socket);
var header = {
"name" : "alex"
}
ws.connect(header, function(frame) {
ws.subscribe("/user/queue/errors", function(message) {
alert("Error " + message.body);
});
ws.subscribe("/user/queue/reply", function(message) {
console.log("message ====" + JSON.stringify(message.body));
showGreeting(message.body);
});
}, function(error) {
alert("STOMP error " + error);
});
}
function disconnect() {
if (ws != null) {
ws.close();
}
setConnected(false);
console.log("Disconnected");
}
function sendMsg() {
var opts = {
from: 'bhaba', //loggedIn user
to: 'alex', //target user
text: $("#name").val(),
disconnect: 'disconnect'
};
var data = JSON.stringify(opts);
ws.send("/app/message", {}, data);
}
function showGreeting(message) {
$("#greetings").append(" " + message + "");
}
$(function() {
$("form").on('submit', function(e) {
e.preventDefault();
});
$("#connect").click(function() {
connect();
});
$("#disconnect").click(function() {
disconnect();
});
$("#send").click(function() {
sendMsg();
});
});
Устал пытаться сейчас , Нужна помощь. Спасибо!