File size: 3,703 Bytes
af5a34b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
import Client from "./Client.js";
import { Config, Version } from './index.js'
import { sleep } from '../model/index.js'
import { redAdapter } from '../model/red/index.js'
// import { satoriAdapter } from '../model/satori/index.js'
let sendSocketList = []
let allSocketList = []
async function createWebSocket(data) {
if (typeof data.close != 'undefined' && typeof data.closed == 'undefined') {
data.closed = data.close
delete data.close
}
const client = new Client(data)
setAllSocketList(client)
if (data.address == 'ws_address') return
if (data.closed) return
sendSocketList = sendSocketList.filter(i => i.name != data.name)
switch (Number(data.type)) {
case 1:
if (!await checkVersion(data)) return
client.createWs()
sendSocketList.push(client)
break;
case 2:
if (!await checkVersion(data)) return
client.createServer()
sendSocketList.push(client)
break
case 3:
client.createGSUidWs()
sendSocketList.push(client)
break
case 4:
if (Version.isTrss) return
// client.createQQNT()
redAdapter.connect(client)
break
case 5:
if (!await checkVersion(data)) return
client.createHttp()
break
case 6:
if (!await checkVersion(data)) return
client.createHttpPost()
sendSocketList.push(client)
break
default:
return;
}
}
function setAllSocketList(data) {
allSocketList = allSocketList.filter(i => i.name != data.name)
allSocketList.push(data)
}
async function checkVersion(data) {
if (Version.isTrss) {
if (!data.uin) {
logger.warn(`[ws-plugin] ${data.name} 缺少配置项uin 请删除连接后重新#ws添加连接`)
return false
} else {
let log = false
for (let i = 0; i < 20; i++) {
if (Version.protocol.some(i => i == Bot[data.uin]?.version?.name)) {
return true
}
if (!log) {
logger.warn(`[ws-plugin] ${data.name} 暂未适配当前协议端或未连接对应协议端,20秒后重新判断`)
log = true
}
await sleep(1000)
}
logger.warn(`[ws-plugin] ${data.name} 暂未适配当前协议端或未连接对应协议端 ${data.uin}`)
return false
}
}
return true
}
function modifyWebSocket(target) {
// if (Version.isTrss) return
switch (target.type) {
case 'add':
case 'open':
if (target.data.type == 4) {
const client = new Client(target.data)
setAllSocketList(client)
redAdapter.connect(client)
} else {
createWebSocket(target.data)
}
break;
case 'del':
case 'close':
for (const i of allSocketList) {
if (i.name == target.data.name) {
i.close()
break
}
}
break
default:
return;
}
}
function clearWebSocket() {
for (const i of allSocketList) {
i.close()
}
}
function initWebSocket() {
// if (Version.isTrss) return
for (const i of Config.servers) {
createWebSocket(i)
}
}
export {
initWebSocket,
clearWebSocket,
modifyWebSocket,
allSocketList,
setAllSocketList,
sendSocketList,
createWebSocket
}
|