MenuModule.setConfigWithExtraArgs()

This commit is contained in:
Bryan Ashby 2022-10-13 22:43:41 -06:00
parent 94da8798cf
commit ff616c384f
No known key found for this signature in database
GPG Key ID: C2C1B501E4EFD994
2 changed files with 147 additions and 0 deletions

141
core/goldmine.js Normal file
View File

@ -0,0 +1,141 @@
/* jslint node: true */
'use strict';
// enigma-bbs
const { MenuModule } = require('../core/menu_module');
const { resetScreen } = require('../core/ansi_term');
const { Errors } = require('../core/enig_error');
const { trackDoorRunBegin, trackDoorRunEnd } = require('./door_util');
// deps
const async = require('async');
const _ = require('lodash');
const RLogin = require('rlogin');
exports.moduleInfo = {
name: 'gOLD mINE',
desc: 'gOLD mINE Community Door Server Module',
author: 'NuSkooler',
};
exports.getModule = class GoldmineModule extends MenuModule {
constructor(options) {
super(options);
this.setConfigWithExtraArgs(options);
// http://goldminebbs.com/
this.config.host = this.config.host || '165.232.153.209';
this.config.rloginPort = this.config.rloginPort || 513;
}
initSequence() {
let clientTerminated = false;
async.series(
[
callback => {
return this.validateConfigFields(
{
host: 'string',
rloginPort: 'number',
bbsTag: 'string',
},
callback
);
},
callback => {
this.client.term.write(resetScreen());
this.client.term.write('Connecting to gOLD mINE, please wait...\n');
const username = this.client.user.getSanitizedName();
let doorTracking;
const rlogin = new RLogin({
clientUsername: username,
serverUsername: `${this.config.bbsTag}${username}`,
host: this.config.host,
port: this.config.rloginPort,
terminalType: '',
terminalSpeed: '',
});
if (
_.isString(this.config.directDoorCode) &&
this.config.directDoorCode.length > 0
) {
rlogin.terminalType = `xtrn=${this.config.directDoorCode}`;
}
const rloginSend = buffer => {
return rlogin.send(buffer);
};
let pipeRestored = false;
const restorePipeAndFinish = err => {
if (pipeRestored) {
return;
}
pipeRestored = true;
if (this.client.term.output) {
this.client.term.output.removeListener('data', rloginSend);
}
if (doorTracking) {
trackDoorRunEnd(doorTracking);
}
return callback(err);
};
rlogin.on('error', err => {
// Eat up RLogin error with terminalSpeed not being a number
if (err === 'RLogin: invalid terminalSpeed argument.') {
return;
}
this.client.log.info(
`gOLD mINE rlogin client error: ${err.message || err}`
);
return restorePipeAndFinish(err);
});
rlogin.on('disconnect', () => {
this.client.log.info('Disconnected from gOLD mINE');
return restorePipeAndFinish(null);
});
rlogin.on('connect', connected => {
if (!connected) {
return callback(
Errors.General(
'Failed to establish connection to gOLD mINE'
)
);
}
this.client.log.info('Connected to CombatNet');
this.client.term.output.on('data', rloginSend);
doorTracking = trackDoorRunBegin(this.client);
});
rlogin.on('data', data => {
this.client.term.rawWrite(data);
});
// connect...
rlogin.connect();
},
],
err => {
if (err) {
this.client.log.warn({ error: err.message }, 'gOLD mINE error');
}
this.prevMenu();
}
);
}
};

View File

@ -42,6 +42,12 @@ exports.MenuModule = class MenuModule extends PluginModule {
}
}
setConfigWithExtraArgs(options) {
this.config = Object.assign({}, _.get(options, 'menuConfig.config'), {
extraArgs: options.extraArgs,
});
}
static get InterruptTypes() {
return {
Never: 'never',