const net = require("net") const User = require("../src/user.js") const RPL_WELCOME = '001' const ERR_NOSUCHNICK = '401' const ERR_NOSUCHCHANNEL = '403' const ERR_CANNOTSENDTOCHAN = '404' const ERR_UNKNOWNCOMMAND = '421' const ERR_ERRONEUSNICKNAME = '432' const ERR_NONICKNAMEGIVEN = '431' const ERR_NICKNAMEINUSE = '433' const ERR_NEEDMOREPARAMS = '461' let server = {} let registeredUserlist = require("../src/userlist.js") server.create = function create() { return net.createServer((socket) => { const user = new User(socket) socket.on('data', function (data) { let tokenized = data.toString("ascii").split("\r\n")[0].split(" ") let command = tokenized[0].toUpperCase() switch (command) { case "PING": if (tokenized[1] && tokenized[1] === "irc.example.com") { socket.write("PONG irc.example.com\r\n") } break; case "NICK": if (tokenized[1]) { let nickname = tokenized[1] // nick collision test if (!Object.keys(registeredUserlist).includes(nickname)) { user.setNickname(nickname) registeredUserlist[nickname] = user socket.write(RPL_WELCOME, " nick " + nickname + " succesfully added.") } else { socket.write(ERR_NICKNAMEINUSE, " nickname in use") } } else { socket.write(ERR_NONICKNAMEGIVEN, "ERROR: NO NICKNAME PROVIDED") } break; default: console.error(`Unknown command: ${command}`); } }).on('error', (err) => { console.error(err); }) }).on('error', (err) => { console.error(err); throw err; }); } module.exports = server