¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.common.sse.controller; |
| | | |
| | | import cn.dev33.satoken.annotation.SaIgnore; |
| | | import cn.dev33.satoken.stp.StpUtil; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.dromara.common.core.domain.R; |
| | | import org.dromara.common.satoken.utils.LoginHelper; |
| | | import org.dromara.common.sse.core.SseEmitterManager; |
| | | import org.dromara.common.sse.dto.SseMessageDto; |
| | | import org.springframework.beans.factory.DisposableBean; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * SSE æ§å¶å¨ |
| | | * |
| | | * @author Lion Li |
| | | */ |
| | | @RestController |
| | | @ConditionalOnProperty(value = "sse.enabled", havingValue = "true") |
| | | @RequiredArgsConstructor |
| | | public class SseController implements DisposableBean { |
| | | |
| | | private final SseEmitterManager sseEmitterManager; |
| | | |
| | | /** |
| | | * å»ºç« SSE è¿æ¥ |
| | | */ |
| | | @GetMapping(value = "${sse.path}", produces = MediaType.TEXT_EVENT_STREAM_VALUE) |
| | | public SseEmitter connect() { |
| | | String tokenValue = StpUtil.getTokenValue(); |
| | | Long userId = LoginHelper.getUserId(); |
| | | return sseEmitterManager.connect(userId, tokenValue); |
| | | } |
| | | |
| | | /** |
| | | * å
³é SSE è¿æ¥ |
| | | */ |
| | | @SaIgnore |
| | | @GetMapping(value = "${sse.path}/close") |
| | | public R<Void> close() { |
| | | String tokenValue = StpUtil.getTokenValue(); |
| | | Long userId = LoginHelper.getUserId(); |
| | | sseEmitterManager.disconnect(userId, tokenValue); |
| | | return R.ok(); |
| | | } |
| | | |
| | | /** |
| | | * åç¹å®ç¨æ·åéæ¶æ¯ |
| | | * |
| | | * @param userId ç®æ ç¨æ·ç ID |
| | | * @param msg è¦åéçæ¶æ¯å
容 |
| | | */ |
| | | @GetMapping(value = "${sse.path}/send") |
| | | public R<Void> send(Long userId, String msg) { |
| | | SseMessageDto dto = new SseMessageDto(); |
| | | dto.setUserIds(List.of(userId)); |
| | | dto.setMessage(msg); |
| | | sseEmitterManager.publishMessage(dto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | /** |
| | | * åææç¨æ·åéæ¶æ¯ |
| | | * |
| | | * @param msg è¦åéçæ¶æ¯å
容 |
| | | */ |
| | | @GetMapping(value = "${sse.path}/sendAll") |
| | | public R<Void> send(String msg) { |
| | | sseEmitterManager.publishAll(msg); |
| | | return R.ok(); |
| | | } |
| | | |
| | | /** |
| | | * æ¸
çèµæºãæ¤æ¹æ³ç®å䏿§è¡ä»»ä½æä½ï¼ä½é¿å
å æªå®ç°è导è´é误 |
| | | */ |
| | | @Override |
| | | public void destroy() throws Exception { |
| | | // 鿝æ¶ä¸éè¦åä»ä¹ æ¤æ¹æ³é¿å
æ ç¨æä½æ¥é |
| | | } |
| | | |
| | | } |