From b9d4d6b2f30f2460d588b47f678f138da500db1a Mon Sep 17 00:00:00 2001 From: Wayne Date: Tue, 16 Jul 2019 22:18:36 +0200 Subject: [PATCH 1/3] added command_quit command --- src/server.js | 15 +++++++++++++++ src/user.js | 22 ++++++++++++++++++++++ test/command_nick.js | 2 -- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/server.js b/src/server.js index fa6572d..4a63fcb 100644 --- a/src/server.js +++ b/src/server.js @@ -62,6 +62,8 @@ server.create = function create() { let address = user.getAddress() socket.write(`001 ${user.nickname} :Welcome to the example IRC Project ${user.nickname}!~${user.username}@${address}`) break; + case "QUIT": + server.closeConnection(user) default: console.error(`Unknown command: ${command}`); } @@ -77,6 +79,19 @@ server.create = function create() { return userlist } + server.getUserObjectFromNickName = function (nickname) { + user_list = server.getUserlist() + if (nickname in user_list) + return user_list[nickname] + } + + server.closeConnection = function (user_nickname) { + console.log(user_nickname) + userObject = server.getUserObjectFromNickName(user_nickname) + userObject.closeConnection() + delete server.getUserlist()[user_nickname] + } + return server } diff --git a/src/user.js b/src/user.js index a71219f..7f0b2ef 100644 --- a/src/user.js +++ b/src/user.js @@ -22,6 +22,28 @@ function User(socket) { this.getAddress = function() { return this.connection.address().address } + this.setNickname = function (nickname) { + this.nickname = nickname + } + this.setRealName = function (realname) { + this.realname = realname + } + + this.quit = function (quit_message) { + if (quit_message === undefined) + this.sendMessage("QUIT") + else this.sendMessage(("QUIT :" + quit_message)) + } + + this.closeConnection = function () { + socket.close() + } + + this.sendMessage = function (message) { + connection.write(message) + } + + } module.exports = User diff --git a/test/command_nick.js b/test/command_nick.js index 5fb8733..19b0fd1 100644 --- a/test/command_nick.js +++ b/test/command_nick.js @@ -56,8 +56,6 @@ describe("NICK no NICK given", function () { done("Destroyed socket without answering") } - console.log(server.getUserObjectFromNickName("some_nick")) - server.emit("connection", mockedSock) mockedSock.emit('data', Buffer.from("NICK \r\n", "ascii")) }) From 08b3bfaf239a918e79415ea79b50792bed8eb146 Mon Sep 17 00:00:00 2001 From: Wayne Date: Tue, 16 Jul 2019 22:47:12 +0200 Subject: [PATCH 2/3] added command_quit command --- test/command_quit.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/test/command_quit.js b/test/command_quit.js index 21dbdb7..80e0dfe 100644 --- a/test/command_quit.js +++ b/test/command_quit.js @@ -16,13 +16,7 @@ describe("QUIT OK", function () { server.emit('connection', mockedSock) mockedSock.emit('data', Buffer.from("NICK nick" + i + "\r\n", "ascii")) } - - mockedSock.quit("gone to have lunch") - - - mockedSock.destroy = function () { - done("Destroyed socket without answering") - } + console.log(server.getUserlist()) }) }) \ No newline at end of file From 53f75858bb7f006b9186a612792ae14af76c58fe Mon Sep 17 00:00:00 2001 From: Wayne Date: Tue, 16 Jul 2019 23:04:56 +0200 Subject: [PATCH 3/3] finished command_quit command tests --- src/server.js | 48 +++++++++++++++++++------------------------- src/user.js | 11 +--------- test/command_quit.js | 5 ++++- 3 files changed, 26 insertions(+), 38 deletions(-) diff --git a/src/server.js b/src/server.js index 4a63fcb..20332a9 100644 --- a/src/server.js +++ b/src/server.js @@ -21,15 +21,15 @@ server.create = function create() { let splitted = data.toString("ascii").split("\r\n")[0].split(" ") let tokenized = [] let lastParam = -1 - for(let i = 0; i < splitted.length; i++) { - if (lastParam > 0) { - tokenized[lastParam] = tokenized[lastParam] + " " + splitted[i] - } else if (splitted[i].charAt(0) == ":" && i > 0) { - lastParam = i - tokenized[lastParam] = splitted[i] - } else { - tokenized[i] = splitted[i] - } + for (let i = 0; i < splitted.length; i++) { + if (lastParam > 0) { + tokenized[lastParam] = tokenized[lastParam] + " " + splitted[i] + } else if (splitted[i].charAt(0) == ":" && i > 0) { + lastParam = i + tokenized[lastParam] = splitted[i] + } else { + tokenized[i] = splitted[i] + } } let command = tokenized[0].toUpperCase() switch (command) { @@ -57,13 +57,14 @@ server.create = function create() { break; case "USER": - // ignoring servername and hostname, not useful these days - user.register(tokenized[1], tokenized[4]) - let address = user.getAddress() - socket.write(`001 ${user.nickname} :Welcome to the example IRC Project ${user.nickname}!~${user.username}@${address}`) - break; + // ignoring servername and hostname, not useful these days + user.register(tokenized[1], tokenized[4]) + let address = user.getAddress() + socket.write(`001 ${user.nickname} :Welcome to the example IRC Project ${user.nickname}!~${user.username}@${address}`) + break; case "QUIT": - server.closeConnection(user) + server.closeConnection(user.nickname) + break; default: console.error(`Unknown command: ${command}`); } @@ -75,21 +76,14 @@ server.create = function create() { throw err; }); - server.getUserlist = function() { - return userlist - } - - server.getUserObjectFromNickName = function (nickname) { - user_list = server.getUserlist() - if (nickname in user_list) - return user_list[nickname] + server.getUserlist = function () { + return userlist } server.closeConnection = function (user_nickname) { - console.log(user_nickname) - userObject = server.getUserObjectFromNickName(user_nickname) - userObject.closeConnection() - delete server.getUserlist()[user_nickname] + let user = userlist[user_nickname] + user.closeConnection() + delete userlist[user_nickname]; } return server diff --git a/src/user.js b/src/user.js index 7f0b2ef..4042f40 100644 --- a/src/user.js +++ b/src/user.js @@ -29,19 +29,10 @@ function User(socket) { this.realname = realname } - this.quit = function (quit_message) { - if (quit_message === undefined) - this.sendMessage("QUIT") - else this.sendMessage(("QUIT :" + quit_message)) - } - this.closeConnection = function () { - socket.close() + socket.destroy() } - this.sendMessage = function (message) { - connection.write(message) - } } diff --git a/test/command_quit.js b/test/command_quit.js index 80e0dfe..f4828a8 100644 --- a/test/command_quit.js +++ b/test/command_quit.js @@ -15,8 +15,11 @@ describe("QUIT OK", function () { server.emit('connection', mockedSock) mockedSock.emit('data', Buffer.from("NICK nick" + i + "\r\n", "ascii")) + mockedSock.destroy = function () { + done() + } } - console.log(server.getUserlist()) + server.getUserlist()["nick0"].connection.emit('data', Buffer.from("QUIT :Gone to have lunch\r\n", "ascii")) }) }) \ No newline at end of file