Pārlūkot izejas kodu

弹幕接入,tmp

DESKTOP-YALE\greyg 1 gadu atpakaļ
vecāks
revīzija
e96e7c1f00

+ 27 - 0
src/main/java/com/hy/modules/bz/daemon/WebSocketListenerInitializer.java

@@ -0,0 +1,27 @@
+package com.hy.modules.bz.daemon;
+
+import com.hy.modules.bz.daemon.websocket.WebSocketClientManager;
+import com.hy.modules.bz.daemon.websocket.impl.TiktokMessageWebSocketClient;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+@Component
+public class WebSocketListenerInitializer {
+
+    @Value("hy.web-socket.uri.tiktok")
+    private String tiktokWebsocketURI;
+
+    @PostConstruct
+    public void init(){
+        try {
+            WebSocketClientManager.getInstance().startListen(tiktokWebsocketURI, TiktokMessageWebSocketClient.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+            // throw new RuntimeException(e);
+        }
+    }
+
+
+}

+ 17 - 0
src/main/java/com/hy/modules/bz/daemon/websocket/WebSocketClient.java

@@ -0,0 +1,17 @@
+package com.hy.modules.bz.daemon.websocket;
+
+import javax.websocket.CloseReason;
+import javax.websocket.EndpointConfig;
+import javax.websocket.Session;
+
+/**
+ * web socket 接口
+ */
+public interface WebSocketClient {
+
+    void onOpen(Session session, EndpointConfig config);
+
+    void onMessage(Session session, String message);
+
+    void onClose(Session session, CloseReason closeReason);
+}

+ 24 - 0
src/main/java/com/hy/modules/bz/daemon/websocket/WebSocketClientManager.java

@@ -0,0 +1,24 @@
+package com.hy.modules.bz.daemon.websocket;
+
+import javax.websocket.ContainerProvider;
+import javax.websocket.WebSocketContainer;
+import java.net.URI;
+
+public class WebSocketClientManager {
+
+    private static final WebSocketContainer CONTAINER = ContainerProvider.getWebSocketContainer();
+
+    private static final WebSocketClientManager WEB_SOCKET_LISTENER = new WebSocketClientManager();
+    private WebSocketClientManager() {
+    }
+
+    public static WebSocketClientManager getInstance() {
+        return WEB_SOCKET_LISTENER;
+    }
+
+    public void startListen(String uri, Class<? extends WebSocketClient> clz) throws Exception {
+        CONTAINER.connectToServer(clz, URI.create(uri));
+    }
+
+
+}

+ 31 - 0
src/main/java/com/hy/modules/bz/daemon/websocket/impl/TiktokMessageWebSocketClient.java

@@ -0,0 +1,31 @@
+package com.hy.modules.bz.daemon.websocket.impl;
+
+import com.hy.modules.bz.daemon.websocket.WebSocketClient;
+import com.hy.modules.bz.daemon.websocket.impl.tiktok.Message;
+import com.hy.modules.bz.daemon.websocket.impl.tiktok.MessageTypeEn;
+
+import javax.websocket.*;
+
+@ClientEndpoint
+public class TiktokMessageWebSocketClient implements WebSocketClient {
+
+    @OnOpen
+    @Override
+    public void onOpen(Session session, EndpointConfig config) {
+
+    }
+
+    @OnMessage
+    @Override
+    public void onMessage(Session session, String message) {
+        // todo: 接收消息
+        Message msgObj = MessageTypeEn.fromMessage(message).decode(message);
+    }
+
+    @OnClose
+    @Override
+    public void onClose(Session session, CloseReason closeReason) {
+
+    }
+
+}

+ 5 - 0
src/main/java/com/hy/modules/bz/daemon/websocket/impl/tiktok/ChatMessage.java

@@ -0,0 +1,5 @@
+package com.hy.modules.bz.daemon.websocket.impl.tiktok;
+
+public class ChatMessage extends Message {
+
+}

+ 21 - 0
src/main/java/com/hy/modules/bz/daemon/websocket/impl/tiktok/GiftMessage.java

@@ -0,0 +1,21 @@
+package com.hy.modules.bz.daemon.websocket.impl.tiktok;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+@Data
+public class GiftMessage extends Message {
+
+    @JSONField(name = "giftId")
+    private String giftId;
+
+    @JSONField(name = "giftName")
+    private String giftName;
+
+    @JSONField(name = "giftCount")
+    private int giftCount;
+
+    @JSONField(name = "repeatEnd")
+    private int repeatEnd;
+
+}

+ 14 - 0
src/main/java/com/hy/modules/bz/daemon/websocket/impl/tiktok/LikeMessage.java

@@ -0,0 +1,14 @@
+package com.hy.modules.bz.daemon.websocket.impl.tiktok;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+@Data
+public class LikeMessage extends Message {
+
+    @JSONField(name = "count")
+    private int count;
+
+    @JSONField(name = "total")
+    private int total;
+}

+ 4 - 0
src/main/java/com/hy/modules/bz/daemon/websocket/impl/tiktok/MemberMessage.java

@@ -0,0 +1,4 @@
+package com.hy.modules.bz.daemon.websocket.impl.tiktok;
+
+public class MemberMessage extends Message{
+}

+ 23 - 0
src/main/java/com/hy/modules/bz/daemon/websocket/impl/tiktok/Message.java

@@ -0,0 +1,23 @@
+package com.hy.modules.bz.daemon.websocket.impl.tiktok;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+@Data
+public class Message {
+
+    @JSONField(name = "type")
+    private String type;
+
+    @JSONField(name = "name")
+    private String name;
+
+    @JSONField(name = "uid")
+    private String uid;
+
+    @JSONField(name = "head_img")
+    private String headImg;
+
+    @JSONField(name = "content")
+    private String content;
+}

+ 5 - 0
src/main/java/com/hy/modules/bz/daemon/websocket/impl/tiktok/MessageDecoder.java

@@ -0,0 +1,5 @@
+package com.hy.modules.bz.daemon.websocket.impl.tiktok;
+
+public interface MessageDecoder {
+    <T extends Message> T decode(String message);
+}

+ 56 - 0
src/main/java/com/hy/modules/bz/daemon/websocket/impl/tiktok/MessageTypeEn.java

@@ -0,0 +1,56 @@
+package com.hy.modules.bz.daemon.websocket.impl.tiktok;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
+/**
+ * tiktok 消息类型
+ */
+public enum MessageTypeEn implements MessageDecoder {
+
+    MEMBER("MemberMessage",MemberMessage.class),
+    CHAT("ChatMessage",ChatMessage.class),
+    LIKE("LikeMessage",LikeMessage.class),
+    GIFT("GiftMessage",GiftMessage.class),;
+
+    private String value;
+
+    private Class<? extends Message> clz;
+
+    MessageTypeEn(String _value,Class<? extends Message> _clz) {
+        value = _value;
+        clz = _clz;
+    }
+
+    public static MessageTypeEn getEnum(String value) {
+        for (MessageTypeEn en : MessageTypeEn.values()) {
+            if (en.value.equals(value)) {
+                return en;
+            }
+        }
+        throw new IllegalArgumentException(value);
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public <T extends Message> Class<T> getClz() {
+        return (Class<T>) clz;
+    }
+
+    public static MessageTypeEn fromMessage(String message){
+        JSONObject obj = JSONObject.parseObject(message);
+        String key = "type";
+        if(!obj.containsKey(key)){
+            throw new IllegalArgumentException("");
+        }
+
+        return getEnum(obj.getString(key));
+    }
+
+    @Override
+    public <T extends Message> T decode(String message) {
+        return JSON.parseObject(message,getClz());
+    }
+}

+ 6 - 1
src/main/resources/application-dev.yml

@@ -70,4 +70,9 @@ spring:
   # Quartz 配置
   quartz:
     properties:
-      tablePrefix: schedule_
+      tablePrefix: schedule_
+
+hy:
+  web-socket:
+    uri:
+      tiktok: ws://127.0.0.1:9999