I want to know how to share data being set in a socket in one namespace and access it on another namespace?
I'm fully aware that i can attach data to the socket object itself.Problem arise when i attach the data on one namespace and try to access it on another namespace.
Below demonstrate the problem
var io = require( 'socket.io' );
module.exports.init = function( server ) {
    io = io.listen( server );
    io.of( '/chatSystem' ).on( 'connection', function( socket ) {
        /*handling set nickname event*/
        socket.on( 'set.name', function( data ) {
            /*attach nickname key to this socket*/
            socket.nickname = data.name;
            socket.broadcast.emit( 'user.entered', data );
        });
    });
    io.of( '/chatUser').on( 'connection', function( socket ) {
        /*handling client event socket.send*/
        socket.on( 'message', function( data ) {
            data = JSON.parse( data );
            data.nickname = socket.nickname; // <--- this is undefined
            /*send to all connected client( broadcast will not send message to socket that created the message)*/
            socket.broadcast.send( JSON.stringify( data ) );
            data.type = 'myMessage';
            /*manually send back the message to the socket that created the message*/
            socket.send( JSON.stringify( data) );
        });
    });
};
Is there a way to fix this?
This might be a bit late but i just stumbled on a simpler solution and thought i would share for future investigators.
with socket > 1.0, you can store shared data in the socket's client object. It seems to still be shared among sockets
to use your example above
    /* attach nickname key to this socket */
    socket.client.nickname = data.name;
    /* In typescript with @types/socket.io */
    socket.client["nickname"] = data.name;
and for retrieval
    data.nickname = socket.client.nickname;
    /* In typescript with @types/socket.io */
    data.name = socket.client["nickname"];
Hope this helps someone out. I have been trying to find a solution all week and stumbled on this thread. An hour later, I found this alternative.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With