126 lines
No EOL
3.3 KiB
JavaScript
126 lines
No EOL
3.3 KiB
JavaScript
const path = require("path"),
|
|
fs = require("fs"),
|
|
WebSocket = require('ws'),
|
|
EventEmitter = require("events").EventEmitter
|
|
|
|
const events = new EventEmitter();
|
|
|
|
const constants = JSON.parse(fs.readFileSync(path.join(__dirname, "constants.json")))
|
|
|
|
var lastPong = 0
|
|
|
|
module.exports = {
|
|
"lanyard": undefined,
|
|
"socials": undefined,
|
|
"connected": false,
|
|
"lastLanyardUpdate": Date.now(),
|
|
|
|
"blogConnected": false,
|
|
"blogPosts": undefined,
|
|
|
|
"events": events,
|
|
|
|
"spins": 0,
|
|
}
|
|
|
|
function socketeer() {
|
|
var lanyard = new WebSocket('https://api.violets-purgatory.dev')
|
|
|
|
lanyard.on("error", (error) => {
|
|
console.log(error)
|
|
})
|
|
|
|
lanyard.on("close", () => {
|
|
console.log("Connection Closed. Attempting Reconnect in 30 seconds.")
|
|
module.exports.lanyard = constants.fallbackLanyard
|
|
module.exports.connected = false
|
|
setTimeout(() => {
|
|
socketeer()
|
|
}, 30000);
|
|
})
|
|
|
|
function ping(dur) {
|
|
lanyard.send(JSON.stringify({
|
|
op: 3
|
|
}))
|
|
setTimeout(() => {
|
|
ping(dur)
|
|
if (Date.now() - lastPong > 120000) {
|
|
lanyard.close()
|
|
console.log("Max duration since last pong exceeded- Closing socket.")
|
|
}
|
|
}, dur);
|
|
}
|
|
|
|
lanyard.addEventListener("message", async (res) => {
|
|
var data = JSON.parse(res.data)
|
|
// console.log(data.op)
|
|
if (data.op == 1) {
|
|
console.log("Connected to Discord Websocket!")
|
|
module.exports.connected = true
|
|
ping(30000)
|
|
lastPong = Date.now()
|
|
events.emit("lanyardConnect")
|
|
} else if (data.op == 3) {
|
|
lastPong = Date.now()
|
|
} else if (data.op == 0) {
|
|
module.exports.lanyard = data.d
|
|
module.exports.lastLanyardUpdate = Date.now()
|
|
events.emit("lanyardUpdate")
|
|
} else if (data.op == 4) {
|
|
module.exports.spins = data.spins
|
|
}
|
|
})
|
|
}
|
|
|
|
socketeer()
|
|
|
|
function blogSocket() {
|
|
var blog = new WebSocket('https://blog.violets-purgatory.dev')
|
|
|
|
blog.on("error", (error) => {
|
|
console.log(error)
|
|
})
|
|
|
|
blog.on("close", () => {
|
|
console.log("Connection Closed. Attempting Reconnect in 30 seconds.")
|
|
module.exports.blogConnected = false
|
|
setTimeout(() => {
|
|
blogSocket()
|
|
}, 30000);
|
|
})
|
|
|
|
function ping(dur) {
|
|
blog.send(JSON.stringify({
|
|
type: "ping"
|
|
}))
|
|
setTimeout(() => {
|
|
ping(dur)
|
|
if (Date.now() - lastPong > 120000) {
|
|
blog.close()
|
|
console.log("Max duration since last pong exceeded- Closing socket.")
|
|
}
|
|
}, dur);
|
|
}
|
|
|
|
blog.addEventListener("message", async (res) => {
|
|
var data = JSON.parse(res.data)
|
|
if (data.type == "init") {
|
|
console.log("Connected to Blog Websocket!")
|
|
module.exports.blogConnected = true
|
|
ping(30000)
|
|
lastPong = Date.now()
|
|
events.emit("blogConnect")
|
|
} else if (data.type == "ping") {
|
|
lastPong = Date.now()
|
|
} else if (data.type == "allPosts") {
|
|
console.log("Recieved posts!")
|
|
module.exports.blogPosts = data.data
|
|
events.emit("blogUpdate")
|
|
} else {
|
|
console.log(data)
|
|
}
|
|
})
|
|
}
|
|
|
|
blogSocket() |