replace socket.io usage with WebSockets

This commit is contained in:
Nick Krecklow
2020-05-05 16:49:01 -05:00
parent 2ee9c8b919
commit ca9e127e3e
10 changed files with 240 additions and 169 deletions

View File

@ -2,6 +2,7 @@ const Database = require('./database')
const MojangUpdater = require('./mojang')
const PingController = require('./ping')
const Server = require('./server')
const MessageOf = require('./message')
const config = require('../config')
const minecraftVersions = require('../minecraft_versions')
@ -36,43 +37,46 @@ class App {
handleClientConnection = (client) => {
if (config.logToDatabase) {
client.on('requestHistoryGraph', () => {
// Send historical graphData built from all serverRegistrations
const graphData = {}
client.on('message', (message) => {
if (message === 'requestHistoryGraph') {
// Send historical graphData built from all serverRegistrations
const graphData = {}
this.serverRegistrations.forEach((serverRegistration) => {
graphData[serverRegistration.serverId] = serverRegistration.graphData
})
this.serverRegistrations.forEach((serverRegistration) => {
graphData[serverRegistration.serverId] = serverRegistration.graphData
})
client.emit('historyGraph', graphData)
// Send graphData in object wrapper to avoid needing to explicity filter
// any header data being appended by #MessageOf since the graph data is fed
// directly into the flot.js graphing system
client.send(MessageOf('historyGraph', {
graphData: graphData
}))
}
})
}
client.emit('setPublicConfig', (() => {
// Remap minecraftVersion entries into name values
const minecraftVersionNames = {}
Object.keys(minecraftVersions).forEach(function (key) {
minecraftVersionNames[key] = minecraftVersions[key].map(version => version.name)
})
const initMessage = {
config: (() => {
// Remap minecraftVersion entries into name values
const minecraftVersionNames = {}
Object.keys(minecraftVersions).forEach(function (key) {
minecraftVersionNames[key] = minecraftVersions[key].map(version => version.name)
})
// Send configuration data for rendering the page
return {
graphDuration: config.graphDuration,
servers: this.serverRegistrations.map(serverRegistration => serverRegistration.data),
minecraftVersions: minecraftVersionNames,
isGraphVisible: config.logToDatabase
}
})())
// Send configuration data for rendering the page
return {
graphDuration: config.graphDuration,
servers: this.serverRegistrations.map(serverRegistration => serverRegistration.data),
minecraftVersions: minecraftVersionNames,
isGraphVisible: config.logToDatabase
}
})(),
mojangServices: this.mojangUpdater.getLastUpdate(),
servers: this.serverRegistrations.map(serverRegistration => serverRegistration.getPingHistory())
}
// Send last Mojang update, if any
this.mojangUpdater.sendLastUpdate(client)
// Send pingHistory of all ServerRegistrations
client.emit('add', this.serverRegistrations.map(serverRegistration => serverRegistration.getPingHistory()))
// Always send last
// This tells the frontend to do final processing and render
client.emit('syncComplete')
client.send(MessageOf('init', initMessage))
}
}