update SSE支持添加根据条件发送的方法

master
管理员 12 months ago
parent 92bee706ff
commit f2d2631ce9

@ -3,10 +3,10 @@ package com.ruoyi.common.sse;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List; import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Predicate;
public abstract class SseApiSupport<T> { public abstract class SseApiSupport<T> {
protected final List<SseEmitter<T>> emitters = new CopyOnWriteArrayList<>(); protected final List<SseEmitter<T>> emitters = new CopyOnWriteArrayList<>();
@ -45,15 +45,14 @@ public abstract class SseApiSupport<T> {
} }
/** /**
* action * action
* * @param predicate
* @param type
* @param action action * @param action action
*/ */
public final void send(T type, SseAction<?> action) { public final void send(Predicate<SseEmitter<T>> predicate, SseAction<?> action) {
List<SseEmitter<T>> removes = ListUtil.list(true); List<SseEmitter<T>> removes = ListUtil.list(true);
for (SseEmitter<T> e : emitters) { for (SseEmitter<T> e : emitters) {
if (ObjUtil.isNull(type) || ObjUtil.isNull(e.getType()) || ObjUtil.equals(type, e.getType())) { if (predicate.test(e)) {
try { try {
e.send(action, MediaType.APPLICATION_JSON); e.send(action, MediaType.APPLICATION_JSON);
} catch (Exception e1) { } catch (Exception e1) {
@ -64,6 +63,27 @@ public abstract class SseApiSupport<T> {
emitters.removeAll(removes); emitters.removeAll(removes);
} }
/**
* action
* @param predicate
* @param action action
* @param data
*/
public final void send(Predicate<SseEmitter<T>> predicate, String action, Object data) {
send(predicate, SseAction.builder().action(action).data(data).build());
}
/**
* action
*
* @param type
* @param action action
*/
public final void send(T type, SseAction<?> action) {
send(e -> ObjUtil.isNull(type) || ObjUtil.isNull(e.getType()) || ObjUtil.equals(type, e.getType()), action);
}
/** /**
* action * action
* *
@ -91,7 +111,7 @@ public abstract class SseApiSupport<T> {
* @param action * @param action
*/ */
public final void sendAll(SseAction<?> action) { public final void sendAll(SseAction<?> action) {
send(null, action); send((T)null, action);
} }

Loading…
Cancel
Save