[+] mesh
This commit is contained in:
@@ -52,14 +52,14 @@ public interface ClientSession extends AutoCloseable {
|
||||
*
|
||||
* @return 终端标识是否匹配
|
||||
*/
|
||||
boolean matchSn(String sn);
|
||||
boolean filterSn(String sn);
|
||||
|
||||
/**
|
||||
* @param sn 终端标识
|
||||
*
|
||||
* @return 终端标识是否匹配失败
|
||||
*/
|
||||
boolean matchNoneSn(String sn);
|
||||
boolean filterNoneSn(String sn);
|
||||
|
||||
/**
|
||||
* @param instance 会话实例
|
||||
|
||||
@@ -64,12 +64,12 @@ public abstract class ClientSessionAdapter<T extends AutoCloseable> implements C
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matchSn(String sn) {
|
||||
public boolean filterSn(String sn) {
|
||||
return StringUtils.equals(sn, this.sn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matchNoneSn(String sn) {
|
||||
public boolean filterNoneSn(String sn) {
|
||||
return !StringUtils.equals(sn, this.sn);
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ public class ClientSessionManager {
|
||||
* @param message 消息
|
||||
*/
|
||||
public void unicast(String to, Message message) {
|
||||
this.sessions.stream().filter(v -> v.matchSn(to)).forEach(v -> {
|
||||
this.sessions.stream().filter(v -> v.filterSn(to)).forEach(v -> {
|
||||
message.getHeader().setSn(v.sn());
|
||||
v.push(message);
|
||||
});
|
||||
@@ -90,7 +90,7 @@ public class ClientSessionManager {
|
||||
* @param message 消息
|
||||
*/
|
||||
public void broadcast(String from, Message message) {
|
||||
this.sessions.stream().filter(v -> v.matchNoneSn(from)).forEach(v -> {
|
||||
this.sessions.stream().filter(v -> v.filterNoneSn(from)).forEach(v -> {
|
||||
message.getHeader().setSn(v.sn());
|
||||
v.push(message);
|
||||
});
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.acgist.taoyao.signal.client.websocket;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import com.acgist.taoyao.boot.model.Message;
|
||||
import com.acgist.taoyao.boot.model.MessageCodeException;
|
||||
import com.acgist.taoyao.signal.client.ClientSessionManager;
|
||||
import com.acgist.taoyao.signal.protocol.ProtocolManager;
|
||||
import com.acgist.taoyao.signal.protocol.platform.ErrorProtocol;
|
||||
@@ -42,6 +43,9 @@ public class WebSocketSignal {
|
||||
} catch (Exception e) {
|
||||
log.error("处理会话消息异常", e);
|
||||
final Message errorMessage = WebSocketSignal.errorProtocol.build();
|
||||
if(e instanceof MessageCodeException code) {
|
||||
errorMessage.setCode(code.getCode(), code.getMessage());
|
||||
}
|
||||
errorMessage.setBody(e.getMessage());
|
||||
this.push(session, errorMessage);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.acgist.taoyao.signal.event;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
@@ -86,4 +88,16 @@ public abstract class ApplicationEventAdapter extends ApplicationEvent {
|
||||
return t == null ? defaultValue : t;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 新的主体
|
||||
*/
|
||||
public Map<String, Object> mergeBody() {
|
||||
final Map<String, Object> body = new HashMap<>();
|
||||
if(this.body != null) {
|
||||
this.body.forEach((k, v) -> body.put(Objects.toString(k), v));
|
||||
}
|
||||
this.message.setBody(body);
|
||||
return body;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.acgist.taoyao.signal.event.media;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.acgist.taoyao.boot.model.Message;
|
||||
import com.acgist.taoyao.signal.client.ClientSession;
|
||||
import com.acgist.taoyao.signal.event.ApplicationEventAdapter;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 候选事件
|
||||
*
|
||||
* @author acgist
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class MediaCandidateEvent extends ApplicationEventAdapter {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public MediaCandidateEvent(String sn, Map<?, ?> body, Message message, ClientSession session) {
|
||||
super(sn, body, message, session);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 终端列表
|
||||
*/
|
||||
public List<String> getSns() {
|
||||
return this.get("sns");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.acgist.taoyao.signal.event.media;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.acgist.taoyao.boot.model.Message;
|
||||
import com.acgist.taoyao.signal.client.ClientSession;
|
||||
import com.acgist.taoyao.signal.event.ApplicationEventAdapter;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 发布事件
|
||||
*
|
||||
* @author acgist
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class MediaPublishEvent extends ApplicationEventAdapter {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public MediaPublishEvent(String sn, Map<?, ?> body, Message message, ClientSession session) {
|
||||
super(sn, body, message, session);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 终端标识(发布给谁)
|
||||
*/
|
||||
public String getTo() {
|
||||
return this.get("to");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -23,5 +23,12 @@ public class MediaSubscribeEvent extends ApplicationEventAdapter {
|
||||
public MediaSubscribeEvent(String sn, Map<?, ?> body, Message message, ClientSession session) {
|
||||
super(sn, body, message, session);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 终端标识(订阅的谁)
|
||||
*/
|
||||
public String getTo() {
|
||||
return this.get("to");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -99,7 +99,7 @@ public class ProtocolManager {
|
||||
final Protocol protocol = this.protocolMapping.get(pid);
|
||||
if(protocol == null) {
|
||||
log.warn("不支持的信令协议:{}", message);
|
||||
session.push(this.errorProtocol.build("不支持的信令协议"));
|
||||
session.push(this.errorProtocol.build("不支持的信令协议:" + pid));
|
||||
return;
|
||||
}
|
||||
if(protocol instanceof ClientRegisterProtocol) {
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.acgist.taoyao.signal.protocol.media;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.acgist.taoyao.boot.annotation.Protocol;
|
||||
import com.acgist.taoyao.boot.model.Message;
|
||||
import com.acgist.taoyao.signal.client.ClientSession;
|
||||
import com.acgist.taoyao.signal.event.media.MediaCandidateEvent;
|
||||
import com.acgist.taoyao.signal.protocol.ProtocolMapAdapter;
|
||||
|
||||
/**
|
||||
* 候选信令
|
||||
*
|
||||
* @author acgist
|
||||
*/
|
||||
@Protocol
|
||||
public class MediaCandidateProtocol extends ProtocolMapAdapter {
|
||||
|
||||
public static final Integer PID = 5004;
|
||||
|
||||
public MediaCandidateProtocol() {
|
||||
super(PID, "候选信令");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String sn, Map<?, ?> body, Message message, ClientSession session) {
|
||||
this.publishEvent(new MediaCandidateEvent(sn, body, message, session));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,30 @@
|
||||
package com.acgist.taoyao.signal.protocol.media;
|
||||
|
||||
public class MediaPublishProtocol {
|
||||
import java.util.Map;
|
||||
|
||||
}
|
||||
import com.acgist.taoyao.boot.annotation.Protocol;
|
||||
import com.acgist.taoyao.boot.model.Message;
|
||||
import com.acgist.taoyao.signal.client.ClientSession;
|
||||
import com.acgist.taoyao.signal.event.media.MediaPublishEvent;
|
||||
import com.acgist.taoyao.signal.protocol.ProtocolMapAdapter;
|
||||
|
||||
/**
|
||||
* 发布信令
|
||||
*
|
||||
* @author acgist
|
||||
*/
|
||||
@Protocol
|
||||
public class MediaPublishProtocol extends ProtocolMapAdapter {
|
||||
|
||||
public static final Integer PID = 5000;
|
||||
|
||||
public MediaPublishProtocol() {
|
||||
super(PID, "发布信令");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String sn, Map<?, ?> body, Message message, ClientSession session) {
|
||||
this.publishEvent(new MediaPublishEvent(sn, body, message, session));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.acgist.taoyao.signal.protocol.media;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.acgist.taoyao.boot.annotation.Protocol;
|
||||
import com.acgist.taoyao.boot.model.Message;
|
||||
import com.acgist.taoyao.signal.client.ClientSession;
|
||||
import com.acgist.taoyao.signal.event.media.MediaSubscribeEvent;
|
||||
@@ -12,6 +13,7 @@ import com.acgist.taoyao.signal.protocol.ProtocolMapAdapter;
|
||||
*
|
||||
* @author acgist
|
||||
*/
|
||||
@Protocol
|
||||
public class MediaSubscribeProtocol extends ProtocolMapAdapter {
|
||||
|
||||
public static final Integer PID = 5002;
|
||||
|
||||
Reference in New Issue
Block a user