diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/WebSocketUtils.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/WebSocketUtils.java index ff25378..c6fcc2f 100644 --- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/WebSocketUtils.java +++ b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/utils/WebSocketUtils.java @@ -26,6 +26,7 @@ public class WebSocketUtils { if (session == null) { return null; } + // 远程IP地址 return (String) getField(session.getAsyncRemote(), "base.socketWrapper.remoteAddr"); } diff --git a/taoyao-signal-server/taoyao-server/src/main/resources/application-local.yml b/taoyao-signal-server/taoyao-server/src/main/resources/application-local.yml index 73efc1a..5cbc9d5 100644 --- a/taoyao-signal-server/taoyao-server/src/main/resources/application-local.yml +++ b/taoyao-signal-server/taoyao-server/src/main/resources/application-local.yml @@ -2,7 +2,7 @@ taoyao: media: media-server-list: - name: media-local-a - enabled: true + enabled: false host: 192.168.1.110 port: 4443 schema: wss diff --git a/taoyao-signal-server/taoyao-server/src/main/resources/application.yml b/taoyao-signal-server/taoyao-server/src/main/resources/application.yml index 8f43312..995951f 100644 --- a/taoyao-signal-server/taoyao-server/src/main/resources/application.yml +++ b/taoyao-signal-server/taoyao-server/src/main/resources/application.yml @@ -9,8 +9,8 @@ server: key-password: 123456 tomcat: thread: - max: 128 - min-spare: 4 + max: 256 + min-spare: 8 remoteip: host-header: X-Forwarded-Host port-header: X-Forwarded-Port diff --git a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/annotation/CostedTest.java b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/annotation/CostedTest.java index a21678f..a04a40d 100644 --- a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/annotation/CostedTest.java +++ b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/annotation/CostedTest.java @@ -32,7 +32,12 @@ public @interface CostedTest { /** * @return 超时时间 */ - long timeout() default 1000; + long timeout() default 1000L; + + /** + * @return 等待资源释放时间 + */ + long waitRelease() default 0L; /** * @return 超时时间单位 diff --git a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/annotation/CostedTestTestExecutionListener.java b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/annotation/CostedTestTestExecutionListener.java index 03d7576..7ca6c6e 100644 --- a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/annotation/CostedTestTestExecutionListener.java +++ b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/annotation/CostedTestTestExecutionListener.java @@ -49,10 +49,15 @@ public class CostedTestTestExecutionListener implements TestExecutionListener { }); } countDownLatch.await(timeout, timeUnit); + executor.shutdown(); } final long zTime = System.currentTimeMillis(); final long costed = zTime - aTime; log.info("多线程测试消耗时间:{}", costed); + final long waitRelease = costedTest.waitRelease(); + if(waitRelease > 0) { + Thread.sleep(waitRelease); + } } } diff --git a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/SignalTest.java b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/SignalTest.java index f25edc8..1bd5ddc 100644 --- a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/SignalTest.java +++ b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/SignalTest.java @@ -1,12 +1,16 @@ package com.acgist.taoyao.signal; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.net.http.WebSocket; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.CountDownLatch; import org.junit.jupiter.api.Test; +import com.acgist.taoyao.annotation.CostedTest; import com.acgist.taoyao.annotation.TaoyaoTest; import com.acgist.taoyao.main.TaoyaoApplication; @@ -16,34 +20,41 @@ import lombok.extern.slf4j.Slf4j; @TaoyaoTest(classes = TaoyaoApplication.class) class SignalTest { + /** + * 防止GC + */ + private List list = new ArrayList<>(); + @Test void testSignal() throws InterruptedException { final WebSocket clientA = WebSocketClient.build("wss://localhost:8888/websocket.signal", "clientA"); final WebSocket clientB = WebSocketClient.build("wss://localhost:8888/websocket.signal", "clientB"); clientA.sendText(""" - {"header":{"pid":1000,"v":"1.0.0","id":"1","sn":"clientA"},"body":{}} + {"header":{"signal":"client::heartbeat","v":"1.0.0","id":"1"},"body":{}} """, true).join(); assertNotNull(clientA); assertNotNull(clientB); } @Test + @CostedTest(thread = 10, count = 100, waitRelease = 5000L) void testThread() throws InterruptedException { - final int total = 1000; + final int total = 100; final CountDownLatch count = new CountDownLatch(total); final WebSocket clientA = WebSocketClient.build("wss://localhost:8888/websocket.signal", "clientA", count); final long aTime = System.currentTimeMillis(); for (int index = 0; index < total; index++) { clientA.sendText(""" - {"header":{"pid":2999,"v":"1.0.0","id":"1","sn":"clientA"},"body":{}} + {"header":{"signal":"client::status","v":"1.0.0","id":"1"},"body":{}} """, true).join(); } + this.list.add(clientA); // final ExecutorService executor = Executors.newFixedThreadPool(10); // for (int index = 0; index < total; index++) { // executor.execute(() -> { // synchronized (clientA) { // clientA.sendText(""" -// {"header":{"pid":2999,"v":"1.0.0","id":"1","sn":"clientA"},"body":{}} +// {"header":{"signal":"client::status","v":"1.0.0","id":"1"},"body":{}} // """, true).join(); // } // }); @@ -51,8 +62,20 @@ class SignalTest { count.await(); final long zTime = System.currentTimeMillis(); log.info("执行时间:{}", zTime - aTime); - Thread.sleep(1000); + log.info("当前连接数量:{}", this.list.size()); assertNotNull(clientA); } + + @Test + void testMax() throws InterruptedException { + final int size = 1024; + final CountDownLatch count = new CountDownLatch(size); + for (int index = 0; index < size; index++) { + final WebSocket clientA = WebSocketClient.build("wss://localhost:8888/websocket.signal", "clientA", count); + assertNotNull(clientA); + assertTrue(!(clientA.isInputClosed() || clientA.isOutputClosed())); + } + count.await(); + } } diff --git a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/WebSocketClient.java b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/WebSocketClient.java index d658546..490352b 100644 --- a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/WebSocketClient.java +++ b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/WebSocketClient.java @@ -37,7 +37,7 @@ public class WebSocketClient { @Override public void onOpen(WebSocket webSocket) { webSocket.sendText(String.format(""" - {"header":{"pid":2000,"v":"1.0.0","id":"1","sn":"%s"},"body":{"username":"taoyao","password":"taoyao","ip":"127.0.0.1"}} + {"header":{"signal":"client::register","v":"1.0.0","id":"1"},"body":{"username":"taoyao","password":"taoyao","ip":"127.0.0.1","sn":"%s"}} """, sn), true); Listener.super.onOpen(webSocket); } diff --git a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/protocol/PlatformScriptProtocolTest.java b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/protocol/PlatformScriptProtocolTest.java deleted file mode 100644 index 3712baf..0000000 --- a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/protocol/PlatformScriptProtocolTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.acgist.taoyao.signal.protocol; - -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; - -import java.util.Map; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import com.acgist.taoyao.annotation.TaoyaoTest; -import com.acgist.taoyao.boot.model.Message; -import com.acgist.taoyao.main.TaoyaoApplication; -import com.acgist.taoyao.signal.protocol.platform.PlatformScriptProtocol; - -@TaoyaoTest(classes = TaoyaoApplication.class) -class PlatformScriptProtocolTest { - - @Autowired - private PlatformScriptProtocol platformScriptProtocol; - - @Test - void testScript() { - assertDoesNotThrow(() -> { - this.platformScriptProtocol.execute("taoyao", Map.of("script", "netstat -ano"), null, Message.success()); - Thread.sleep(1000); - }); - } - -} diff --git a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/protocol/PlatformShutdownProtocolTest.java b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/protocol/PlatformShutdownProtocolTest.java deleted file mode 100644 index 1a9574c..0000000 --- a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/signal/protocol/PlatformShutdownProtocolTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.acgist.taoyao.signal.protocol; - -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import com.acgist.taoyao.annotation.TaoyaoTest; -import com.acgist.taoyao.boot.model.Message; -import com.acgist.taoyao.main.TaoyaoApplication; -import com.acgist.taoyao.signal.protocol.platform.PlatformShutdownProtocol; - -@TaoyaoTest(classes = TaoyaoApplication.class) -class PlatformShutdownProtocolTest { - - @Autowired - private PlatformShutdownProtocol platformShutdownProtocol; - - @Test - void testShutdown() { - assertDoesNotThrow(() -> { - this.platformShutdownProtocol.execute("taoyao", null, Message.success()); - Thread.sleep(1000); - }); - } - -} diff --git a/taoyao-signal-server/taoyao-signal/README.md b/taoyao-signal-server/taoyao-signal/README.md index 3c6e56e..7bcb368 100644 --- a/taoyao-signal-server/taoyao-signal/README.md +++ b/taoyao-signal-server/taoyao-signal/README.md @@ -393,6 +393,6 @@ ``` let socket = new WebSocket("wss://localhost:8888/websocket.signal"); -socket.send('{"header":{"pid":2000,"v":"1.0.0","id":"1","sn":"taoyao"},"body":{"username":"taoyao","password":"taoyao"}}'); -socket.send('{"header":{"pid":1000,"v":"1.0.0","id":"1","sn":"taoyao"},"body":{}}'); +socket.send('{"header":{"signal":"client::register","v":"1.0.0","id":"1"},"body":{"username":"taoyao","password":"taoyao","sn":"taoyao"}}'); +socket.send('{"header":{"signal":"client::heartbeat","v":"1.0.0","id":"1"},"body":{}}'); ``` \ No newline at end of file diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/MapBodyGetter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/MapBodyGetter.java new file mode 100644 index 0000000..6bee868 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/MapBodyGetter.java @@ -0,0 +1,104 @@ +package com.acgist.taoyao.signal; + +import java.util.Map; + +/** + * Map参数 + * + * @author acgist + */ +public interface MapBodyGetter { + + /** + * @param 参数泛型 + * + * @param body 消息主体 + * @param key 参数名称 + * + * @return 值 + */ + @SuppressWarnings("unchecked") + default T get(Map body, String key) { + if(body == null) { + return null; + } + return (T) body.get(key); + } + + /** + * @param 参数泛型 + * + * @param body 消息主体 + * @param key 参数名称 + * @param defaultValue 默认值 + * + * @return 值 + */ + @SuppressWarnings("unchecked") + default T get(Map body, String key, T defaultValue) { + if(body == null) { + return defaultValue; + } + final T t = (T) body.get(key); + return t == null ? defaultValue : t; + } + + + /** + * @param body 消息主体 + * @param key 参数名称 + * + * @return 值 + */ + default Long getLong(Map body, String key) { + if(body == null) { + return null; + } + final Object object = body.get(key); + if(object == null) { + return null; + } else if(object instanceof Long value) { + return value; + } + return Long.valueOf(object.toString()); + } + + /** + * @param body 消息主体 + * @param key 参数名称 + * + * @return 值 + */ + default Integer getInteger(Map body, String key) { + if(body == null) { + return null; + } + final Object object = body.get(key); + if(object == null) { + return null; + } else if(object instanceof Integer value) { + return value; + } + return Integer.valueOf(object.toString()); + } + + /** + * @param body 消息主体 + * @param key 参数名称 + * + * @return 值 + */ + default Boolean getBoolean(Map body, String key) { + if(body == null) { + return null; + } + final Object object = body.get(key); + if(object == null) { + return null; + } else if(object instanceof Boolean value) { + return value; + } + return Boolean.valueOf(object.toString()); + } + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/ClientManager.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/ClientManager.java index 3a78dc5..cd9516b 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/ClientManager.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/ClientManager.java @@ -104,19 +104,7 @@ public class ClientManager { } /** - * @param sn 终端标识 - * - * @return 终端会话 - */ - public Client client(String sn) { - return this.clients().stream() - .filter(v -> Objects.equals(sn, v.sn())) - .findFirst() - .orElse(null); - } - - /** - * @param instance 终端示例 + * @param instance 终端实例 * * @return 终端 */ @@ -127,6 +115,17 @@ public class ClientManager { .orElse(null); } + /** + * @param sn 终端标识 + * + * @return 终端会话 + */ + public List clients(String sn) { + return this.clients().stream() + .filter(v -> Objects.equals(sn, v.sn())) + .toList(); + } + /** * @return 所有终端会话 */ @@ -136,14 +135,25 @@ public class ClientManager { .toList(); } + /** + * @param instance 终端实例 + * + * @return 终端状态 + */ + public ClientStatus status(AutoCloseable instance) { + final Client client = this.client(instance); + return client == null ? null : client.status(); + } + /** * @param sn 终端标识 * * @return 终端状态 */ - public ClientStatus status(String sn) { - final Client client = this.client(sn); - return client == null ? null : client.status(); + public List status(String sn) { + return this.clients(sn).stream() + .map(Client::status) + .toList(); } /** diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/websocket/WebSocketClient.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/websocket/WebSocketClient.java index 0706bd3..ad87da7 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/websocket/WebSocketClient.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/websocket/WebSocketClient.java @@ -36,7 +36,7 @@ public class WebSocketClient extends ClientAdapter { synchronized (this.instance) { try { if(this.instance.isOpen()) { - this.basic.sendText(message.toString()); + this.basic.sendText(message.toString(), true); } else { log.error("会话已经关闭:{}", this.instance); } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/controller/RoomController.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/controller/RoomController.java index 10e7be7..eafc99f 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/controller/RoomController.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/controller/RoomController.java @@ -10,9 +10,9 @@ import org.springframework.web.bind.annotation.RestController; import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.signal.client.ClientStatus; -import com.acgist.taoyao.signal.room.Room; -import com.acgist.taoyao.signal.room.RoomManager; -import com.acgist.taoyao.signal.room.RoomStatus; +import com.acgist.taoyao.signal.media.Room; +import com.acgist.taoyao.signal.media.RoomManager; +import com.acgist.taoyao.signal.media.RoomStatus; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/ApplicationEventAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/ApplicationEventAdapter.java index be6cf52..46d1e71 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/ApplicationEventAdapter.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/ApplicationEventAdapter.java @@ -1,12 +1,11 @@ package com.acgist.taoyao.signal.event; -import java.util.HashMap; import java.util.Map; -import java.util.Objects; import org.springframework.context.ApplicationEvent; import com.acgist.taoyao.boot.model.Message; +import com.acgist.taoyao.signal.MapBodyGetter; import com.acgist.taoyao.signal.client.Client; import lombok.Getter; @@ -19,7 +18,7 @@ import lombok.Setter; */ @Getter @Setter -public abstract class ApplicationEventAdapter extends ApplicationEvent { +public abstract class ApplicationEventAdapter extends ApplicationEvent implements MapBodyGetter { private static final long serialVersionUID = 1L; @@ -53,65 +52,31 @@ public abstract class ApplicationEventAdapter extends ApplicationEvent { } /** - * @param 参数泛型 - * - * @param key 参数名称 - * - * @return 值 + * @see #get(Map, String) */ - @SuppressWarnings("unchecked") public T get(String key) { - if(this.body == null) { - return null; - } - return (T) this.body.get(key); + return this.get(this.body, key); } /** - * @param 参数泛型 - * - * @param key 参数名称 - * @param defaultValue 默认值 - * - * @return 值 + * @see #get(Map, String, Object) */ - @SuppressWarnings("unchecked") public T get(String key, T defaultValue) { - if(this.body == null) { - return defaultValue; - } - final T t = (T) this.body.get(key); - return t == null ? defaultValue : t; + return this.get(body, key, defaultValue); } /** - * @param key 参数名称 - * - * @return 值 + * @see #getLong(Map, String) */ public Long getLong(String key) { - if(this.body == null) { - return null; - } - final Object object = this.body.get(key); - if(object == null) { - return null; - } else if(object instanceof Long value) { - return value; - } - return Long.valueOf(object.toString()); + return this.getLong(body, key); } - + /** - * @return 新的主体 + * @see #getInteger(Map, String) */ - public Map mergeBody() { - final Map body = new HashMap<>(); - if(this.body != null) { - this.body.forEach((k, v) -> body.put(Objects.toString(k), v)); - } - this.message.setBody(body); - return body; + public Integer getInteger(String key) { + return this.getInteger(body, key); } } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/ApplicationListenerAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/ApplicationListenerAdapter.java index 3d11809..2d41ebd 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/ApplicationListenerAdapter.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/ApplicationListenerAdapter.java @@ -7,7 +7,7 @@ import org.springframework.context.ApplicationListener; import com.acgist.taoyao.signal.client.ClientManager; import com.acgist.taoyao.signal.event.ApplicationEventAdapter; import com.acgist.taoyao.signal.media.MediaClientManager; -import com.acgist.taoyao.signal.room.RoomManager; +import com.acgist.taoyao.signal.media.RoomManager; /** * 事件监听适配器 diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomCreateListener.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomCreateListener.java index 1f604d4..1866718 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomCreateListener.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomCreateListener.java @@ -5,7 +5,7 @@ import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.boot.model.MessageCodeException; import com.acgist.taoyao.signal.event.room.RoomCreateEvent; import com.acgist.taoyao.signal.listener.ApplicationListenerAdapter; -import com.acgist.taoyao.signal.room.Room; +import com.acgist.taoyao.signal.media.Room; /** * 创建房间监听 diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomEnterListener.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomEnterListener.java index b28e75f..018c6ec 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomEnterListener.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomEnterListener.java @@ -10,8 +10,8 @@ import com.acgist.taoyao.signal.client.Client; import com.acgist.taoyao.signal.event.room.RoomEnterEvent; import com.acgist.taoyao.signal.listener.ApplicationListenerAdapter; import com.acgist.taoyao.signal.media.MediaClient; +import com.acgist.taoyao.signal.media.Room; import com.acgist.taoyao.signal.protocol.Constant; -import com.acgist.taoyao.signal.room.Room; /** * 进入房间监听 diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/MediaClient.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/MediaClient.java index fe48554..43dd19b 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/MediaClient.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/MediaClient.java @@ -38,7 +38,6 @@ import com.acgist.taoyao.signal.protocol.Protocol; import com.acgist.taoyao.signal.protocol.ProtocolManager; import com.acgist.taoyao.signal.protocol.ProtocolMediaAdapter; import com.acgist.taoyao.signal.protocol.media.MediaRegisterProtocol; -import com.acgist.taoyao.signal.protocol.platform.PlatformErrorProtocol; import lombok.extern.slf4j.Slf4j; @@ -60,8 +59,6 @@ public class MediaClient { private TaoyaoProperties taoyaoProperties; @Autowired private MediaRegisterProtocol mediaRegisterProtocol; - @Autowired - private PlatformErrorProtocol platformErrorProtocol; /** * 名称 diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/Room.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/Room.java similarity index 94% rename from taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/Room.java rename to taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/Room.java index 9dbfcac..9891379 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/Room.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/Room.java @@ -1,4 +1,4 @@ -package com.acgist.taoyao.signal.room; +package com.acgist.taoyao.signal.media; import java.io.Closeable; import java.util.List; @@ -7,8 +7,6 @@ import java.util.Objects; import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.signal.client.Client; import com.acgist.taoyao.signal.client.ClientStatus; -import com.acgist.taoyao.signal.media.MediaClient; -import com.acgist.taoyao.signal.media.Transport; import lombok.Getter; import lombok.Setter; diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/RoomManager.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/RoomManager.java similarity index 95% rename from taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/RoomManager.java rename to taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/RoomManager.java index 2f1aedc..5596729 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/RoomManager.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/RoomManager.java @@ -1,4 +1,4 @@ -package com.acgist.taoyao.signal.room; +package com.acgist.taoyao.signal.media; import java.util.List; import java.util.Map; @@ -12,8 +12,6 @@ import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.boot.model.MessageCodeException; import com.acgist.taoyao.boot.service.IdService; import com.acgist.taoyao.signal.client.Client; -import com.acgist.taoyao.signal.media.MediaClient; -import com.acgist.taoyao.signal.media.MediaClientManager; import com.acgist.taoyao.signal.protocol.Constant; import lombok.extern.slf4j.Slf4j; diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/RoomStatus.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/RoomStatus.java similarity index 93% rename from taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/RoomStatus.java rename to taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/RoomStatus.java index f77c72c..f93dadb 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/RoomStatus.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/media/RoomStatus.java @@ -1,4 +1,4 @@ -package com.acgist.taoyao.signal.room; +package com.acgist.taoyao.signal.media; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolAdapter.java index 43acda9..416614a 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolAdapter.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolAdapter.java @@ -12,7 +12,7 @@ import com.acgist.taoyao.boot.service.IdService; import com.acgist.taoyao.signal.client.ClientManager; import com.acgist.taoyao.signal.event.ApplicationEventAdapter; import com.acgist.taoyao.signal.media.MediaClientManager; -import com.acgist.taoyao.signal.room.RoomManager; +import com.acgist.taoyao.signal.media.RoomManager; /** * 信令适配器 diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolManager.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolManager.java index fe74133..7a3a672 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolManager.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolManager.java @@ -80,6 +80,10 @@ public class ProtocolManager { public void execute(String content, AutoCloseable instance) { log.debug("执行信令消息:{}", content); final Client client = this.clientManager.client(instance); + if(client == null) { + log.warn("信令终端无效:{}-{}", instance, content); + return; + } // 验证请求 final Message message = JSONUtils.toJava(content, Message.class); if(message == null) { diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolMapAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolMapAdapter.java index 7ba27cd..c7eff23 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolMapAdapter.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolMapAdapter.java @@ -4,6 +4,7 @@ import java.util.Map; import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.boot.model.MessageCodeException; +import com.acgist.taoyao.signal.MapBodyGetter; import com.acgist.taoyao.signal.client.Client; /** @@ -11,7 +12,7 @@ import com.acgist.taoyao.signal.client.Client; * * @author acgist */ -public abstract class ProtocolMapAdapter extends ProtocolAdapter { +public abstract class ProtocolMapAdapter extends ProtocolAdapter implements MapBodyGetter { protected ProtocolMapAdapter(String name, String signal) { super(name, signal); diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolMediaRoomAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolMediaRoomAdapter.java index a3b1a83..29546c8 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolMediaRoomAdapter.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolMediaRoomAdapter.java @@ -5,15 +5,16 @@ import java.util.Map; import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.boot.model.MessageCodeException; +import com.acgist.taoyao.signal.MapBodyGetter; import com.acgist.taoyao.signal.client.Client; -import com.acgist.taoyao.signal.room.Room; +import com.acgist.taoyao.signal.media.Room; /** * 房间媒体服务信令适配器 * * @author acgist */ -public abstract class ProtocolMediaRoomAdapter extends ProtocolMediaAdapter { +public abstract class ProtocolMediaRoomAdapter extends ProtocolMediaAdapter implements MapBodyGetter { protected ProtocolMediaRoomAdapter(String name, String signal) { super(name, signal); @@ -45,7 +46,7 @@ public abstract class ProtocolMediaRoomAdapter extends ProtocolMediaAdapter { * @return 房间 */ protected Room room(Map map) { - final Long roomId = this.roomId(map); + final Long roomId = this.getLong(map, Constant.ROOM_ID); final Room room = this.roomManager.room(roomId); if(room == null) { throw MessageCodeException.of("房间无效:" + roomId); @@ -53,21 +54,6 @@ public abstract class ProtocolMediaRoomAdapter extends ProtocolMediaAdapter { return room; } - /** - * @param map 参数 - * - * @return 房间ID - */ - protected Long roomId(Map map) { - final Object object = map.get(Constant.ROOM_ID); - if(object == null) { - return null; - } else if(object instanceof Long value) { - return value; - } - return Long.valueOf(object.toString()); - } - /** * 处理房间信令 * diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientHeartbeatProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientHeartbeatProtocol.java index e3489bf..dfc8711 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientHeartbeatProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientHeartbeatProtocol.java @@ -30,9 +30,9 @@ public class ClientHeartbeatProtocol extends ProtocolMapAdapter { client.push(message.cloneWidthoutBody()); // 设置状态 final ClientStatus status = client.status(); - status.setSignal((Integer) body.get(Constant.SIGNAL)); - status.setBattery((Integer) body.get(Constant.BATTERY)); - status.setCharging((Boolean) body.get(Constant.CHARGING)); + status.setSignal(this.get(body, Constant.SIGNAL)); + status.setBattery(this.get(body, Constant.BATTERY)); + status.setCharging(this.get(body, Constant.CHARGING)); status.setLastHeartbeat(LocalDateTime.now()); } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientRegisterProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientRegisterProtocol.java index 0ba5d21..d5f7a22 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientRegisterProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientRegisterProtocol.java @@ -35,9 +35,9 @@ public class ClientRegisterProtocol extends ProtocolMapAdapter { @Override public void execute(String sn, Map body, Client client, Message message) { - final String clientSn = (String) body.get(Constant.SN); - final String username = (String) body.get(Constant.USERNAME); - final String password = (String) body.get(Constant.PASSWORD); + final String clientSn = this.get(body, Constant.SN); + final String username = this.get(body, Constant.USERNAME); + final String password = this.get(body, Constant.PASSWORD); // 如果需要终端鉴权在此实现 if(this.securityService.authenticate(username, password)) { log.info("终端注册:{}", clientSn); diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientStatusProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientStatusProtocol.java index 800400d..f33e2f9 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientStatusProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientStatusProtocol.java @@ -1,9 +1,6 @@ package com.acgist.taoyao.signal.protocol.client; import java.util.Map; -import java.util.Objects; - -import org.apache.commons.lang3.StringUtils; import com.acgist.taoyao.boot.annotation.Protocol; import com.acgist.taoyao.boot.model.Message; @@ -28,11 +25,7 @@ public class ClientStatusProtocol extends ProtocolMapAdapter { @Override public void execute(String sn, Map body, Client client, Message message) { // 如果没有指定终端标识默认查询自己 - String querySn = (String) body.get(Constant.SN); - if(StringUtils.isEmpty(querySn)) { - querySn = sn; - } - message.setBody(this.clientManager.status(querySn)); + message.setBody(this.clientManager.status(this.get(body, Constant.SN, sn))); client.push(message); } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/AudioActiveSpeakerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/AudioActiveSpeakerProtocol.java index af10f1f..023c5fb 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/AudioActiveSpeakerProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/AudioActiveSpeakerProtocol.java @@ -6,8 +6,8 @@ import java.util.Map; 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.media.Room; import com.acgist.taoyao.signal.protocol.ProtocolMediaRoomAdapter; -import com.acgist.taoyao.signal.room.Room; /** * 当前讲话终端信令 diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/RouterRtpCapabilitiesProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/RouterRtpCapabilitiesProtocol.java index dab71f6..8d463ec 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/RouterRtpCapabilitiesProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/RouterRtpCapabilitiesProtocol.java @@ -6,8 +6,8 @@ import java.util.Map; 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.media.Room; import com.acgist.taoyao.signal.protocol.ProtocolMediaRoomAdapter; -import com.acgist.taoyao.signal.room.Room; /** * 路由RTP能力信令 diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomListProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomListProtocol.java index 919ae19..574ad32 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomListProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomListProtocol.java @@ -5,8 +5,8 @@ import org.springframework.beans.factory.annotation.Autowired; 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.media.RoomManager; import com.acgist.taoyao.signal.protocol.ProtocolAdapter; -import com.acgist.taoyao.signal.room.RoomManager; /** * 房间列表信令 diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/SecurityService.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/SecurityService.java index f9b6f7b..9358921 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/SecurityService.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/SecurityService.java @@ -25,11 +25,11 @@ public interface SecurityService { * 鉴权 * * @param message 信令 - * @param session 会话 + * @param client 会话 * @param protocol 协议 * * @return 是否成功 */ - boolean authenticate(Message message, Client session, Protocol protocol); + boolean authenticate(Message message, Client client, Protocol protocol); } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/impl/SecurityServiceImpl.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/impl/SecurityServiceImpl.java index 96ecace..47a4ba1 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/impl/SecurityServiceImpl.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/impl/SecurityServiceImpl.java @@ -27,8 +27,8 @@ public class SecurityServiceImpl implements SecurityService { } @Override - public boolean authenticate(Message message, Client session, Protocol protocol) { - if(!session.authorized()) { + public boolean authenticate(Message message, Client client, Protocol protocol) { + if(!client.authorized()) { return false; } // 信令权限鉴定