[+] 房间状态查询、房间终端ID列表查询

This commit is contained in:
acgist
2023-07-03 07:30:24 +08:00
parent 6570ef4ae0
commit 1235d13333
7 changed files with 151 additions and 23 deletions

View File

@@ -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<String> dataProducers;
@Schema(title = "数据消费者ID", description = "数据消费者ID")
private List<String> dataConsumers;
@Schema(title = "音频生产者ID", description = "音频生产者ID")
private List<String> audioProducers;
@Schema(title = "视频生产者ID", description = "视频生产者ID")
private List<String> videoProducers;
@Schema(title = "音频消费者ID", description = "音频消费者ID")
private List<String> audioConsumers;
@Schema(title = "视频消费者ID", description = "视频消费者ID")
private List<String> videoConsumers;
}

View File

@@ -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<String, Object> 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);
}
}

View File

@@ -21,8 +21,8 @@ import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter;
{
"name": "房间名称",
"passowrd": "房间密码",
"mediaId": "媒体服务标识",
"clientSize": "终端数量"
"clientSize": "终端数量",
"mediaClientId": "媒体服务标识"
},
...
]

View File

@@ -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<String, Object> body) {
message.setBody(room.getRoomStatus());
client.push(message);
}
}

View File

@@ -1,10 +0,0 @@
package com.acgist.taoyao.signal.protocol.room;
/**
* 房间订阅信令
*
* @author acgist
*/
public class RoomSubscribeProtocol {
}

View File

@@ -1,10 +0,0 @@
package com.acgist.taoyao.signal.protocol.room;
/**
* 房间取消订阅信令
*
* @author acgist
*/
public class RoomUnsubscribeProtocol {
}