Skip to content

Instantly share code, notes, and snippets.

@MrDHat
Last active December 19, 2015 15:48
Show Gist options
  • Save MrDHat/5978537 to your computer and use it in GitHub Desktop.
Save MrDHat/5978537 to your computer and use it in GitHub Desktop.
A Pub/Sub API (Originally written for Gaia)
this.EventEmmiter = (function() {
var events = {};
var UUID = -1;
// Function to publish/trigger events
function trigger(evt, args) {
if (!events[evt]) {
return false;
}
var subscribers = events[evt];
var len = 0;
if (subscribers) {
len = subscribers.length;
}
while (len--) {
subscribers[len].callback(evt, args);
}
return true;
}
// Function to subscribe to events
function on(evt, callback) {
if (!events[evt]) {
events[evt] = [];
}
var token = (++UUID).toString();
events[evt].push({
token: token,
callback: callback
});
return token;
}
// Function to Unsubscribe
// Token based unsubscription
function off(token) {
for (var evt in events) {
if (events[evt]) {
for (var i = 0; i < events.length; i++) {
if (events[evt][i].token === token) {
events[evt].splice(i, 1);
return token;
}
}
}
}
return false;
}
return {
trigger: publish,
on: subscribe,
off: unsubscribe
};
}());
@MrDHat
Copy link
Author

MrDHat commented Dec 16, 2013

Usage

  • Subscribing to an event:

EventEmmiter.on(evt, callback);

evt: The event you want to subscribe to.

callback: The function to be called when that event occurs.

Example:

var sub = EventEmmiter.on('login', function(evt, args) {
  console.log(evt + 'occured, arguemnts supplied: ' + args);
});

Note: 'sub' is later used to unsubscribe from the event.

  • Publishing an event:

EventEmmiter.trigger(evt, args);

evt: The event you want to publish.

args: Message to be passed to the listener

Example:

EventEmmiter.trigger('login', {
  'user': 'rolls'
});

The argument can be any valid JavaScript argument.

  • Unsubscribing from an event:

EventEmmiter uses a token based unsubscription mechanism.

EvenEmmiter.off(token);

Example:

EventEmmiter.off(sub);

where sub is defined when subscribing to the event (See subscribe example)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment