56 lines
No EOL
1.7 KiB
JavaScript
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 |