From a721eb4195c8ba08a84bce575620cbfb65d9a5f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20H=C3=B6ltgen?= Date: Thu, 16 Jul 2020 14:37:06 +0200 Subject: [PATCH 1/5] Added server instance.close(socket) method --- README.md | 15 ++++++++++++++- server.js | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e41a94e..0aeba0c 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,7 @@ That's all you need to get started. For the detailed API, continue reading belo - [SocketIOFileUpload.listen(app)](#socketiofileuploadlistenapp) - [SocketIOFileUpload.router](#socketiofileuploadrouter) - [instance.listen(socket)](#instancelistensocket) + - [instance.close(socket)](#instanceclosesocket) - [instance.abort(id, socket)](#instanceabortid-socket) - [instance.dir = "/path/to/upload/directory"](#instancedir--pathtouploaddirectory) - [instance.mode = "0666"](#instancemode--0666) @@ -438,7 +439,7 @@ instance.wrapData = { #### instance.exposePrivateFunction = false If true this will expose some functions used in intern to personalize action on the topic. This is used alongside with wrapData to add custom check or logic before process the file upload. -If true you will have access to: +If true you will have access to: ``` instance.chunckCallback instance.readyCallback @@ -557,6 +558,18 @@ io.sockets.on("connection", function(socket){ }); ``` +#### instance.listen(socket) + +No longer listen for uploads occuring on this Socket.IO socket. + +```javascript +io.sockets.on("connection", function(socket){ + var uploader = new SocketIOFileUpload(); + uploader.listen(socket); + uploader.close(socket); +}); +``` + #### instance.abort(id, socket) Aborts an upload that is in progress. Example use case: diff --git a/server.js b/server.js index 60a2d92..31da9ed 100644 --- a/server.js +++ b/server.js @@ -81,6 +81,19 @@ function SocketIOFileUploadServer(options) { */ self.topicName = _getOption("topicName", "siofu"); + /** + * Object for keeping the references to bound functions + * This is neccessary because the disconnect listener key + * is not unique. + */ + self.functions = { + // "start" : {}, + // "progress" : {}, + // "complete" : {}, + "disconnect" : {} + }; + + /** * WrapData allow you to wrap the Siofu messages into a predefined format. * You can then easily use Siofu packages even in strongly typed topic. @@ -602,10 +615,29 @@ function SocketIOFileUploadServer(options) { socket.on(self.topicName + "_progress", _uploadProgress(socket)); socket.on(self.topicName + "_done", _uploadDone(socket)); } + self.functions.disconnect[socket.id] = _onDisconnect(socket); + socket.on("disconnect", self.functions.disconnect[socket.id]); + }; - socket.on("disconnect", _onDisconnect(socket)); + /** + * Public method. Undo listening from listen method. + * + * @param {Socket} socket The socket on which not to listen anymore + * @return {void} + */ + this.close = function (socket) { + if(_isWrapDataWellConfigured() && self.wrapData) + socket.removeAllListeners(self.topicName); + else { + socket.removeAllListeners(self.topicName + "_start"); + socket.removeAllListeners(self.topicName + "_progress"); + socket.removeAllListeners(self.topicName + "_done"); + } + + socket.off("disconnect", self.functions.disconnect[socket.id]); }; + /** * Public method. Abort an upload that may be in progress. Throws an * exception if the specified file upload is not in progress. From aa4338ba9a9c5e726885e1d0abb653fdf757504a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20H=C3=B6ltgen?= Date: Thu, 16 Jul 2020 14:49:08 +0200 Subject: [PATCH 2/5] Added server instance.close(socket) method and added to readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0aeba0c..9bbe780 100644 --- a/README.md +++ b/README.md @@ -558,7 +558,7 @@ io.sockets.on("connection", function(socket){ }); ``` -#### instance.listen(socket) +#### instance.close(socket) No longer listen for uploads occuring on this Socket.IO socket. From 37c0d9db5e6e941c47dcfcaa806e95ae79c1c923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20H=C3=B6ltgen?= Date: Sat, 18 Jul 2020 21:48:29 +0200 Subject: [PATCH 3/5] Call _onDisconnect in close-method --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index 31da9ed..6d4b1df 100644 --- a/server.js +++ b/server.js @@ -633,8 +633,8 @@ function SocketIOFileUploadServer(options) { socket.removeAllListeners(self.topicName + "_progress"); socket.removeAllListeners(self.topicName + "_done"); } - socket.off("disconnect", self.functions.disconnect[socket.id]); + self.functions.disconnect[socket.id](); }; From db5b036fab370b5960fe837e37d15171340b4328 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20H=C3=B6ltgen?= Date: Mon, 20 Jul 2020 11:24:02 +0200 Subject: [PATCH 4/5] Remove disconnect-function after use --- server.js | 1 + 1 file changed, 1 insertion(+) diff --git a/server.js b/server.js index 6d4b1df..e83d4b0 100644 --- a/server.js +++ b/server.js @@ -575,6 +575,7 @@ function SocketIOFileUploadServer(options) { return; } } + delete self.functions.disconnect[socket.id]; }; }; From 97dac5c55ba2e01c85217d2d188c7b99d3d03990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20H=C3=B6ltgen?= Date: Mon, 20 Jul 2020 11:28:44 +0200 Subject: [PATCH 5/5] Remove disconnect-function in close-method --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index e83d4b0..4ca283f 100644 --- a/server.js +++ b/server.js @@ -575,7 +575,6 @@ function SocketIOFileUploadServer(options) { return; } } - delete self.functions.disconnect[socket.id]; }; }; @@ -636,6 +635,7 @@ function SocketIOFileUploadServer(options) { } socket.off("disconnect", self.functions.disconnect[socket.id]); self.functions.disconnect[socket.id](); + delete self.functions.disconnect[socket.id]; };