Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: lib/messaging.js

Issue 29345627: Issue 4129 - Reuse EventEmitter class in messaging module (Closed)
Patch Set: Created June 7, 2016, 4 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/messaging.js
===================================================================
--- a/lib/messaging.js
+++ b/lib/messaging.js
@@ -12,16 +12,18 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
*/
"use strict";
+let {EventEmitter} = require("events");
+
const MESSAGE_NAME = "AdblockPlus:Message";
const RESPONSE_NAME = "AdblockPlus:Response";
function isPromise(value)
{
// value instanceof Promise won't work - there can be different Promise
// classes (e.g. in different contexts) and there can also be promise-like
// classes (e.g. Task).
@@ -116,18 +118,18 @@ LightWeightPort.prototype =
* Communication port wrapping the message manager API to send and receive
* messages.
* @param {nsIMessageManager} messageManager
* @constructor
*/
function Port(messageManager)
{
this._messageManager = messageManager;
+ this._eventEmitter = new EventEmitter();
- this._callbacks = new Map();
this._responseCallbacks = new Map();
this._responseCallbackCounter = 0;
this._handleRequest = this._handleRequest.bind(this);
this._handleResponse = this._handleResponse.bind(this);
this._messageManager.addMessageListener(MESSAGE_NAME, this._handleRequest);
this._messageManager.addMessageListener(RESPONSE_NAME, this._handleResponse);
}
@@ -203,21 +205,17 @@ Port.prototype = {
{
this._responseCallbacks.delete(callbackID);
callback(processor.value);
}
},
_dispatch: function(messageName, payload, sender)
{
- let callbacks = this._callbacks.get(messageName);
- if (!callbacks)
- return undefined;
-
- callbacks = callbacks.slice();
+ let callbacks = this._eventEmitter.listeners(messageName);
let processor = new ResponseProcessor(messageName);
for (let callback of callbacks)
{
try
{
processor.add(callback(payload, sender));
}
catch (e)
@@ -241,37 +239,27 @@ Port.prototype = {
/**
* Adds a handler for the specified message.
* @param {string} messageName message that would trigger the callback
* @param {Port~messageHandler} callback
*/
on: function(messageName, callback)
{
- let callbacks = this._callbacks.get(messageName);
- if (callbacks)
- callbacks.push(callback);
- else
- this._callbacks.set(messageName, [callback]);
+ this._eventEmitter.on(messageName, callback);
},
/**
* Removes a handler for the specified message.
* @param {string} messageName message that would trigger the callback
* @param {Port~messageHandler} callback
*/
off: function(messageName, callback)
{
- let callbacks = this._callbacks.get(messageName);
- if (!callbacks)
- return;
-
- let index = callbacks.indexOf(callback);
- if (index >= 0)
- callbacks.splice(index, 1);
+ this._eventEmitter.off(messageName, callback);
},
/**
* Sends a message.
* @param {string} messageName message identifier
* @param [payload] data to attach to the message
*/
emit: function(messageName, payload)
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld