UNPKG

@hp4k1h5/terminordle

Version:

> multiplayer [wordle](https://www.powerlanguage.co.uk/wordle/) clone in your terminal

75 lines (74 loc) 2.66 kB
"use strict"; 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;