[*] 日常优化

This commit is contained in:
acgist
2023-07-31 08:13:48 +08:00
parent 2784eb6b9b
commit 42e00e1c0b
10 changed files with 210 additions and 97 deletions

View File

@@ -789,6 +789,15 @@ class Taoyao extends RemoteClient {
case "client::shutdown": case "client::shutdown":
me.defaultClientShutdown(message); me.defaultClientShutdown(message);
break; break;
case "client::unicast":
me.defaultClientUnicast(message);
break;
case "control::bell":
me.defaultControlBell(message);
break;
case "control::wakeup":
me.defaultControlWakeup(message);
break;
case "media::audio::volume": case "media::audio::volume":
me.defaultMediaAudioVolume(message); me.defaultMediaAudioVolume(message);
break; break;
@@ -1175,6 +1184,86 @@ class Taoyao extends RemoteClient {
window.close(); window.close();
} }
/**
* 终端状态信令
*
* @param {*} clientId 终端ID
*
* @returns 终端状态
*/
async clientStatus(clientId) {
const response = await this.request(protocol.buildMessage("client::status", {
clientId
}));
return response.body;
}
/**
* 终端单播信令
*
* @param {*} clientId 接收终端ID
* @param {*} message 消息内容
*/
clientUnicast(clientId, message) {
this.push(protocol.buildMessage("client::unicast", {
...message,
to: clientId
}));
}
/**
* 终端单播信令
*
* @param {*} message 信令消息
*/
defaultClientUnicast(message) {
console.debug("终端单播消息", message);
}
/**
* 响铃信令
*
* @param {*} clientId 目标终端ID
* @param {*} enabled 是否响铃
*/
ControlBell(clientId, enabled) {
this.request(protocol.buildMessage("control::bell", {
enabled,
to: clientId,
}));
}
/**
* 响铃信令
*
* @param {*} message 信令消息
*/
defaultControlBell(message) {
console.debug("响铃", message);
this.push(message);
}
/**
* 终端唤醒信令
*
* @param {*} clientId 目标终端ID
*/
controlWakeup(clientId) {
this.request(protocol.buildMessage("control::wakeup", {
to: clientId
}));
}
/**
* 终端唤醒信令
*
* @param {*} message 信令消息
*/
defaultControlWakeup(message) {
console.debug("终端唤醒", message);
this.push(message);
}
/** /**
* 拍照 * 拍照
* *
@@ -2151,18 +2240,6 @@ class Taoyao extends RemoteClient {
return response.body; return response.body;
} }
/**
* @param {*} clientId 终端ID
*
* @returns 终端状态
*/
async clientStatus(clientId) {
const response = await this.request(
protocol.buildMessage("client::status", { clientId })
);
return response.body;
}
/** /**
* 生产媒体 * 生产媒体
* *

View File

@@ -15,6 +15,7 @@ import com.acgist.taoyao.signal.protocol.control.IControlConfigAudioProtocol;
import com.acgist.taoyao.signal.protocol.control.IControlConfigVideoProtocol; import com.acgist.taoyao.signal.protocol.control.IControlConfigVideoProtocol;
import com.acgist.taoyao.signal.protocol.control.IControlPhotographProtocol; import com.acgist.taoyao.signal.protocol.control.IControlPhotographProtocol;
import com.acgist.taoyao.signal.protocol.control.IControlServerRecordProtocol; import com.acgist.taoyao.signal.protocol.control.IControlServerRecordProtocol;
import com.acgist.taoyao.signal.protocol.control.IControlWakeupProtocol;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.parameters.RequestBody;
@@ -36,6 +37,7 @@ import lombok.RequiredArgsConstructor;
public class ControlController { public class ControlController {
private final IControlBellProtocol controlBellProtocol; private final IControlBellProtocol controlBellProtocol;
private final IControlWakeupProtocol controlWakeupProtocol;
private final IControlPhotographProtocol controlPhotographProtocol; private final IControlPhotographProtocol controlPhotographProtocol;
private final IControlConfigAudioProtocol controlConfigAudioProtocol; private final IControlConfigAudioProtocol controlConfigAudioProtocol;
private final IControlConfigVideoProtocol controlConfigVideoProtocol; private final IControlConfigVideoProtocol controlConfigVideoProtocol;
@@ -94,4 +96,10 @@ public class ControlController {
return this.controlServerRecordProtocol.execute(roomId, clientId, enabled); return this.controlServerRecordProtocol.execute(roomId, clientId, enabled);
} }
@Operation(summary = "唤醒终端", description = "唤醒终端")
@GetMapping("/wakeup/{clientId}")
public Message wakeup(@PathVariable String clientId) {
return this.controlWakeupProtocol.execute(clientId);
}
} }

View File

@@ -10,7 +10,6 @@ import com.acgist.taoyao.signal.client.ClientManager;
import com.acgist.taoyao.signal.client.ClientStatus; import com.acgist.taoyao.signal.client.ClientStatus;
import com.acgist.taoyao.signal.protocol.client.ClientRebootProtocol; import com.acgist.taoyao.signal.protocol.client.ClientRebootProtocol;
import com.acgist.taoyao.signal.protocol.client.ClientShutdownProtocol; import com.acgist.taoyao.signal.protocol.client.ClientShutdownProtocol;
import com.acgist.taoyao.signal.protocol.client.ClientWakeupProtocol;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Content;
@@ -31,7 +30,6 @@ import lombok.RequiredArgsConstructor;
public class ClientController { public class ClientController {
private final ClientManager clientManager; private final ClientManager clientManager;
private final ClientWakeupProtocol clientWakeupProtocol;
private final ClientRebootProtocol clientRebootProtocol; private final ClientRebootProtocol clientRebootProtocol;
private final ClientShutdownProtocol clientShutdownProtocol; private final ClientShutdownProtocol clientShutdownProtocol;
@@ -49,13 +47,6 @@ public class ClientController {
return Message.success(this.clientManager.getStatus(clientId)); return Message.success(this.clientManager.getStatus(clientId));
} }
@Operation(summary = "唤醒终端", description = "唤醒终端")
@GetMapping("/wakeup/{clientId}")
public Message wakeup(@PathVariable String clientId) {
this.clientWakeupProtocol.execute(clientId);
return Message.success();
}
@Operation(summary = "重启终端", description = "重启终端") @Operation(summary = "重启终端", description = "重启终端")
@GetMapping("/reboot/{clientId}") @GetMapping("/reboot/{clientId}")
public Message reboot(@PathVariable String clientId) { public Message reboot(@PathVariable String clientId) {

View File

@@ -38,9 +38,11 @@ public abstract class OperatorAdapter implements Operator {
* @return 是否已经关闭 * @return 是否已经关闭
*/ */
protected boolean markClose() { protected boolean markClose() {
synchronized (this) {
final boolean old = this.close; final boolean old = this.close;
this.close = true; this.close = true;
return old; return old;
} }
}
} }

View File

@@ -27,27 +27,27 @@ import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter;
""", """,
""" """
{ {
"ip": "终端IP", "ip" : "终端IP",
"name": "终端名称", "name" : "终端名称",
"clientId": "终端ID", "clientId" : "终端ID",
"clientType": "终端类型", "clientType" : "终端类型",
"latitude": 纬度, "latitude" : 纬度,
"longitude": 经度, "longitude" : 经度,
"humidity": 湿度, "humidity" : 湿度,
"temperature": 温度, "temperature" : 温度,
"signal": 信号强度0~100, "signal" : 信号强度0~100,
"battery": 电池电量0~100, "battery" : 电池电量0~100,
"alarming": 是否发生告警true|false, "alarming" : 是否发生告警true|false,
"charging": 是否正在充电true|false, "charging" : 是否正在充电true|false,
"clientRecording": 是否正在录像true|false, "clientRecording": 是否正在录像true|false,
"serverRecording": 是否正在录像true|false, "serverRecording": 是否正在录像true|false,
"lastHeartbeat": "最后心跳时间", "lastHeartbeat" : "最后心跳时间",
"status": {更多状态}, "status" : {更多状态},
"config": {更多配置} "config" : {更多配置}
} }
""" """
}, },
flow = "终端->信令服务->终端" flow = "终端=>信令服务->终端"
) )
public class ClientStatusProtocol extends ProtocolClientAdapter { public class ClientStatusProtocol extends ProtocolClientAdapter {

View File

@@ -1,31 +0,0 @@
package com.acgist.taoyao.signal.protocol.client;
import com.acgist.taoyao.boot.annotation.Description;
import com.acgist.taoyao.boot.annotation.Protocol;
import com.acgist.taoyao.signal.protocol.ProtocolClientAdapter;
/**
* 终端唤醒信令
*
* @author acgist
*/
@Protocol
@Description(
flow = "信令服务->终端"
)
public class ClientWakeupProtocol extends ProtocolClientAdapter {
private static final String SIGNAL = "client::wakeup";
public ClientWakeupProtocol() {
super("终端唤醒信令", SIGNAL);
}
/**
* @param clientId 终端ID
*/
public void execute(String clientId) {
this.clientManager.unicast(clientId, this.build());
}
}

View File

@@ -19,13 +19,13 @@ import com.acgist.taoyao.signal.protocol.ProtocolControlAdapter;
@Description( @Description(
body = """ body = """
{ {
"to": "目标终端ID", "to" : "目标终端ID",
"enabled": 是否响铃true|false "enabled": 是否响铃true|false
} }
""", """,
flow = { flow = {
"信令服务->终端", "信令服务=>终端",
"终端->信令服务->终端" "终端=>信令服务->终端"
} }
) )
public class ControlBellProtocol extends ProtocolControlAdapter implements IControlBellProtocol { public class ControlBellProtocol extends ProtocolControlAdapter implements IControlBellProtocol {

View File

@@ -0,0 +1,47 @@
package com.acgist.taoyao.signal.protocol.control;
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.protocol.ProtocolControlAdapter;
/**
* 终端唤醒信令
*
* @author acgist
*/
@Protocol
@Description(
body = """
{
"to": "目标终端ID"
}
""",
flow = {
"信令服务=>终端",
"终端=>信令服务->终端"
}
)
public class ControlWakeupProtocol extends ProtocolControlAdapter implements IControlWakeupProtocol {
private static final String SIGNAL = "control::wakeup";
public ControlWakeupProtocol() {
super("终端唤醒信令", SIGNAL);
}
@Override
public void execute(String clientId, ClientType clientType, Client client, Client targetClient, Message message, Map<String, Object> body) {
client.push(targetClient.request(message));
}
@Override
public Message execute(String clientId) {
return this.request(clientId, this.build(Map.of()));
}
}

View File

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