[+] 证书终端请求ID

This commit is contained in:
acgist
2023-02-28 08:01:25 +08:00
parent 4f6ae876d7
commit 57c09d3ff2
72 changed files with 874 additions and 501 deletions

View File

@@ -41,8 +41,6 @@ public class ClientStatus {
private Integer signal;
@Schema(title = "电池电量0~100", description = "电池电量0~100")
private Integer battery;
@Schema(title = "是否正在运行", description = "是否正在运行")
private Boolean running;
@Schema(title = "是否正在充电", description = "是否正在充电")
private Boolean charging;
@Schema(title = "是否正在录像", description = "是否正在录像")
@@ -66,7 +64,6 @@ public class ClientStatus {
this.setTemperature(MapUtils.get(body, Constant.TEMPERATURE));
this.setSignal(MapUtils.get(body, Constant.SIGNAL));
this.setBattery(MapUtils.get(body, Constant.BATTERY));
this.setRunning(MapUtils.get(body, Constant.RUNNING));
this.setCharging(MapUtils.get(body, Constant.CHARGING));
this.setRecording(MapUtils.get(body, Constant.RECORDING));
this.setLastHeartbeat(LocalDateTime.now());

View File

@@ -18,7 +18,7 @@ public enum ClientType {
OTHER("其他终端");
/**
* 名称
* 终端名称
*/
private final String name;

View File

@@ -49,7 +49,7 @@ public class ProtocolController {
"code": "状态编码",
"message": "状态描述",
"body": {
// 消息主体
...
}
}
```
@@ -57,10 +57,11 @@ public class ProtocolController {
### 符号解释
```
-[消息类型]> 异步请求 | 定向单播
-[消息类型]> 异步请求 | 单播
=[消息类型]> 同步请求
-[消息类型]) 全员广播:对所有的终端广播信令(排除自己)
+[消息类型]) 全员广播:对所有的终端广播信令(包含自己)
...:其他自定义的透传内容
```
> 没有指定消息类型时表示和信令消息类型相同
@@ -79,13 +80,9 @@ public class ProtocolController {
return;
}
// 信令名称
builder.append("### ").append(name).append("").append(signal).append("").append(Constant.LINE).append(Constant.LINE);
// 描述信息
final String memo = annotation.memo().strip();
if(StringUtils.isNotEmpty(memo)) {
builder.append(memo).append(Constant.LINE).append(Constant.LINE);
}
builder.append("```").append(Constant.LINE);
builder.append("### ").append(name).append("").append(signal).append("")
.append(Constant.LINE).append(Constant.LINE)
.append("```").append(Constant.LINE);
// 消息主体
builder.append("# 消息主体").append(Constant.LINE);
Stream.of(annotation.body()).forEach(line -> builder.append(line.strip()).append(Constant.LINE));
@@ -93,6 +90,11 @@ public class ProtocolController {
builder.append("# 数据流向").append(Constant.LINE);
Stream.of(annotation.flow()).forEach(line -> builder.append(line.strip()).append(Constant.LINE));
builder.append("```").append(Constant.LINE).append(Constant.LINE);
// 描述信息
final String memo = annotation.memo().strip();
if(StringUtils.isNotEmpty(memo)) {
builder.append(memo).append(Constant.LINE).append(Constant.LINE);
}
});
return builder.toString();
}

View File

@@ -9,9 +9,9 @@ import org.springframework.web.bind.annotation.RestController;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.ClientStatus;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.flute.media.RoomManager;
import com.acgist.taoyao.signal.flute.media.RoomStatus;
import com.acgist.taoyao.signal.party.media.Room;
import com.acgist.taoyao.signal.party.media.RoomManager;
import com.acgist.taoyao.signal.party.media.RoomStatus;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;

View File

@@ -1,7 +1,7 @@
package com.acgist.taoyao.signal.event;
import com.acgist.taoyao.signal.flute.media.Producer;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.party.media.Producer;
import com.acgist.taoyao.signal.party.media.Room;
import lombok.Getter;
import lombok.Setter;

View File

@@ -3,7 +3,7 @@ package com.acgist.taoyao.signal.event;
import java.util.Map;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.party.media.Room;
import lombok.Getter;

View File

@@ -1,4 +0,0 @@
/**
* 不同终端管理
*/
package com.acgist.taoyao.signal.flute;

View File

@@ -1,4 +1,4 @@
package com.acgist.taoyao.signal.flute.media;
package com.acgist.taoyao.signal.party.media;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -19,7 +19,7 @@ import lombok.Setter;
public class ClientWrapper {
/**
* 订阅类型
* 媒体订阅类型
*
* @author acgist
*/
@@ -71,7 +71,7 @@ public class ClientWrapper {
*/
private final String clientId;
/**
* 订阅类型
* 媒体订阅类型
* 指定订阅类型终端注册或者生成媒体后会自动进行媒体推流拉流
* 没有订阅任何媒体时需要用户自己对媒体进行消费控制
*/

View File

@@ -1,4 +1,4 @@
package com.acgist.taoyao.signal.flute.media;
package com.acgist.taoyao.signal.party.media;
import lombok.Getter;
import lombok.Setter;

View File

@@ -1,4 +1,4 @@
package com.acgist.taoyao.signal.flute.media;
package com.acgist.taoyao.signal.party.media;
import lombok.Getter;
import lombok.Setter;

View File

@@ -1,4 +1,4 @@
package com.acgist.taoyao.signal.flute.media;
package com.acgist.taoyao.signal.party.media;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

View File

@@ -1,4 +1,4 @@
package com.acgist.taoyao.signal.flute.media;
package com.acgist.taoyao.signal.party.media;
import com.acgist.taoyao.boot.model.MessageCodeException;

View File

@@ -1,4 +1,4 @@
package com.acgist.taoyao.signal.flute.media;
package com.acgist.taoyao.signal.party.media;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

View File

@@ -1,4 +1,4 @@
package com.acgist.taoyao.signal.flute.media;
package com.acgist.taoyao.signal.party.media;
import java.io.Closeable;
import java.util.List;
@@ -16,6 +16,7 @@ import lombok.extern.slf4j.Slf4j;
/**
* 房间
* 房间和媒体路由一对一关联
*
* @author acgist
*/

View File

@@ -1,4 +1,4 @@
package com.acgist.taoyao.signal.flute.media;
package com.acgist.taoyao.signal.party.media;
import java.util.List;
import java.util.Map;

View File

@@ -1,4 +1,4 @@
package com.acgist.taoyao.signal.flute.media;
package com.acgist.taoyao.signal.party.media;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;

View File

@@ -1,4 +1,4 @@
package com.acgist.taoyao.signal.flute.media;
package com.acgist.taoyao.signal.party.media;
import java.io.Closeable;
import java.util.Map;

View File

@@ -0,0 +1,4 @@
/**
* 不同终端业务管理
*/
package com.acgist.taoyao.signal.party;

View File

@@ -1,5 +1,8 @@
package com.acgist.taoyao.signal.protocol;
import java.util.Map;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
@@ -10,7 +13,7 @@ import com.acgist.taoyao.boot.model.MessageCode;
import com.acgist.taoyao.boot.service.IdService;
import com.acgist.taoyao.signal.client.ClientManager;
import com.acgist.taoyao.signal.event.ApplicationEventAdapter;
import com.acgist.taoyao.signal.flute.media.RoomManager;
import com.acgist.taoyao.signal.party.media.RoomManager;
import lombok.extern.slf4j.Slf4j;
@@ -109,17 +112,34 @@ public abstract class ProtocolAdapter implements Protocol {
return build;
}
/**
* 精简消息主体
*
* @param body 消息主体
* @param keys 清理键
*/
protected void pure(Map<String, Object> body, String ... keys) {
if(ArrayUtils.isEmpty(keys)) {
return;
}
for (String key : keys) {
body.remove(key);
}
}
/**
* @param args 参数
*/
protected void logNoAdapter(Object ... args) {
final StringBuilder builder = new StringBuilder(this.name);
builder.append("没有适配信令消息:");
for (final Object object : args) {
builder.append(object).append(" ");
}
builder.setLength(builder.length() - 1);
log.debug(builder.toString());
if(log.isDebugEnabled()) {
final StringBuilder builder = new StringBuilder(this.name);
builder.append("没有适配信令消息:");
for (final Object object : args) {
builder.append(object).append(" ");
}
builder.setLength(builder.length() - 1);
log.debug(builder.toString());
}
}
}

View File

@@ -19,7 +19,7 @@ public abstract class ProtocolClientAdapter extends ProtocolAdapter {
@Override
public void execute(Client client, Message message) {
this.execute(client.clientId(), client.clientType(), client, message, message.mapBody());
this.execute(client.clientId(), client.clientType(), client, message, message.body());
}
/**

View File

@@ -8,7 +8,7 @@ import com.acgist.taoyao.boot.model.MessageCodeException;
import com.acgist.taoyao.boot.utils.MapUtils;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.party.media.Room;
/**
* 房间信令适配器

View File

@@ -24,10 +24,12 @@ import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter;
"""
{
"clientType": "终端类型(可选)"
...
}
"""
},
flow = "终端->信令服务-)终端"
flow = "终端->信令服务-)终端",
memo = "没有指定终端类型时广播所有类型终端"
)
public class ClientBroadcastProtocol extends ProtocolClientAdapter {

View File

@@ -25,7 +25,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter;
"temperature": 温度,
"signal": 信号强度0~100,
"battery": 电池电量0~100,
"running": 是否正在运行true|false,
"charging": 是否正在充电true|false,
"recording": 是否正在录像true|false,
"status": {更多状态},

View File

@@ -36,7 +36,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter;
"temperature": 温度,
"signal": 信号强度0~100,
"battery": 电池电量0~100,
"running": 是否正在运行true|false,
"charging": 是否正在充电true|false,
"recording": 是否正在录像true|false,
"status": {更多状态},

View File

@@ -23,7 +23,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter;
"temperature": 温度,
"signal": 信号强度0~100,
"battery": 电池电量0~100,
"running": 是否正在运行true|false,
"charging": 是否正在充电true|false,
"recording": 是否正在录像true|false,
"status": {更多状态},

View File

@@ -40,7 +40,6 @@ import lombok.extern.slf4j.Slf4j;
"temperature": 温度,
"signal": 信号强度0~100,
"battery": 电池电量0~100,
"running": 是否正在运行true|false,
"charging": 是否正在充电true|false,
"recording": 是否正在录像true|false,
"status": {更多状态},
@@ -87,7 +86,9 @@ public class ClientRegisterProtocol extends ProtocolClientAdapter {
}
final ClientType clientType = ClientType.of(MapUtils.get(body, Constant.CLIENT_TYPE));
// 推送消息
client.push(message.cloneWithoutBody());
final Message registerResponse = message.cloneWithoutBody();
registerResponse.setBody(Map.of(Constant.INDEX, this.idService.buildClientIndex()));
client.push(registerResponse);
// 下发配置
client.push(this.clientConfigProtocol.build(clientType));
// 终端状态

View File

@@ -16,11 +16,11 @@ import com.acgist.taoyao.signal.protocol.ProtocolControlAdapter;
*/
@Protocol
@Description(
memo = "状态通过心跳回传",
flow = {
"信令服务->终端",
"终端->信令服务->终端"
}
},
memo = "状态通过心跳回传"
)
public class ControlRecordProtocol extends ProtocolControlAdapter {

View File

@@ -6,7 +6,7 @@ import com.acgist.taoyao.boot.annotation.Protocol;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.party.media.Room;
import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
/**

View File

@@ -14,11 +14,11 @@ import com.acgist.taoyao.boot.utils.MapUtils;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
import com.acgist.taoyao.signal.event.MediaProduceEvent;
import com.acgist.taoyao.signal.flute.media.ClientWrapper;
import com.acgist.taoyao.signal.flute.media.Consumer;
import com.acgist.taoyao.signal.flute.media.Producer;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.flute.media.Transport;
import com.acgist.taoyao.signal.party.media.ClientWrapper;
import com.acgist.taoyao.signal.party.media.Consumer;
import com.acgist.taoyao.signal.party.media.Producer;
import com.acgist.taoyao.signal.party.media.Room;
import com.acgist.taoyao.signal.party.media.Transport;
import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
import lombok.extern.slf4j.Slf4j;

View File

@@ -0,0 +1,10 @@
package com.acgist.taoyao.signal.protocol.media;
/**
* RTP
*
* @author acgist
*/
public class MediaPlainCreateProtocol {
}

View File

@@ -10,9 +10,9 @@ import com.acgist.taoyao.boot.utils.MapUtils;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
import com.acgist.taoyao.signal.event.MediaProduceEvent;
import com.acgist.taoyao.signal.flute.media.ClientWrapper;
import com.acgist.taoyao.signal.flute.media.Producer;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.party.media.ClientWrapper;
import com.acgist.taoyao.signal.party.media.Producer;
import com.acgist.taoyao.signal.party.media.Room;
import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
import lombok.extern.slf4j.Slf4j;
@@ -53,7 +53,7 @@ public class MediaProduceProtocol extends ProtocolRoomAdapter {
body.put(Constant.CLIENT_ID, clientId);
body.put(Constant.STREAM_ID, streamId);
final Message response = room.request(message);
final Map<String, Object> responseBody = response.mapBody();
final Map<String, Object> responseBody = response.body();
final String producerId = MapUtils.get(responseBody, Constant.PRODUCER_ID);
final ClientWrapper clientWrapper = room.clientWrapper(client);
final Map<String, Producer> producers = clientWrapper.getProducers();

View File

@@ -7,7 +7,7 @@ import com.acgist.taoyao.boot.annotation.Protocol;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.party.media.Room;
import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
/**

View File

@@ -7,7 +7,7 @@ import com.acgist.taoyao.boot.annotation.Protocol;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.party.media.Room;
import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
/**

View File

@@ -9,7 +9,7 @@ import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.boot.utils.MapUtils;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.party.media.Room;
import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
import lombok.extern.slf4j.Slf4j;
@@ -40,7 +40,7 @@ public class MediaTransportWebRtcConnectProtocol extends ProtocolRoomAdapter {
public void execute(String clientId, ClientType clientType, Room room, Client client, Client mediaClient, Message message, Map<String, Object> body) {
if(clientType == ClientType.WEB || clientType == ClientType.CAMERA) {
final Message response = room.request(message);
final Map<String, Object> responseBody = response.mapBody();
final Map<String, Object> responseBody = response.body();
client.push(response);
final String transportId = MapUtils.get(responseBody, Constant.TRANSPORT_ID);
log.info("{} 连接WebRTC信令通道{}", clientId, transportId);

View File

@@ -15,9 +15,9 @@ import com.acgist.taoyao.boot.utils.NetUtils;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
import com.acgist.taoyao.signal.event.MediaProduceEvent;
import com.acgist.taoyao.signal.flute.media.ClientWrapper;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.flute.media.Transport;
import com.acgist.taoyao.signal.party.media.ClientWrapper;
import com.acgist.taoyao.signal.party.media.Room;
import com.acgist.taoyao.signal.party.media.Transport;
import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
import lombok.extern.slf4j.Slf4j;
@@ -59,7 +59,7 @@ public class MediaTransportWebRtcCreateProtocol extends ProtocolRoomAdapter {
public void execute(String clientId, ClientType clientType, Room room, Client client, Client mediaClient, Message message, Map<String, Object> body) {
body.put(Constant.CLIENT_ID, clientId);
final Message response = room.request(message);
final Map<String, Object> responseBody = response.mapBody();
final Map<String, Object> responseBody = response.body();
final String transportId = MapUtils.get(responseBody, Constant.TRANSPORT_ID);
// 重写地址
this.rewriteIp(client.ip(), responseBody);

View File

@@ -7,7 +7,7 @@ import com.acgist.taoyao.boot.annotation.Protocol;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.party.media.Room;
import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
/**

View File

@@ -7,7 +7,7 @@ import com.acgist.taoyao.boot.annotation.Protocol;
import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.party.media.Room;
import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
/**

View File

@@ -13,7 +13,7 @@ import com.acgist.taoyao.boot.utils.MapUtils;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
import com.acgist.taoyao.signal.event.MediaClientRegisterEvent;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.party.media.Room;
import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter;
import lombok.extern.slf4j.Slf4j;

View File

@@ -11,9 +11,9 @@ import com.acgist.taoyao.boot.model.MessageCodeException;
import com.acgist.taoyao.boot.utils.MapUtils;
import com.acgist.taoyao.signal.client.Client;
import com.acgist.taoyao.signal.client.ClientType;
import com.acgist.taoyao.signal.flute.media.ClientWrapper;
import com.acgist.taoyao.signal.flute.media.ClientWrapper.SubscribeType;
import com.acgist.taoyao.signal.flute.media.Room;
import com.acgist.taoyao.signal.party.media.ClientWrapper;
import com.acgist.taoyao.signal.party.media.Room;
import com.acgist.taoyao.signal.party.media.ClientWrapper.SubscribeType;
import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
import lombok.extern.slf4j.Slf4j;