[+] 房间状态查询、房间终端ID列表查询
This commit is contained in:
@@ -1281,6 +1281,8 @@ class Taoyao {
|
|||||||
/**
|
/**
|
||||||
* 消费数据信令
|
* 消费数据信令
|
||||||
*
|
*
|
||||||
|
* TODO:重复
|
||||||
|
*
|
||||||
* @param {*} message 消息
|
* @param {*} message 消息
|
||||||
* @param {*} body 消息主体
|
* @param {*} body 消息主体
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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": "房间名称",
|
"name": "房间名称",
|
||||||
"passowrd": "房间密码",
|
"passowrd": "房间密码",
|
||||||
"mediaId": "媒体服务标识",
|
"clientSize": "终端数量",
|
||||||
"clientSize": "终端数量"
|
"mediaClientId": "媒体服务标识"
|
||||||
},
|
},
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,10 +1,44 @@
|
|||||||
package com.acgist.taoyao.signal.protocol.room;
|
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
|
* @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