You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.0 KiB
44 lines
1.0 KiB
6 years ago
|
const getHost = () => /HOST_PORT=(wss?:\/\/.+)/.exec(window.location.search)
|
||
|
|
||
|
export default function listenToACT(callback) {
|
||
|
if (!getHost()) return listenOverlayPlugin(callback)
|
||
|
return listenActWebSocket(callback)
|
||
|
}
|
||
|
|
||
|
function listenActWebSocket(callback) {
|
||
|
const url = new URLSearchParams(window.location.search)
|
||
|
const wsUri = `${url.get("HOST_PORT")}BeforeLogLineRead` || undefined
|
||
|
const ws = new WebSocket(wsUri)
|
||
|
ws.onerror = () => ws.close()
|
||
|
ws.onclose = () =>
|
||
|
setTimeout(() => {
|
||
|
listenActWebSocket(callback)
|
||
|
}, 1000)
|
||
|
ws.onmessage = function(e, m) {
|
||
|
if (e.data === ".") return ws.send(".")
|
||
|
|
||
|
const obj = JSON.parse(e.data)
|
||
|
if (obj.msgtype === "SendCharName") {
|
||
|
return callback(obj.msg)
|
||
|
} else if (obj.msgtype === "Chat") {
|
||
|
return callback(...obj.msg.split("|"))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return () => {
|
||
|
ws.close()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function listenOverlayPlugin(callback) {
|
||
|
const listener = e => {
|
||
|
callback(...e.detail)
|
||
|
}
|
||
|
|
||
|
document.addEventListener("onLogLine", listener)
|
||
|
|
||
|
return () => {
|
||
|
document.removeEventListener("onLogLine", listener)
|
||
|
}
|
||
|
}
|