sync-pk-sp/index.js

80 lines
No EOL
2.6 KiB
JavaScript

const dotenv = require('dotenv')
dotenv.config()
const { Config, System } = require('SimplyAPI')
const { Util } = require('SimplyAPI')
const { initializeCache, determineAction, insertFront, removeFront, updateCustomStatus } = require('./dataManager')
let e
main = async () => {
openWebSocket()
}
openWebSocket = async () => {
const WebSocketClient = require('./WebsocketClient')
const wss = new WebSocketClient(Config.socket);
let initialPacket = { "op": "authenticate", "token": Config.token }
wss.onOpen = (_) => { wss.send(JSON.stringify(initialPacket)); }
wss.onClose = (e) => { console.log('SimplyWS/onClose :: %s', e); e = '' }
wss.onError = (e) => { console.log('SimplyWS/onError :: %s', e) }
wss.onMessage = (raw) => {
e = raw
let data = JSON.parse(e)
if (Object.keys(data).length === 0) return
switch (data.msg) {
case "Successfully authenticated":
console.log('::SimplyWS:: authenticated')
// cache current front
initializeCache()
break
case "Authentication violation: Token is missing or invalid. Goodbye :)":
console.log('::SimplyWS:: invalid token, exiting..')
process.exit(1)
case "update":
update(data)
break
default:
//unrecognizedMessage(data.msg)
break
}
}
}
update = async (data) => {
let target = data.target
switch (target) {
case 'frontHistory':
//response += 'Front has changed!'
await Util.asyncForEach(data.results, async (o) => {
let system = new System(Config)
let member = await system.getMemberById(o.content.member)
// insert
if (o.operationType == "insert") {
insertFront(member)
}
else {
// get current fronters and patch the list
let frontData = await system.getFronters()
let action = await determineAction(o, frontData)
// if delete operation, remove the member from the list
switch (action) {
case "remove":
removeFront(member)
break
case "customStatus":
updateCustomStatus(member)
break
}
}
})
break
default:
//unknownTarget(data.target)
break
}
}
main()