From 975171a86b1c3eae8bebb91e1b87f6efcf990ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= Date: Sun, 8 Jul 2012 21:06:19 +0200 Subject: [PATCH] Make handleMessage async --- src/node/handler/PadMessageHandler.js | 34 ++++++++++++++++++++------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index a0aef664..d02e6537 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -159,11 +159,7 @@ exports.handleDisconnect = function(client) */ exports.handleMessage = function(client, message) { - _.map(hooks.callAll( "handleMessage", { client: client, message: message }), function ( newmessage ) { - if ( newmessage || newmessage === null ) { - message = newmessage; - } - }); + if(message == null) { messageLogger.warn("Message is null!"); @@ -175,6 +171,23 @@ exports.handleMessage = function(client, message) return; } + var handleMessageHook = function(callback){ + var dropMessage = false; + + // Call handleMessage hook. If a plugin returns null, the message will be dropped. Note that for all messages + // handleMessage will be called, even if the client is not authorized + hooks.aCallAll("handleMessage", { client: client, message: message }, function ( messages ) { + _.each(messages, function(newMessage){ + if ( newmessage === null ) { + dropMessage = true; + } + }); + + // If no plugins explicitly told us to drop the message, its ok to proceed + if(!dropMessage){ callback() }; + }); + } + var finalHandler = function () { //Check what type of message we get and delegate to the other methodes if(message.type == "CLIENT_READY") { @@ -203,11 +216,18 @@ exports.handleMessage = function(client, message) } }; - if (message && message.padId) { + if (message) { async.series([ + handleMessageHook, //check permissions function(callback) { + + if(!message.padId){ + // If the message has a padId we assume the client is already known to the server and needs no re-authorization + callback(); + return; + } // Note: message.sessionID is an entirely different kind of // session from the sessions we use here! Beware! FIXME: Call // our "sessions" "connections". @@ -231,8 +251,6 @@ exports.handleMessage = function(client, message) }, finalHandler ]); - } else { - finalHandler(); } }