ztavern/node-server-manager/Lib/ServerLogWatcher.js
2024-10-18 00:19:19 +00:00

56 lines
No EOL
1.7 KiB
JavaScript

const EventParser = require('./EventParser.js')
const ws = require('ws')
const _EventDispatcher = require('./EventDispatcher.js')
class EventLogWatcher extends EventParser {
constructor (logServerURI, Server, Manager) {
super(Server)
this.logServerURI = logServerURI
this.Server = Server
this.Manager = Manager
this.EventDispatcher = new _EventDispatcher(Server, Manager)
}
async init () {
try {
var socket = new ws(this.logServerURI)
socket.onmessage = async (msg) => {
this.onLine(msg.data)
}
socket.on('error', (error) => {
console.log(`Server Log Watcher: ${error}`)
})
socket.onclose = async () => {
console.log(`Connection to log server (${this.logServerURI}) lost, reconnecting in 5 seconds...`)
setTimeout(() => {
this.init()
}, 5 * 1000)
}
}
catch (e) {
this.Manager.logger.writeLn(`Remote log server generated an error: ${e.toString()}`)
}
}
async onLine(line) {
line = line.replace(/[^\x20-\x7E]+/g, '')
this.Server.Rcon.isRunning = true
this.Server.emit('line', line)
this.Server.emit('stripped_line', line.trim().replace(new RegExp(/([0-9]+:[0-9]+)\s+/g), ''))
const lines = line.split('\n').filter(l => l.length > 0)
for (var i = 0; i < lines.length; i++) {
const event = this.parseEvent(lines[i].trim())
if (!event) return
this.EventDispatcher.dispatchCallback(event)
}
}
}
module.exports = EventLogWatcher