App > Stop listening to socket events

This commit is contained in:
brunosimon
2019-06-05 23:36:59 +02:00
parent 2a9a4ca2e1
commit 6338fc8ac8
6 changed files with 95 additions and 37 deletions
+36 -15
View File
@@ -30,8 +30,9 @@ class Chat
// Create a channel for this specific chat // Create a channel for this specific chat
this.chatSocket = this.config.socket.of('/project/' + this.slug + '/chat') this.chatSocket = this.config.socket.of('/project/' + this.slug + '/chat')
// Connection event // Callbacks
this.chatSocket.on('connection', (socket) => this.socketCallbacks = {}
this.socketCallbacks.connection = (socket) =>
{ {
// Create user // Create user
const user = this.createUser() const user = this.createUser()
@@ -49,8 +50,10 @@ class Chat
broadcastUser.color = user.color broadcastUser.color = user.color
socket.emit('user', broadcastUser) socket.emit('user', broadcastUser)
// On message
socket.on('message', (data) => const userSocketCallbacks = {}
userSocketCallbacks.message = (data) =>
{ {
// Add ID and save // Add ID and save
data.id = ids.getId() data.id = ids.getId()
@@ -74,10 +77,9 @@ class Chat
{ {
console.log(`${chalk.green.bold('chat > socket')} - ${chalk.cyan('message')} - ${chalk.cyan(user.name)} - ${chalk.cyan(data.text)}`) console.log(`${chalk.green.bold('chat > socket')} - ${chalk.cyan('message')} - ${chalk.cyan(user.name)} - ${chalk.cyan(data.text)}`)
} }
}) }
// On update user userSocketCallbacks.updateUser = (data) =>
socket.on('update_user', (data) =>
{ {
const newName = data.name.trim() const newName = data.name.trim()
const oldName = user.name const oldName = user.name
@@ -96,10 +98,9 @@ class Chat
{ {
console.log(`${chalk.green.bold('chat > socket')} - ${chalk.cyan('update_user')} - ${chalk.cyan(oldName + ' > ' + user.name)}`) console.log(`${chalk.green.bold('chat > socket')} - ${chalk.cyan('update_user')} - ${chalk.cyan(oldName + ' > ' + user.name)}`)
} }
}) }
// On alert userSocketCallbacks.alert = () =>
socket.on('alert', () =>
{ {
// Transfer to the watcher socket // Transfer to the watcher socket
this.watcherSocket.emit('alert') this.watcherSocket.emit('alert')
@@ -109,14 +110,28 @@ class Chat
{ {
console.log(`${chalk.green.bold('chat > socket')} - ${chalk.cyan('alert')} - ${chalk.cyan(user.name)}`) console.log(`${chalk.green.bold('chat > socket')} - ${chalk.cyan('alert')} - ${chalk.cyan(user.name)}`)
} }
}) }
// On disconnect userSocketCallbacks.disconnect = () =>
socket.on('disconnect', () =>
{ {
// Stop listening
socket.off('message', userSocketCallbacks.message)
socket.off('update_user', userSocketCallbacks.updateUser)
socket.off('alert', userSocketCallbacks.alert)
socket.off('disconnect', userSocketCallbacks.disconnect)
console.log(`${chalk.green.bold('chat > socket')} - ${chalk.cyan('disconnect')} - ${chalk.cyan(user.name)}`) console.log(`${chalk.green.bold('chat > socket')} - ${chalk.cyan('disconnect')} - ${chalk.cyan(user.name)}`)
}) }
})
// On message
socket.on('message', userSocketCallbacks.message)
socket.on('update_user', userSocketCallbacks.updateUser)
socket.on('alert', userSocketCallbacks.alert)
socket.on('disconnect', userSocketCallbacks.disconnect)
}
// Connection event
this.chatSocket.on('connection', this.socketCallbacks.connection)
} }
createUser() createUser()
@@ -261,6 +276,12 @@ class Chat
this.chatSocket.emit('message', broadcastMessage) this.chatSocket.emit('message', broadcastMessage)
}, 1500) }, 1500)
} }
destructor()
{
// Stop listening
this.chatSocket.off('connection', this.socketCallbacks.connection)
}
} }
module.exports = Chat module.exports = Chat
+5
View File
@@ -141,6 +141,11 @@ class Files
return result return result
} }
destructor()
{
}
} }
module.exports = Files module.exports = Files
+28 -15
View File
@@ -223,8 +223,10 @@ class App
console.log(`${chalk.green.bold('app > socket')} - ${chalk.cyan('connect')} - ${chalk.cyan(socket.id)}`) console.log(`${chalk.green.bold('app > socket')} - ${chalk.cyan('connect')} - ${chalk.cyan(socket.id)}`)
} }
// Start project // Callbacks
socket.on('start_project', (data) => const callbacks = {}
callbacks.startProject = (data) =>
{ {
data.watcherSocket = socket // Add watcher socket data.watcherSocket = socket // Add watcher socket
project = this.projects.createProject(data) project = this.projects.createProject(data)
@@ -242,10 +244,9 @@ class App
} }
socket.emit('started') socket.emit('started')
}) }
// Update file callbacks.updateFile = (data) =>
socket.on('update_file', (data) =>
{ {
project.files.createVersion(data.path, data.content) project.files.createVersion(data.path, data.content)
project.zipNeedsUpdate = true project.zipNeedsUpdate = true
@@ -259,10 +260,9 @@ class App
{ {
console.log(util.inspect(project.files.describe(), { depth: null, colors: true })) console.log(util.inspect(project.files.describe(), { depth: null, colors: true }))
} }
}) }
// Create file callbacks.createFile = (data) =>
socket.on('create_file', (data) =>
{ {
project.files.create(data.path, data.content) project.files.create(data.path, data.content)
project.zipNeedsUpdate = true project.zipNeedsUpdate = true
@@ -276,10 +276,9 @@ class App
{ {
console.log(util.inspect(project.files.describe(), { depth: null, colors: true })) console.log(util.inspect(project.files.describe(), { depth: null, colors: true }))
} }
}) }
// Delete file callbacks.deleteFile = (data) =>
socket.on('delete_file', (data) =>
{ {
project.files.delete(data.path) project.files.delete(data.path)
project.zipNeedsUpdate = true project.zipNeedsUpdate = true
@@ -293,19 +292,33 @@ class App
{ {
console.log(util.inspect(project.files.describe(), { depth: null, colors: true })) console.log(util.inspect(project.files.describe(), { depth: null, colors: true }))
} }
}) }
// Disconnect callbacks.disconnect = () =>
socket.on('disconnect', () =>
{ {
// Delete project
this.projects.deleteProject(project.slug) this.projects.deleteProject(project.slug)
// Stop listening
socket.off('start_project', callbacks.startProject)
socket.off('update_file', callbacks.updateFile)
socket.off('create_file', callbacks.createFile)
socket.off('delete_file', callbacks.disconnect)
socket.off('disconnect', callbacks.disconnect)
// Debug // Debug
if(this.config.debug >= 1) if(this.config.debug >= 1)
{ {
console.log(`${chalk.green.bold('app > socket')} - ${chalk.cyan('disconnect')} - ${chalk.cyan(socket.id)}`) console.log(`${chalk.green.bold('app > socket')} - ${chalk.cyan('disconnect')} - ${chalk.cyan(socket.id)}`)
} }
}) }
// Start listening
socket.on('start_project', callbacks.startProject)
socket.on('update_file', callbacks.updateFile)
socket.on('create_file', callbacks.createFile)
socket.on('delete_file', callbacks.deleteFile)
socket.on('disconnect', callbacks.disconnect)
}) })
} }
+15 -3
View File
@@ -43,8 +43,9 @@ class Project
// Create a channel for this specific project // Create a channel for this specific project
this.projectSocket = this.config.socket.of('/project/' + this.slug) this.projectSocket = this.config.socket.of('/project/' + this.slug)
// Connection event // Callbacks
this.projectSocket.on('connection', (socket) => this.socketCallbacks = {}
this.socketCallbacks.connection = (socket) =>
{ {
this.projectSocket.emit('update_project', this.describe()) this.projectSocket.emit('update_project', this.describe())
@@ -53,7 +54,10 @@ class Project
{ {
console.log(`${chalk.green.bold('project > socket')} - ${chalk.cyan('connection')} - ${chalk.cyan(socket.id)}`) console.log(`${chalk.green.bold('project > socket')} - ${chalk.cyan('connection')} - ${chalk.cyan(socket.id)}`)
} }
}) }
// Connection event
this.projectSocket.on('connection', this.socketCallbacks.connection)
} }
getZipBuffer() getZipBuffer()
@@ -306,6 +310,14 @@ class ClassName extends AnotherClass
destructor() destructor()
{ {
// Destroy chat and files
this.files.destructor()
this.chat.destructor()
// Stop listening
this.projectSocket.off('connection', this.socketCallbacks.connection)
// Emit event
this.projectSocket.emit('destruct') this.projectSocket.emit('destruct')
} }
} }
+7 -3
View File
@@ -16,8 +16,9 @@ class Projects
// Save original socket and create a channel for projects // Save original socket and create a channel for projects
this.projectsSocket = this.config.socket.of('/projects') this.projectsSocket = this.config.socket.of('/projects')
// Connection event // Callbacks
this.projectsSocket.on('connection', (socket) => this.socketCallbacks = {}
this.socketCallbacks.connection = (socket) =>
{ {
// // Send the config to the new socket // // Send the config to the new socket
socket.emit('config', { domain: this.config.domain, server: this.config.server }) socket.emit('config', { domain: this.config.domain, server: this.config.server })
@@ -29,7 +30,10 @@ class Projects
{ {
console.log(`${chalk.green.bold('projects > socket')} - ${chalk.cyan('connection')} - ${chalk.cyan(socket.id)}`) console.log(`${chalk.green.bold('projects > socket')} - ${chalk.cyan('connection')} - ${chalk.cyan(socket.id)}`)
} }
}) }
// Connection event
this.projectsSocket.on('connection', this.socketCallbacks.connection)
} }
createProject(_options) createProject(_options)
+4 -1
View File
@@ -16,7 +16,10 @@
}, },
"main": "bin/index.js", "main": "bin/index.js",
"scripts": { "scripts": {
"demo-folder": "cd test/demo-folder-2 && node ../../bin 'Demo folder' --open false --test true --initial-send true", "server": "node ./bin --server true",
"demo-folder-host-1": "cd test/demo-folder-1 && node ../../bin 'Demo folder 1' --open false --host localhost",
"demo-folder-host-2": "cd test/demo-folder-2 && node ../../bin 'Demo folder 2' --open false --host localhost",
"demo-folder": "cd test/demo-folder-2 && node ../../bin 'Demo folder' --open false --test true",
"app-dev": "node app/build/dev-server.js", "app-dev": "node app/build/dev-server.js",
"app-build": "node app/build/build.js", "app-build": "node app/build/build.js",
"site-dev": "node site/build/dev-server.js", "site-dev": "node site/build/dev-server.js",