@hp4k1h5/terminordle
Version:
> multiplayer [wordle](https://www.powerlanguage.co.uk/wordle/) clone in your terminal
75 lines (74 loc) • 2.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.again = exports.guess = exports.requestSession = void 0;
const chalk = require("chalk");
const structs_1 = require("../../lib/structs");
const _1 = require("./");
const __1 = require("../../");
const printer_1 = require("../../cli/printer");
const repl_1 = require("../../cli/repl");
const msg_1 = require("./msg");
// let input_data = ''
// process.stdin.on('data', function (input) {
// input_data += input // Reading input from STDIN
// })
async function requestSession(address, session_id) {
// create connection
const ws = await (0, _1.createWS)(address);
// server eventually responds with user_id
// request session id
if (!session_id) {
(0, msg_1.msg)(ws, { type: structs_1.ServerMsgType.create, user_id: ws.user_id });
}
else {
(0, msg_1.msg)(ws, { type: structs_1.ServerMsgType.join, user_id: ws.user_id, session_id });
}
return ws;
}
exports.requestSession = requestSession;
let deciding = false;
function guess(cnx, message) {
if (deciding || !message.content || typeof message.content === 'string') {
return;
}
(0, __1.updateAlphabet)(message.content.guess);
printer_1.display.addToGuesses(message.content.guess);
printer_1.display.alterMessage(chalk.hex('#ffaf5f')(`${message.content.rem} guess${message.content.rem > 1 ? 'es' : ''} remaining`));
// replace cursor text
let replace = false;
if (repl_1.rl.getCursorPos().cols)
replace = true;
if (replace)
repl_1.rl.write(null, { ctrl: true, name: 'u' });
printer_1.display.print();
if (replace)
repl_1.rl.write(null, { ctrl: true, name: 'y' });
}
exports.guess = guess;
async function again(cnx, message) {
if (message.user_id) {
printer_1.display.alterMessage(`WINNER: ${message['user_id']}!`, printer_1.MsgColors['green']);
}
else {
printer_1.display.alterMessage(`GAME OVER: ${message['content']}!`, printer_1.MsgColors.redBright);
}
printer_1.display.print();
// close readline
repl_1.rl.close();
deciding = true;
// open new realine
const again_rl = (0, repl_1.resetRl)(cnx);
const again_yn = await (0, repl_1.question)('play again? y/n ', again_rl);
again_rl.close();
// send response
(0, msg_1.msg)(cnx, { type: structs_1.ServerMsgType.again, content: again_yn });
if (!/^y/i.test(again_yn)) {
return;
}
// reset screen
printer_1.display.clear(cnx.user_id, cnx.session_id);
deciding = false;
// start a new repl
await (0, repl_1.repl)(cnx);
}
exports.again = again;