MenuModule.setConfigWithExtraArgs()
This commit is contained in:
parent
94da8798cf
commit
ff616c384f
|
@ -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();
|
||||
}
|
||||
);
|
||||
}
|
||||
};
|
|
@ -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',
|
||||
|
|
Loading…
Reference in New Issue