From cc552fcbee5cea37fcc1f6b3013d7f631eecbced Mon Sep 17 00:00:00 2001 From: Fang_Zhijian Date: Sun, 12 May 2024 21:10:24 +0800 Subject: [PATCH] Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 显示主机当前状态 2. 可发送自定义波形 --- public/css/style.css | 16 +++++++++ public/img/31036.png | Bin 0 -> 14605 bytes public/img/31039.png | Bin 0 -> 5045 bytes src/App.vue | 43 +++++++++++++++++----- src/socket/coyote.ts | 83 +++++++++++++++++++++++++++++++++++-------- src/waveHelper.vue | 8 ++--- 6 files changed, 122 insertions(+), 28 deletions(-) create mode 100644 public/img/31036.png create mode 100644 public/img/31039.png diff --git a/public/css/style.css b/public/css/style.css index 20d5b2b..b18d512 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -36,6 +36,10 @@ button { -o-border-radius: 3px; } +a { + color: #fce9a7; +} + button:hover { background-color: #ffe668; } @@ -450,6 +454,18 @@ select { position: fixed; } +.game-info { + position: fixed; + top: 64px; + right: 60px; + padding: 0 10px 10px 10px; + color: #ffe99d; + background: #171717; + border-radius: 10px; + border: 1px solid #ffe99d; + width: 200px; +} + .tips-hide { font-weight: bold; margin-left: 15px; diff --git a/public/img/31036.png b/public/img/31036.png new file mode 100644 index 0000000000000000000000000000000000000000..83662f292448bc84180f367626035acce9f9ef9b GIT binary patch literal 14605 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 // be ready clearInterval(heartBeatTimer.value!) +// 测试波形数据 +const waveData = ref("") /** * 测试请求鉴权接口 @@ -158,11 +166,10 @@ const handleDestroySocket = () => { * 测试按钮 */ const test = () => { - const waveData = { - "test": `["0A0A0A0A00000000","0A0A0A0A00000000","0A0A0A0A00000000","0A0A0A0A00000000","0A0A0A0A00000000","0A0A0A0A00000000","0A0A0A0A00000000","0A0A0A0A00000000","0A0A0A0A01010101","0A0A0A0A01010101","0A0A0A0A22222222","0A0A0A0A22222222","0A0A0A0A43434343","0A0A0A0A43434343","0A0A0A0A64646464","0A0A0A0A64646464"]` - } try { - sendWaveData(5, 5, waveData["test"], waveData["test"]) + sendWaveData(5, 5, waveData.value, waveData.value) + addOrIncrease(2, 1, 1) + console.log(waveData.value) notyf.success("波形发送成功") } catch (e) { @@ -202,8 +209,26 @@ const hideqrcode = () => {
! 请在连接前确保已经设置好强度上限
-
+
+

主机状态

+

A: {{ channelAStrength }} / {{ softAStrength }}

+

B: {{ channelBStrength }} / {{ softBStrength }}

+ +
+

游戏设置

+

强度跟随 ?

+ A + B + +
+ +

游戏玩法

+

小花花强度 -1

+

牛哇牛哇强度 +1

+
+
+

系统设置

@@ -220,6 +245,8 @@ const hideqrcode = () => {

调试选项

+ +
diff --git a/src/socket/coyote.ts b/src/socket/coyote.ts index 8123d60..2e78f01 100644 --- a/src/socket/coyote.ts +++ b/src/socket/coyote.ts @@ -4,15 +4,17 @@ import QRCode from 'qrcode' const notyf = new Notyf({ duration: 4000 }) -let channelAStrength = 0; // A通道强度 -let channelBStrength = 0; // B通道强度 +let channelAStrength = ref(0); // A通道强度 +let channelBStrength = ref(0); // B通道强度 +let softAStrength = ref(0); // A通道软上限 +let softBStrength = ref(0); // B通道软上限 +let followAStrength = ref(false); //跟随A通道软上限 +let followBStrength = ref(false); //跟随B通道软上限 let connectionId = ""; // 从接口获取的连接标识符 let targetWSId = ""; // 发送目标 let fangdou = 500; //500毫秒防抖 let fangdouSetTimeOut; // 防抖定时器 -let followAStrength = false; //跟随AB软上限 -let followBStrength = false; let wsConn; // 全局ws链接 const feedBackMsg = { "feedback-0": "A通道:○", @@ -36,8 +38,9 @@ QRCode.toDataURL("https://www.dungeon-lab.com/app-download.php#DGLAB-SOCKET#wss: function createCoyoteSocket() { wsConn = new WebSocket('wss://coyote.babyfang.cn/'); + wsConn.onopen = function (event) { - console.log("WebSocket连接已建立"); + console.log("WebSocket连接已建立") } wsConn.onmessage = function (event) { @@ -46,7 +49,7 @@ function createCoyoteSocket() { msg = JSON.parse(event.data); } catch (e) { console.log(event.data); - return; + return } console.log(event.data) @@ -64,36 +67,71 @@ function createCoyoteSocket() { } else { if (msg.clientId != connectionId) { console.log("错误的clientId") - return; + return } targetWSId = msg.targetId; console.log("收到targetId: " + msg.targetId + ", msg: " + msg.message); qrcodeShow.value = false notyf.success({message: "郊狼连接成功"}) } - break; + break case 'break': if (msg.targetId != targetWSId) - return; + return console.log("收到断开连接指令") notyf.error({ message: "收到断开连接指令" }) //location.reload(); - break; + break case 'error': if (msg.targetId != targetWSId) - return; + return console.log("对方已断开,code:" + msg.message) notyf.error({ message: "对方已断开(" + msg.message + ")" }) - break; + break case 'msg': const result: { type: string; numbers: number[] }[] = [] if(msg.message.includes("strength")) { const numbers = msg.message.match(/\d+/g).map(Number) result.push({ type: "strength", numbers: numbers }) - } + console.log(numbers) + channelAStrength.value = numbers[0]; + channelBStrength.value = numbers[1]; + + softAStrength.value = numbers[2]; + softBStrength.value = numbers[3]; + + if (followAStrength.value && numbers[2] !== numbers[0]) { + const data1 = { type: 4, message: `strength-1+2+${numbers[2]}` } + sendWsMsg(data1) + } + + if (followBStrength.value && numbers[3] !== numbers[1]) { + const data2 = { type: 4, message: `strength-2+2+${numbers[3]}` } + sendWsMsg(data2) + } + } else if (msg.message.includes("feedback")) { + notyf.success({ message: feedBackMsg[msg.message] }) + } + break + case 'heartbeat': + console.log("收到心跳包") + break + default: + console.log("未知消息类型:" + JSON.stringify(msg)); + break } } + + wsConn.onerror = function (event) { + console.log("WebSocket连接出错") + notyf.error({ message: "WebSocket连接出错" }) + } + + wsConn.onclose = function (event) { + console.log("WebSocket连接已关闭") + notyf.error({ message: "WebSocket连接已关闭" }) + } } function sendWsMsg(messageObj) { @@ -108,7 +146,7 @@ function addOrIncrease(type, channelIndex, strength) { // 1 减少一 2 增加一 3 设置到 // channel:1-A 2-B // 获取当前频道元素和当前值 - let channelStrength = channelIndex === 1 ? channelAStrength : channelBStrength; + let channelStrength = channelIndex === 1 ? channelAStrength.value : channelBStrength.value; // 如果是设置操作 if (type === 3) { @@ -170,4 +208,19 @@ function closeCoyoteSocket() { } -export { createCoyoteSocket, closeCoyoteSocket, sendWsMsg, sendWaveData, addOrIncrease, clearAB, qrcodeSrc, qrcodeShow, channelAStrength, channelBStrength } +export { + createCoyoteSocket, + closeCoyoteSocket, + sendWsMsg, + sendWaveData, + addOrIncrease, + clearAB, + qrcodeSrc, + qrcodeShow, + channelAStrength, + channelBStrength, + softAStrength, + softBStrength, + followAStrength, + followBStrength +} diff --git a/src/waveHelper.vue b/src/waveHelper.vue index dc31393..650d0d1 100644 --- a/src/waveHelper.vue +++ b/src/waveHelper.vue @@ -13,7 +13,7 @@ const sliderGroups: Ref = ref([ reactive({ sliders: [50, 50, 50, 50], autoStrength: true }), ]); -const inputFrequency = ref(0) +const inputFrequency = ref(10) const waveData = ref() @@ -152,7 +152,7 @@ function deleteGroup(index: number) {

波形数据

-
{{ JSON.stringify(waveData) }}
+
@@ -168,12 +168,10 @@ function deleteGroup(index: number) { } .slider { - writing-mode: bt-lr; /* IE */ - -webkit-appearance: slider-vertical; /* WebKit */ + -webkit-appearance: slider-vertical; margin-top: 26px; width: 8px; height: 200px; padding: 0 5px; } -