提交 753bfbfd 作者: 方治民

feat: 添加 StompReceiver Reply 示例

上级 17933f9f
/* (C) 2024 YiRing, Inc. */
package com.yiring.websocket.domain;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
/**
* @author Jim
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
public class Reply implements Serializable {
@Serial
private static final long serialVersionUID = -8707725963947081302L;
/**
* 从哪个 @MessageMapping 过来的响应
*/
String from;
/**
* 响应的数据
*/
Object data;
}
......@@ -8,10 +8,10 @@ import com.yiring.auth.util.Auths;
import com.yiring.common.constant.DateFormatter;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.websocket.domain.Reply;
import com.yiring.websocket.domain.StompPrincipal;
import com.yiring.websocket.registry.StompUserRegistry;
import java.time.LocalDateTime;
import java.util.Objects;
import java.util.Set;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
......@@ -47,7 +47,8 @@ public class StompReceiver {
* @param accessor StompHeaderAccessor
*/
@MessageMapping("/login")
public void login(StompHeaderAccessor accessor, String token) {
@SendToUser("/topic/notice")
public Result<Reply> login(StompHeaderAccessor accessor, String token) {
try {
User user = auths.getUserByToken(token);
StompPrincipal principal = (StompPrincipal) accessor.getUser();
......@@ -57,12 +58,12 @@ public class StompReceiver {
accessor.setUser(principal);
stompUserRegistry.updateUser(accessor.getSessionId(), principal);
log.info("STOMP user `{}` login success.", principal.getUser());
// 构建回复结果
Reply reply = Reply.builder().from(accessor.getDestination()).data(user.getUsername()).build();
return Result.ok(reply);
} catch (Exception e) {
simpMessagingTemplate.convertAndSendToUser(
Objects.requireNonNull(accessor.getSessionId()),
"/topic/notice",
Result.no(Status.UNAUTHORIZED)
);
return Result.no(Status.UNAUTHORIZED);
}
}
......@@ -84,9 +85,16 @@ public class StompReceiver {
stompUserRegistry.updateUser(accessor.getSessionId(), principal);
}
/**
* 测试 ping
*
* @param accessor StompHeaderAccessor
* @param message 消息
* @return Result<Reply>
*/
@MessageMapping("/ping")
@SendToUser("/topic/reply")
public Result<JSONObject> test(String message) {
@SendToUser("/topic/notice")
public Result<Reply> ping(StompHeaderAccessor accessor, String message) {
log.info("收到来自 STOMP Client `/app/ping` 消息:{}", message);
Set<SimpUser> simpUsers = simpUserRegistry.getUsers();
......@@ -99,6 +107,8 @@ public class StompReceiver {
body.put("message", "pong");
body.put("time", DateFormatter.DATE_TIME.format(LocalDateTime.now()));
return Result.ok(body);
// 构建回复结果
Reply reply = Reply.builder().from(accessor.getDestination()).data(body).build();
return Result.ok(reply);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论