[*] 控制信令结构优化

This commit is contained in:
acgist
2023-06-11 09:41:22 +08:00
parent 32760ae14b
commit ead1dd8b99
14 changed files with 150 additions and 66 deletions

View File

@@ -9,12 +9,12 @@ import org.springframework.web.bind.annotation.RestController;
import com.acgist.taoyao.boot.config.MediaAudioProperties; import com.acgist.taoyao.boot.config.MediaAudioProperties;
import com.acgist.taoyao.boot.config.MediaVideoProperties; import com.acgist.taoyao.boot.config.MediaVideoProperties;
import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.signal.protocol.control.ControlBellProtocol; import com.acgist.taoyao.signal.protocol.control.IControlBellProtocol;
import com.acgist.taoyao.signal.protocol.control.ControlClientRecordProtocol; import com.acgist.taoyao.signal.protocol.control.IControlClientRecordProtocol;
import com.acgist.taoyao.signal.protocol.control.ControlConfigAudioProtocol; import com.acgist.taoyao.signal.protocol.control.IControlConfigAudioProtocol;
import com.acgist.taoyao.signal.protocol.control.ControlConfigVideoProtocol; import com.acgist.taoyao.signal.protocol.control.IControlConfigVideoProtocol;
import com.acgist.taoyao.signal.protocol.control.ControlPhotographProtocol; import com.acgist.taoyao.signal.protocol.control.IControlPhotographProtocol;
import com.acgist.taoyao.signal.protocol.control.ControlServerRecordProtocol; import com.acgist.taoyao.signal.protocol.control.IControlServerRecordProtocol;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@@ -34,12 +34,12 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
public class ControlController { public class ControlController {
private final ControlBellProtocol controlBellProtocol; private final IControlBellProtocol controlBellProtocol;
private final ControlPhotographProtocol controlPhotographProtocol; private final IControlPhotographProtocol controlPhotographProtocol;
private final ControlConfigAudioProtocol controlConfigAudioProtocol; private final IControlConfigAudioProtocol controlConfigAudioProtocol;
private final ControlConfigVideoProtocol controlConfigVideoProtocol; private final IControlConfigVideoProtocol controlConfigVideoProtocol;
private final ControlClientRecordProtocol controlClientRecordProtocol; private final IControlClientRecordProtocol controlClientRecordProtocol;
private final ControlServerRecordProtocol controlServerRecordProtocol; private final IControlServerRecordProtocol controlServerRecordProtocol;
@Operation(summary = "响铃", description = "响铃控制") @Operation(summary = "响铃", description = "响铃控制")
@GetMapping("/bell/{clientId}") @GetMapping("/bell/{clientId}")

View File

@@ -2,9 +2,6 @@ package com.acgist.taoyao.signal.protocol;
import java.util.Map; import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.task.TaskExecutor;
import com.acgist.taoyao.boot.config.Constant; import com.acgist.taoyao.boot.config.Constant;
import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.boot.model.Message;
import com.acgist.taoyao.boot.model.MessageCodeException; import com.acgist.taoyao.boot.model.MessageCodeException;
@@ -19,9 +16,6 @@ import com.acgist.taoyao.signal.client.ClientType;
*/ */
public abstract class ProtocolControlAdapter extends ProtocolClientAdapter { public abstract class ProtocolControlAdapter extends ProtocolClientAdapter {
@Autowired
protected TaskExecutor taskExecutor;
protected ProtocolControlAdapter(String name, String signal) { protected ProtocolControlAdapter(String name, String signal) {
super(name, signal); super(name, signal);
} }

View File

@@ -28,7 +28,7 @@ import com.acgist.taoyao.signal.protocol.ProtocolControlAdapter;
"终端->信令服务->终端" "终端->信令服务->终端"
} }
) )
public class ControlBellProtocol extends ProtocolControlAdapter { public class ControlBellProtocol extends ProtocolControlAdapter implements IControlBellProtocol {
private static final String SIGNAL = "control::bell"; private static final String SIGNAL = "control::bell";
@@ -41,12 +41,7 @@ public class ControlBellProtocol extends ProtocolControlAdapter {
client.push(targetClient.request(message)); client.push(targetClient.request(message));
} }
/** @Override
* @param clientId 终端ID
* @param enabled 状态
*
* @return 执行结果
*/
public Message execute(String clientId, Boolean enabled) { public Message execute(String clientId, Boolean enabled) {
return this.request(clientId, this.build(Map.of(Constant.ENABLED, enabled))); return this.request(clientId, this.build(Map.of(Constant.ENABLED, enabled)));
} }

View File

@@ -37,7 +37,7 @@ import com.acgist.taoyao.signal.protocol.ProtocolControlAdapter;
"终端=>信令服务->目标终端->信令服务->终端" "终端=>信令服务->目标终端->信令服务->终端"
} }
) )
public class ControlClientRecordProtocol extends ProtocolControlAdapter { public class ControlClientRecordProtocol extends ProtocolControlAdapter implements IControlClientRecordProtocol {
public static final String SIGNAL = "control::client::record"; public static final String SIGNAL = "control::client::record";
@@ -51,12 +51,7 @@ public class ControlClientRecordProtocol extends ProtocolControlAdapter {
client.push(targetClient.request(message)); client.push(targetClient.request(message));
} }
/** @Override
* @param clientId 终端ID
* @param enabled 状态
*
* @return 执行结果
*/
public Message execute(String clientId, Boolean enabled) { public Message execute(String clientId, Boolean enabled) {
this.updateRecordStatus(this.clientManager.clients(clientId), enabled); this.updateRecordStatus(this.clientManager.clients(clientId), enabled);
return this.request(clientId, this.build(Map.of(Constant.ENABLED, enabled))); return this.request(clientId, this.build(Map.of(Constant.ENABLED, enabled)));

View File

@@ -29,7 +29,7 @@ import com.acgist.taoyao.signal.protocol.ProtocolControlAdapter;
"终端=>信令服务->终端" "终端=>信令服务->终端"
} }
) )
public class ControlConfigAudioProtocol extends ProtocolControlAdapter { public class ControlConfigAudioProtocol extends ProtocolControlAdapter implements IControlConfigAudioProtocol {
public static final String SIGNAL = "control::config::audio"; public static final String SIGNAL = "control::config::audio";
@@ -42,12 +42,7 @@ public class ControlConfigAudioProtocol extends ProtocolControlAdapter {
client.push(targetClient.request(message)); client.push(targetClient.request(message));
} }
/** @Override
* @param clientId 终端ID
* @param mediaAudioProperties 音频配置
*
* @return 执行结果
*/
public Message execute(String clientId, MediaAudioProperties mediaAudioProperties) { public Message execute(String clientId, MediaAudioProperties mediaAudioProperties) {
return this.request(clientId, this.build(mediaAudioProperties)); return this.request(clientId, this.build(mediaAudioProperties));
} }

View File

@@ -29,7 +29,7 @@ import com.acgist.taoyao.signal.protocol.ProtocolControlAdapter;
"终端=>信令服务->终端" "终端=>信令服务->终端"
} }
) )
public class ControlConfigVideoProtocol extends ProtocolControlAdapter { public class ControlConfigVideoProtocol extends ProtocolControlAdapter implements IControlConfigVideoProtocol {
public static final String SIGNAL = "control::config::video"; public static final String SIGNAL = "control::config::video";
@@ -42,12 +42,7 @@ public class ControlConfigVideoProtocol extends ProtocolControlAdapter {
client.push(targetClient.request(message)); client.push(targetClient.request(message));
} }
/** @Override
* @param clientId 终端ID
* @param mediaVideoProperties 视频配置
*
* @return 执行结果
*/
public Message execute(String clientId, MediaVideoProperties mediaVideoProperties) { public Message execute(String clientId, MediaVideoProperties mediaVideoProperties) {
return this.request(clientId, this.build(mediaVideoProperties)); return this.request(clientId, this.build(mediaVideoProperties));
} }

View File

@@ -33,7 +33,7 @@ import com.acgist.taoyao.signal.protocol.ProtocolControlAdapter;
"终端=>信令服务->目标终端->信令服务->终端" "终端=>信令服务->目标终端->信令服务->终端"
} }
) )
public class ControlPhotographProtocol extends ProtocolControlAdapter { public class ControlPhotographProtocol extends ProtocolControlAdapter implements IControlPhotographProtocol {
public static final String SIGNAL = "control::photograph"; public static final String SIGNAL = "control::photograph";
@@ -46,11 +46,7 @@ public class ControlPhotographProtocol extends ProtocolControlAdapter {
client.push(targetClient.request(message)); client.push(targetClient.request(message));
} }
/** @Override
* @param clientId 终端标识
*
* @return 执行结果
*/
public Message execute(String clientId) { public Message execute(String clientId) {
return this.request(clientId, this.build()); return this.request(clientId, this.build());
} }

View File

@@ -5,6 +5,7 @@ import java.util.Map;
import java.util.UUID; import java.util.UUID;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Async;
import com.acgist.taoyao.boot.annotation.Description; import com.acgist.taoyao.boot.annotation.Description;
import com.acgist.taoyao.boot.annotation.Protocol; import com.acgist.taoyao.boot.annotation.Protocol;
@@ -48,7 +49,7 @@ import com.acgist.taoyao.signal.protocol.ProtocolControlAdapter;
}, },
flow = "终端=>信令服务->终端" flow = "终端=>信令服务->终端"
) )
public class ControlServerRecordProtocol extends ProtocolControlAdapter implements ApplicationListener<RecorderCloseEvent> { public class ControlServerRecordProtocol extends ProtocolControlAdapter implements ApplicationListener<RecorderCloseEvent>, IControlServerRecordProtocol {
public static final String SIGNAL = "control::server::record"; public static final String SIGNAL = "control::server::record";
@@ -59,14 +60,11 @@ public class ControlServerRecordProtocol extends ProtocolControlAdapter implemen
this.ffmpegProperties = ffmpegProperties; this.ffmpegProperties = ffmpegProperties;
} }
// @Async @Async
@Override @Override
public void onApplicationEvent(RecorderCloseEvent event) { public void onApplicationEvent(RecorderCloseEvent event) {
// 没有提供接口不能使用注解异步执行
this.taskExecutor.execute(() -> {
final Recorder recorder = event.getRecorder(); final Recorder recorder = event.getRecorder();
this.stop(recorder.getRoom(), recorder.getClientWrapper()); this.stop(recorder.getRoom(), recorder.getClientWrapper());
});
} }
@Override @Override
@@ -85,13 +83,7 @@ public class ControlServerRecordProtocol extends ProtocolControlAdapter implemen
client.push(message); client.push(message);
} }
/** @Override
* @param roomId 房间ID
* @param clientId 终端ID
* @param enabled 状态
*
* @return 执行结果
*/
public Message execute(String roomId, String clientId, Boolean enabled) { public Message execute(String roomId, String clientId, Boolean enabled) {
String filepath; String filepath;
final Room room = this.roomManager.room(roomId); final Room room = this.roomManager.room(roomId);

View File

@@ -0,0 +1,20 @@
package com.acgist.taoyao.signal.protocol.control;
import com.acgist.taoyao.boot.model.Message;
/**
* 响铃信令接口
*
* @author acgist
*/
public interface IControlBellProtocol {
/**
* @param clientId 终端ID
* @param enabled 状态
*
* @return 执行结果
*/
Message execute(String clientId, Boolean enabled);
}

View File

@@ -0,0 +1,20 @@
package com.acgist.taoyao.signal.protocol.control;
import com.acgist.taoyao.boot.model.Message;
/**
* 终端录像信令接口
*
* @author acgist
*/
public interface IControlClientRecordProtocol {
/**
* @param clientId 终端ID
* @param enabled 状态
*
* @return 执行结果
*/
Message execute(String clientId, Boolean enabled);
}

View File

@@ -0,0 +1,21 @@
package com.acgist.taoyao.signal.protocol.control;
import com.acgist.taoyao.boot.config.MediaAudioProperties;
import com.acgist.taoyao.boot.model.Message;
/**
* 配置音频信令
*
* @author acgist
*/
public interface IControlConfigAudioProtocol {
/**
* @param clientId 终端ID
* @param mediaAudioProperties 音频配置
*
* @return 执行结果
*/
Message execute(String clientId, MediaAudioProperties mediaAudioProperties);
}

View File

@@ -0,0 +1,21 @@
package com.acgist.taoyao.signal.protocol.control;
import com.acgist.taoyao.boot.config.MediaVideoProperties;
import com.acgist.taoyao.boot.model.Message;
/**
* 配置视频信令接口
*
* @author acgist
*/
public interface IControlConfigVideoProtocol {
/**
* @param clientId 终端ID
* @param mediaVideoProperties 视频配置
*
* @return 执行结果
*/
Message execute(String clientId, MediaVideoProperties mediaVideoProperties);
}

View File

@@ -0,0 +1,19 @@
package com.acgist.taoyao.signal.protocol.control;
import com.acgist.taoyao.boot.model.Message;
/**
* 拍照信令接口
*
* @author acgist
*/
public interface IControlPhotographProtocol {
/**
* @param clientId 终端标识
*
* @return 执行结果
*/
Message execute(String clientId);
}

View File

@@ -0,0 +1,21 @@
package com.acgist.taoyao.signal.protocol.control;
import com.acgist.taoyao.boot.model.Message;
/**
* 服务端录像信令接口
*
* @author acgist
*/
public interface IControlServerRecordProtocol {
/**
* @param roomId 房间ID
* @param clientId 终端ID
* @param enabled 状态
*
* @return 执行结果
*/
Message execute(String roomId, String clientId, Boolean enabled);
}