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,18 +124,21 @@ 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) { | 						} else { | ||||||
| 						// Session data | 							return null; | ||||||
|  | 						} | ||||||
|  | 					}, Namespaces); | ||||||
|  |  | ||||||
|  | 				if (methodToCall !== null) { | ||||||
| 					var	sessionData = { | 					var	sessionData = { | ||||||
| 							uid: uid, | 							uid: uid, | ||||||
| 							socket: socket, | 							socket: socket, | ||||||
| @@ -146,8 +149,8 @@ Sockets.init = function() { | |||||||
| 						socketArgs = []; | 						socketArgs = []; | ||||||
|  |  | ||||||
| 					// Construct the arguments that'll get passed into each socket method | 					// Construct the arguments that'll get passed into each socket method | ||||||
| 						if (args.length) { | 					if (payload.args.length) { | ||||||
| 							socketArgs = socketArgs.concat(args); | 						socketArgs = socketArgs.concat(payload.args); | ||||||
| 					} | 					} | ||||||
| 					if (callback !== undefined) { | 					if (callback !== undefined) { | ||||||
| 						socketArgs.push(callback); | 						socketArgs.push(callback); | ||||||
| @@ -155,15 +158,7 @@ Sockets.init = function() { | |||||||
| 					socketArgs.push(sessionData); | 					socketArgs.push(sessionData); | ||||||
|  |  | ||||||
| 					// winston.info('[socket.io] Executing: ' + payload.name); | 					// winston.info('[socket.io] Executing: ' + payload.name); | ||||||
| 						if (!subcommand) { | 					methodToCall.apply(Namespaces, socketArgs); | ||||||
| 							Namespaces[namespace][command].apply(Namespaces[namespace], socketArgs); |  | ||||||
| 						} else { |  | ||||||
| 							Namespaces[namespace][command][subcommand].apply(Namespaces[namespace][command], socketArgs); |  | ||||||
| 						} |  | ||||||
| 					}; |  | ||||||
|  |  | ||||||
| 				if (Namespaces[namespace]) { |  | ||||||
| 					executeHandler(payload.args); |  | ||||||
| 				} 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