Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get event name in event's callback function in socket io

I am building an intermediate node server which acts as both socket client and server, I want to listen to backend server events and then forward the events to client(browser) after processing.

var socket = require('socket.io'),
    client = require('socket.io-client');

socket.on('event_name', function(data) {
    /* Logic to process response and relay to client */
    client.emit(this.event, data); // How can I get name of the outer event?
});

I want to get the event_name value in the callback. How can I do?

like image 642
Saba Hassan Avatar asked Apr 28 '15 11:04

Saba Hassan


2 Answers

I am not sure if you can get event name from the callback, but you can workaround it.

var socket = require('socket.io');

function registerEvent(eventName, cb) {
  socket.on(eventName, function () {
    var args = [].slice.apply(arguments);
    args.unshift(eventName);
    cb.apply(null, args);
  });
}

registerEvent('my_event', function (eventName, data) {
  // now you can access event name
  // it is prepended to arguments
  console.log('Event name', eventName);
});
like image 69
zaynetro Avatar answered Nov 15 '22 16:11

zaynetro


You could try something similar :

// List of events relayed to client
var    events = ['first_event', 'second_event', 'third_event'];

for (var i in events)
    (function(e) {
         socket.on(e, function(data) {
            console.log(e); // You have access to the event name
            client.emit(e, data); // Relay to client
         }); 
    })(events[i]);
like image 36
Harijoe Avatar answered Nov 15 '22 16:11

Harijoe