How to use socket.io with the latest mean.io?

chat, mean-stack, node.js, socket.io

Solution

You can set the socket.io to listen on your server on

/server/config/system/bootstrap.js

Require the socket.io module

var express = require('express'),
    appPath = process.cwd(),
    io      = require('socket.io');

Now set the socket.io to listen on your app

// Express settings
var app = express(); 
require(appPath + '/server/config/express')(app, passport, db);
io = io(app.listen(3000));    

return io;

Then you need to inject the socket.io object into your app on bootstrapDependencies() function.

function bootstrapDependencies() {
    ...

    // Register socket.io dependency
    mean.register('io', function() {
        return io;
    });
}

Mean.uses this project for its dependency injection https://www.npmjs.org/package/dependable

Finally you need to configure your app to listen on every socket connections probably you want to do these on your main app's router at

/server/routes/index.js

Sample connection handler

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

io.on('connection', function (socket) {
    // emit data to the clients
    socket.emit('news', { hello: 'world' });

    // event listeners
    socket.on('my other event', function (data) {
         // call your controller function here
         Controller.action(data);
    });
});

And more importantly, don't forget to setup socket.io on the client side.

// on '/server/views/includes/foot.html'
<script src='/socket.io/socket.io.js'></script>
<script>
    var socket = io();
</script>

Problem

I have fetched a copy of the latest Mean.io and noted quite a number of changes compared to the previous version I have been working with before. Now, what I am doing is creating a very basic chat application that uses socket.io with rooms. Following the basic setup in the Socket documentation I have to implement the following: ``` var app = require('express')() , server = require('http').createServer(app) , io = require('socket.io').listen(server); server.listen(80); app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); ``` Where would I define the basic socket room setup? ``` socket.set("log level", 1); var people = {}; var rooms = {}; var clients = []; ```

Original source