1
0
Fork 0
forked from Simnation/Main
Main/resources/[voice]/yaca-voice/web/script.js

86 lines
2 KiB
JavaScript
Raw Normal View History

2025-06-30 22:18:20 +02:00
let webSocket = null
/**
* Connect to the YaCA voice plugin
*/
function connect() {
console.log('[YaCA-Websocket] Trying to Connect to YaCA WebSocket...')
try {
webSocket = new window.WebSocket('ws://127.0.0.1:30125/')
} catch {
connect()
}
webSocket.onmessage = (event) => {
if (!event) return
sendNuiData('YACA_OnMessage', event.data)
}
webSocket.onopen = (event) => {
if (!event) return
sendNuiData('YACA_OnConnected')
}
webSocket.onclose = (event) => {
if (!event) return
sendNuiData('YACA_OnDisconnected', {
code: event.code,
reason: event.reason,
})
setTimeout(() => {
connect()
}, 1000)
}
}
/**
* Send a command to the YaCA voice plugin
*
* @param command - The command to send as a object
*/
function runCommand(command) {
if (!webSocket || webSocket.readyState !== WebSocket.OPEN) {
return
}
webSocket.send(JSON.stringify(command))
}
/**
* Send a NUI message to the client
*
* @param event - The name of the callback
* @param data - The data to send
*/
function sendNuiData(event, data = {}) {
// skipcq: JS-0125
fetch(`https://${GetParentResourceName()}/${event}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=UTF-8',
},
body: JSON.stringify(data),
}).catch((error) => console.error('[YaCA-Websocket] Error sending NUI Message:', error))
}
$(() => {
window.addEventListener('DOMContentLoaded', () => {
sendNuiData('YACA_OnNuiReady')
})
window.addEventListener('message', (event) => {
if (event.data.action === 'connect') {
connect()
} else if (event.data.action === 'command') {
runCommand(event.data.data)
} else if (event.data.action === 'close') {
if (webSocket) webSocket.close()
} else {
console.error('[YaCA-Websocket] Unknown message:', event.data)
}
})
})