CikeyQi's picture
Upload 154 files (#1)
af5a34b
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
}