You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.4 KiB

  1. const net = require("net")
  2. const RPL_WELCOME = '001'
  3. const ERR_NOSUCHNICK = '401'
  4. const ERR_NOSUCHCHANNEL = '403'
  5. const ERR_CANNOTSENDTOCHAN = '404'
  6. const ERR_UNKNOWNCOMMAND = '421'
  7. const ERR_ERRONEUSNICKNAME = '432'
  8. const ERR_NICKNAMEINUSE = '433'
  9. const ERR_NEEDMOREPARAMS = '461'
  10. let server = {}
  11. let userlist = {
  12. 0:
  13. {
  14. "nick": "chris",
  15. 1: "some value"
  16. },
  17. 1:
  18. {
  19. "nick": "wayne",
  20. 1: "some_other_value"
  21. }
  22. }
  23. server.create = function create() {
  24. return net.createServer((socket) => {
  25. socket.on('data', function (data) {
  26. let tokenized = data.toString("ascii").split("\r\n")[0].split(" ")
  27. switch (tokenized[0].toUpperCase()) {
  28. case "PING":
  29. if (tokenized[1] && tokenized[1] === "irc.example.com") {
  30. socket.write("PONG irc.example.com\r\n")
  31. }
  32. break;
  33. case "NICK":
  34. if (tokenized[1]) {
  35. let nickname = tokenized[1]
  36. let nickNameCollision = 0
  37. for (let clientID in userlist) {
  38. console.log(clientID)
  39. if (userlist[clientID]["nick"] === nickname) {
  40. nickNameCollision = 1
  41. delete userlist[clientID]
  42. }
  43. }
  44. if (!nickNameCollision) {
  45. let index = Object.keys(userlist).length
  46. userlist[index] = {
  47. "nick": nickname
  48. }
  49. socket.write(RPL_WELCOME, " nick " + nickname + " succesfully added.")
  50. } else {
  51. socket.write(ERR_NICKNAMEINUSE, " nickname in use")
  52. }
  53. } else {
  54. socket.write("ERROR: NO NICKNAME PROVIDED")
  55. }
  56. break;
  57. default:
  58. console.error(`Unknown command: ${tokenized[0].toUpperCase()}`);
  59. }
  60. }).on('error', (err) => {
  61. console.error(err);
  62. })
  63. }).on('error', (err) => {
  64. console.error(err);
  65. throw err;
  66. });
  67. }
  68. module.exports = server