mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	who needs recursion, bitch?
- enhanced socket abs layer so that a method call of infinite depth is supported (theoretically).
This commit is contained in:
		| @@ -124,46 +124,41 @@ Sockets.init = function() { | |||||||
| 		}); | 		}); | ||||||
|  |  | ||||||
| 		socket.on('*', function(payload, callback) { | 		socket.on('*', function(payload, callback) { | ||||||
|  |  | ||||||
| 			// Ignore all non-api messages | 			// Ignore all non-api messages | ||||||
| 			if (payload.name.substr(0, 4) !== 'api:') { | 			if (payload.name.substr(0, 4) !== 'api:') { | ||||||
| 				return; | 				return; | ||||||
| 			} else { | 			} else { | ||||||
| 				// Deconstruct the message | 				// Deconstruct the message | ||||||
| 				var parts = payload.name.slice(4).split('.'), | 				var parts = payload.name.slice(4).split('.'), | ||||||
| 					namespace = parts[0], | 					methodToCall = parts.reduce(function(prev, cur) { | ||||||
| 					command = parts[1], | 						if (prev !== null && prev[cur]) { | ||||||
| 					subcommand = parts[2],	// MUST ADD RECURSION (:P) | 							return prev[cur]; | ||||||
| 					executeHandler = function(args) { |  | ||||||
| 						// Session data |  | ||||||
| 						var	sessionData = { |  | ||||||
| 								uid: uid, |  | ||||||
| 								socket: socket, |  | ||||||
| 								rooms: rooms, |  | ||||||
| 								server: io, |  | ||||||
| 								userSockets: userSockets |  | ||||||
| 							}, |  | ||||||
| 							socketArgs = []; |  | ||||||
|  |  | ||||||
| 						// Construct the arguments that'll get passed into each socket method |  | ||||||
| 						if (args.length) { |  | ||||||
| 							socketArgs = socketArgs.concat(args); |  | ||||||
| 						} |  | ||||||
| 						if (callback !== undefined) { |  | ||||||
| 							socketArgs.push(callback); |  | ||||||
| 						} |  | ||||||
| 						socketArgs.push(sessionData); |  | ||||||
|  |  | ||||||
| 						// winston.info('[socket.io] Executing: ' + payload.name); |  | ||||||
| 						if (!subcommand) { |  | ||||||
| 							Namespaces[namespace][command].apply(Namespaces[namespace], socketArgs); |  | ||||||
| 						} else { | 						} else { | ||||||
| 							Namespaces[namespace][command][subcommand].apply(Namespaces[namespace][command], socketArgs); | 							return null; | ||||||
| 						} | 						} | ||||||
| 					}; | 					}, Namespaces); | ||||||
|  |  | ||||||
| 				if (Namespaces[namespace]) { | 				if (methodToCall !== null) { | ||||||
| 					executeHandler(payload.args); | 					var	sessionData = { | ||||||
|  | 							uid: uid, | ||||||
|  | 							socket: socket, | ||||||
|  | 							rooms: rooms, | ||||||
|  | 							server: io, | ||||||
|  | 							userSockets: userSockets | ||||||
|  | 						}, | ||||||
|  | 						socketArgs = []; | ||||||
|  |  | ||||||
|  | 					// Construct the arguments that'll get passed into each socket method | ||||||
|  | 					if (payload.args.length) { | ||||||
|  | 						socketArgs = socketArgs.concat(payload.args); | ||||||
|  | 					} | ||||||
|  | 					if (callback !== undefined) { | ||||||
|  | 						socketArgs.push(callback); | ||||||
|  | 					} | ||||||
|  | 					socketArgs.push(sessionData); | ||||||
|  |  | ||||||
|  | 					// winston.info('[socket.io] Executing: ' + payload.name); | ||||||
|  | 					methodToCall.apply(Namespaces, socketArgs); | ||||||
| 				} else { | 				} else { | ||||||
| 					winston.warn('[socket.io] Unrecognized message: ' + payload.name); | 					winston.warn('[socket.io] Unrecognized message: ' + payload.name); | ||||||
| 				} | 				} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user