I'm writing a social web with NodeJS, Express and Angular.
Now I already handled socket between server and client but I want to send a server side status of a user to only his friends, not broadcast to the whole network.
This is my code:
In client
Main.js
angular.module('appServices', ['ngResource']).
factory('socket', function($rootScope){
var socket = io.connect();
return {
on: function (eventName, callback){
socket.on(eventName, function(){
var args = arguments;
$rootScope.$apply(function(){
callback.apply(socket, args);
});
});
},
emit: function (eventName,data, callback){
socket.emit(eventName, data, function (){
var agrs = arguments;
$rootScope.$apply(function (){
if(callback){
callback.apply(socket, agrs);
}
});
})
}
};
});
Controller.js
function activityCtrl($scope, socket){
$scope.createStatus = function(){
var sttData = $scope.stt;
socket.emit('createStt',sttData);
}
socket.on('addStt',function(data){
$scope.user.activity.unshift(data);
});
socket.on('myStt',function(data){
$scope.user.activity.unshift(data);
});
}
Main.js
angular.module('webProfileApp',['appServices'])// appServices duoc goi tu services.js
.config(['$routeProvider', function($routeProvider){
$routeProvider.
when('/activity/:userId',{ templateUrl: 'partials/me.html', controller: activityCtrl });
}]);
In Serverside:
app.js
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
io.sockets.on('connection',user.createStt);
User.js
exports.createStt = function(socket){
socket.on('createStt',function(dataSocket){
console.log('Save status---------');
var reqBody = dataSocket;
//
//Save data
//
socket.broadcast.emit('addStt',reqBody);
socket.emit('myStt',reqBody);
});
});