[+] 房间状态查询、房间终端ID列表查询
This commit is contained in:
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -21,8 +21,8 @@ import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter;
|
||||
{
|
||||
"name": "房间名称",
|
||||
"passowrd": "房间密码",
|
||||
"mediaId": "媒体服务标识",
|
||||
"clientSize": "终端数量"
|
||||
"clientSize": "终端数量",
|
||||
"mediaClientId": "媒体服务标识"
|
||||
},
|
||||
...
|
||||
]
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
package com.acgist.taoyao.signal.protocol.room;
|
||||
|
||||
/**
|
||||
* 房间订阅信令
|
||||
*
|
||||
* @author acgist
|
||||
*/
|
||||
public class RoomSubscribeProtocol {
|
||||
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
package com.acgist.taoyao.signal.protocol.room;
|
||||
|
||||
/**
|
||||
* 房间取消订阅信令
|
||||
*
|
||||
* @author acgist
|
||||
*/
|
||||
public class RoomUnsubscribeProtocol {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user