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() {
|
static get InterruptTypes() {
|
||||||
return {
|
return {
|
||||||
Never: 'never',
|
Never: 'never',
|
||||||
|
|
Loading…
Reference in New Issue