提交 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; ...@@ -8,10 +8,10 @@ import com.yiring.auth.util.Auths;
import com.yiring.common.constant.DateFormatter; import com.yiring.common.constant.DateFormatter;
import com.yiring.common.core.Result; import com.yiring.common.core.Result;
import com.yiring.common.core.Status; import com.yiring.common.core.Status;
import com.yiring.websocket.domain.Reply;
import com.yiring.websocket.domain.StompPrincipal; import com.yiring.websocket.domain.StompPrincipal;
import com.yiring.websocket.registry.StompUserRegistry; import com.yiring.websocket.registry.StompUserRegistry;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -47,7 +47,8 @@ public class StompReceiver { ...@@ -47,7 +47,8 @@ public class StompReceiver {
* @param accessor StompHeaderAccessor * @param accessor StompHeaderAccessor
*/ */
@MessageMapping("/login") @MessageMapping("/login")
public void login(StompHeaderAccessor accessor, String token) { @SendToUser("/topic/notice")
public Result<Reply> login(StompHeaderAccessor accessor, String token) {
try { try {
User user = auths.getUserByToken(token); User user = auths.getUserByToken(token);
StompPrincipal principal = (StompPrincipal) accessor.getUser(); StompPrincipal principal = (StompPrincipal) accessor.getUser();
...@@ -57,12 +58,12 @@ public class StompReceiver { ...@@ -57,12 +58,12 @@ public class StompReceiver {
accessor.setUser(principal); accessor.setUser(principal);
stompUserRegistry.updateUser(accessor.getSessionId(), principal); stompUserRegistry.updateUser(accessor.getSessionId(), principal);
log.info("STOMP user `{}` login success.", principal.getUser()); 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) { } catch (Exception e) {
simpMessagingTemplate.convertAndSendToUser( return Result.no(Status.UNAUTHORIZED);
Objects.requireNonNull(accessor.getSessionId()),
"/topic/notice",
Result.no(Status.UNAUTHORIZED)
);
} }
} }
...@@ -84,9 +85,16 @@ public class StompReceiver { ...@@ -84,9 +85,16 @@ public class StompReceiver {
stompUserRegistry.updateUser(accessor.getSessionId(), principal); stompUserRegistry.updateUser(accessor.getSessionId(), principal);
} }
/**
* 测试 ping
*
* @param accessor StompHeaderAccessor
* @param message 消息
* @return Result<Reply>
*/
@MessageMapping("/ping") @MessageMapping("/ping")
@SendToUser("/topic/reply") @SendToUser("/topic/notice")
public Result<JSONObject> test(String message) { public Result<Reply> ping(StompHeaderAccessor accessor, String message) {
log.info("收到来自 STOMP Client `/app/ping` 消息:{}", message); log.info("收到来自 STOMP Client `/app/ping` 消息:{}", message);
Set<SimpUser> simpUsers = simpUserRegistry.getUsers(); Set<SimpUser> simpUsers = simpUserRegistry.getUsers();
...@@ -99,6 +107,8 @@ public class StompReceiver { ...@@ -99,6 +107,8 @@ public class StompReceiver {
body.put("message", "pong"); body.put("message", "pong");
body.put("time", DateFormatter.DATE_TIME.format(LocalDateTime.now())); 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论