From 1235d133331f44cf45895d8b8937507352075fed Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Mon, 3 Jul 2023 07:30:24 +0800 Subject: [PATCH] =?UTF-8?q?[+]=20=E6=88=BF=E9=97=B4=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E3=80=81=E6=88=BF=E9=97=B4=E7=BB=88=E7=AB=AF?= =?UTF-8?q?ID=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- taoyao-client-media/src/Taoyao.js | 2 + .../signal/party/media/RoomClientId.java | 36 +++++++++ .../room/RoomClientListIdProtocol.java | 76 +++++++++++++++++++ .../protocol/room/RoomListProtocol.java | 4 +- .../protocol/room/RoomStatusProtocol.java | 36 ++++++++- .../protocol/room/RoomSubscribeProtocol.java | 10 --- .../room/RoomUnsubscribeProtocol.java | 10 --- 7 files changed, 151 insertions(+), 23 deletions(-) create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/party/media/RoomClientId.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomClientListIdProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomSubscribeProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomUnsubscribeProtocol.java diff --git a/taoyao-client-media/src/Taoyao.js b/taoyao-client-media/src/Taoyao.js index 2bb9499..9b1438b 100644 --- a/taoyao-client-media/src/Taoyao.js +++ b/taoyao-client-media/src/Taoyao.js @@ -1281,6 +1281,8 @@ class Taoyao { /** * 消费数据信令 * + * TODO:重复 + * * @param {*} message 消息 * @param {*} body 消息主体 */ diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/party/media/RoomClientId.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/party/media/RoomClientId.java new file mode 100644 index 0000000..65e7dad --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/party/media/RoomClientId.java @@ -0,0 +1,36 @@ +package com.acgist.taoyao.signal.party.media; + +import java.util.List; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +/** + * 房间终端ID + * + * @author acgist + */ +@Getter +@Setter +@Schema(title = "房间终端ID", description = "房间终端ID") +public class RoomClientId { + + @Schema(title = "房间ID", description = "房间ID") + private String roomId; + @Schema(title = "终端ID", description = "终端ID") + private String clientId; + @Schema(title = "数据生产者ID", description = "数据生产者ID") + private List dataProducers; + @Schema(title = "数据消费者ID", description = "数据消费者ID") + private List dataConsumers; + @Schema(title = "音频生产者ID", description = "音频生产者ID") + private List audioProducers; + @Schema(title = "视频生产者ID", description = "视频生产者ID") + private List videoProducers; + @Schema(title = "音频消费者ID", description = "音频消费者ID") + private List audioConsumers; + @Schema(title = "视频消费者ID", description = "视频消费者ID") + private List videoConsumers; + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomClientListIdProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomClientListIdProtocol.java new file mode 100644 index 0000000..d098675 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomClientListIdProtocol.java @@ -0,0 +1,76 @@ +package com.acgist.taoyao.signal.protocol.room; + +import java.util.Map; + +import com.acgist.taoyao.boot.annotation.Description; +import com.acgist.taoyao.boot.annotation.Protocol; +import com.acgist.taoyao.boot.config.Constant; +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.party.media.ClientWrapper; +import com.acgist.taoyao.signal.party.media.Consumer; +import com.acgist.taoyao.signal.party.media.Kind; +import com.acgist.taoyao.signal.party.media.Producer; +import com.acgist.taoyao.signal.party.media.Room; +import com.acgist.taoyao.signal.party.media.RoomClientId; +import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter; + +/** + * 房间终端ID信令 + * + * @author acgist + */ +@Protocol +@Description( + body = """ + { + "roomId": "房间ID", + "clientId": "终端ID(可选)" + } + { + ... + } + """, + flow = "终端=>信令服务->终端", + memo = "终端所有ID集合:消费者、生产者等等" +) +public class RoomClientListIdProtocol extends ProtocolRoomAdapter { + + public static final String SIGNAL = "room::client::list::id"; + + public RoomClientListIdProtocol() { + super("房间终端ID信令", SIGNAL); + } + + @Override + public void execute(String clientId, ClientType clientType, Room room, Client client, Client mediaClient, Message message, Map body) { + final String queryClientId = MapUtils.get(body, Constant.CLIENT_ID, clientId); + final ClientWrapper clientWrapper = room.clientWrapper(queryClientId); + final RoomClientId roomClientId = new RoomClientId(); + roomClientId.setRoomId(room.getRoomId()); + roomClientId.setClientId(queryClientId); + clientWrapper.getDataProducers().keySet().forEach(roomClientId.getDataProducers()::add); + clientWrapper.getDataConsumers().keySet().forEach(roomClientId.getDataConsumers()::add); + clientWrapper.getProducers().values().stream() + .filter(v -> v.getKind() == Kind.AUDIO) + .map(Producer::getProducerId) + .forEach(roomClientId.getAudioProducers()::add); + clientWrapper.getProducers().values().stream() + .filter(v -> v.getKind() == Kind.VIDEO) + .map(Producer::getProducerId) + .forEach(roomClientId.getVideoProducers()::add); + clientWrapper.getConsumers().values().stream() + .filter(v -> v.getKind() == Kind.AUDIO) + .map(Consumer::getConsumerId) + .forEach(roomClientId.getAudioConsumers()::add); + clientWrapper.getConsumers().values().stream() + .filter(v -> v.getKind() == Kind.VIDEO) + .map(Consumer::getConsumerId) + .forEach(roomClientId.getVideoConsumers()::add); + message.setBody(roomClientId); + client.push(message); + } + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomListProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomListProtocol.java index 312d3fc..a7a378a 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomListProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomListProtocol.java @@ -21,8 +21,8 @@ import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter; { "name": "房间名称", "passowrd": "房间密码", - "mediaId": "媒体服务标识", - "clientSize": "终端数量" + "clientSize": "终端数量", + "mediaClientId": "媒体服务标识" }, ... ] diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomStatusProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomStatusProtocol.java index 79adafd..6eb165b 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomStatusProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomStatusProtocol.java @@ -1,10 +1,44 @@ package com.acgist.taoyao.signal.protocol.room; +import java.util.Map; + +import com.acgist.taoyao.boot.annotation.Description; +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.party.media.Room; +import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter; + /** * 房间状态信令 * * @author acgist */ -public class RoomStatusProtocol { +@Protocol +@Description( + body = """ + { + "name" : "房间名称", + "passowrd" : "房间密码", + "clientSize" : "终端数量", + "mediaClientId": "媒体服务标识" + } + """, + flow = "终端=>信令服务->终端" +) +public class RoomStatusProtocol extends ProtocolRoomAdapter { + public static final String SIGNAL = "room::status"; + + public RoomStatusProtocol() { + super("房间状态信令", SIGNAL); + } + + @Override + public void execute(String clientId, ClientType clientType, Room room, Client client, Client mediaClient, Message message, Map body) { + message.setBody(room.getRoomStatus()); + client.push(message); + } + } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomSubscribeProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomSubscribeProtocol.java deleted file mode 100644 index 5ee53a4..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomSubscribeProtocol.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.acgist.taoyao.signal.protocol.room; - -/** - * 房间订阅信令 - * - * @author acgist - */ -public class RoomSubscribeProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomUnsubscribeProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomUnsubscribeProtocol.java deleted file mode 100644 index 12ea814..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomUnsubscribeProtocol.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.acgist.taoyao.signal.protocol.room; - -/** - * 房间取消订阅信令 - * - * @author acgist - */ -public class RoomUnsubscribeProtocol { - -}