what i want to try out is, access socket object on http request to emit the data to a specific user, right now my code works fine for access socket object of socket.js file, but i want to emit data to user via socket on thhp request form my controller, how to do that below is my current code.
mainSocket.js
var people = {};
var onlineUsers = {};
var usernames={};
var onlineRoomUsers = [];
module.exports = function(app,io,sessionStore,cookieParser){
console.log("inside socket :");
io.set('authorization', function (data, callback)
{
console.log("inside socket authorization");
if(!data.headers.cookie) {
return callback('No cookie transmitted.', false);
}
// We use the Express cookieParser created before to parse the cookie
// Express cookieParser(req, res, next) is used initialy to parse data in "req.headers.cookie".
// Here our cookies are stored in "data.headers.cookie", so we just pass "data" to the first argument of function
cookieParser(data, {}, function(parseErr) {
if(parseErr) { return callback('Error parsing cookies.', false); }
// Get the SID cookie
var sidCookie = (data.secureCookies && data.secureCookies['myuser.sid']) ||
(data.signedCookies && data.signedCookies['myuser.sid']) ||
(data.cookies && data.cookies['myuser.sid']);
console.log("sidCookie "+sidCookie);
// Then we just need to load the session from the Express Session Store
sessionStore.load(sidCookie, function(err, session) {
console.log("inside sessionStore.load ");
console.log("session "+ JSON.stringify(session));
// And last, we check if the used has a valid session and if he is logged in
// if (err || !session || !session.isLogged !== true) {
if (err || !session || !session.passport.user) {
console.log("error");
callback('Not logged in.', false);
} else {
// If you want, you can attach the session to the handshake data, so you can use it again later
// You can access it later with "socket.handshake.session"
console.log("session exists")
console.log("session.passport.user "+session.passport.user.userId);
data.session = session;
socketSession=session;
callback(null, true);
}
});
});
});
// socket connection handler
io.sockets.on('connection', function(socket){
console.log("socket connection");
var myFriendsId = [];
var currentUserBlockedBy=[];
/*
* myFriendsDetail is used to get user friend detail, so that no need to
* get friends data from data base again & again, when needed,
* each user has itz own friend list detail
* */
var myFriendsDetail = {};
console.log("inside socket connection:");
socket.on('user:join', function(userid){
socket.userid=socketUserId;
onlineUsers[socketUserId] = socket.id;
console.log("online user "+ JSON.stringify(onlineUsers));
});
// when the user disconnects.. perform this
socket.on('disconnect', function(){
console.log("inside socket disconnect");
// remove the username from global usernames list
delete usernames[socket.username];
delete onlineUsers[socket.userid];
console.log("online user "+ JSON.stringify(onlineUsers));
//notify to all friends that u r going offline
for ( var record = 0; record < myFriendsId.length; record++)
{
console.log("contactval offline : " + myFriendsId[record]);
var frid=myFriendsId[record];
socketEmitter.fnUserInActive(socket.userid,frid);
}
});
var socketEmitter =
{
fnUserActive:function(userid,frid)
{
socket.broadcast.to(onlineUsers[frid]).emit('user:active',userid);
},
}
}); //end of socket connection method
} // end of export module
app.js
// server.js
// set up ======================================================================
var express = require('express'),
app = express(),
http = require('http'),
path = require('path'),
session = require('express-session'),
cookieParser = require('cookie-parser'),
morgan = require('morgan');
bodyParser = require('body-parser'),
methodOverride = require('method-override'),
errorhandler = require('errorhandler'),
server = http.createServer(app),
sessionStore = new session.MemoryStore(),
passport = require('passport'), flash = require('connect-flash'),
useragent = require('express-useragent'),
cookieParser = cookieParser('vidyapathaisalwaysrunning'),
io = require('socket.io').listen(server);
require('./config/passport')(passport); // pass passport for configuration
// app.use(logger());
app.use(express.static(path.join(__dirname, 'public')));
app.use(morgan('dev')); // log every request to the console
app.use(bodyParser()); // pull information from html in POST
app.use(methodOverride()); // simulate DELETE and PUT
app.use(cookieParser);
app.use(useragent.express());
app.set('view engine', 'ejs');
// required for passport
app.use(session({
store : sessionStore,
key : 'myuser.sid',
cookie : {
secure : false,
maxAge : 604800000
}
}));
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.set('Access-Control-Allow-Methods', 'GET, POST');
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
/*
* if (process.env.NODE_ENV === 'development') { app.use(errorhandler()) }
*/
var env = process.env.NODE_ENV || 'development';
console.log("env " + env);
if ('development' == env) {
// configure stuff here
app.use(errorhandler());
}
require('./app/socket/mainSocket.js')(app, io, sessionStore, cookieParser);
// routes
// ======================================================================
require('./app/controller.js')(app, passport); // load our routes and pass
// launch
// ======================================================================
server.listen(8080);
controller.js
app.get('/uploadprogress', function(req,res){
socket.emit('message','msg to emit when user visit this link');
});
what i want to get is that, 1> to emit data on http req 2> access socketEmitter method of mainsocket.js
how to get this done i stuck with this part , any help will be appreciated, any suggesstion on this