|
@@ -2,31 +2,46 @@ var app = require('express')(); |
|
|
var http = require('http').Server(app); |
|
|
var http = require('http').Server(app); |
|
|
var io = require('socket.io')(http); |
|
|
var io = require('socket.io')(http); |
|
|
var cookie = require('cookie') |
|
|
var cookie = require('cookie') |
|
|
|
|
|
var fs = require('fs'); |
|
|
|
|
|
|
|
|
var redis = require("redis") |
|
|
var redis = require("redis") |
|
|
var subscriber = redis.createClient(12311); |
|
|
var subscriber = redis.createClient(12311); |
|
|
var r = redis.createClient(12311); |
|
|
var r = redis.createClient(12311); |
|
|
|
|
|
|
|
|
var request = require('superagent') |
|
|
var request = require('superagent') |
|
|
|
|
|
var default_site; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(fs.existsSync('sites/currentsite.txt')) { |
|
|
|
|
|
default_site = fs.readFileSync('sites/currentsite.txt').toString().trim(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
app.get('/', function(req, res){ |
|
|
app.get('/', function(req, res){ |
|
|
res.sendfile('index.html'); |
|
|
res.sendfile('index.html'); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
io.on('connection', function(socket){ |
|
|
io.on('connection', function(socket){ |
|
|
socket.join(socket.request.headers.origin); |
|
|
|
|
|
|
|
|
if (get_hostname(socket.request.headers.host) != get_hostname(socket.request.headers.origin)) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
var sid = cookie.parse(socket.request.headers.cookie).sid |
|
|
var sid = cookie.parse(socket.request.headers.cookie).sid |
|
|
if(!sid) { |
|
|
if(!sid) { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
request.post('http://localhost:8000/api/method/frappe.async.get_user_info') |
|
|
|
|
|
|
|
|
request.post(get_url(socket, '/api/method/frappe.async.get_user_info')) |
|
|
.type('form') |
|
|
.type('form') |
|
|
.send({ |
|
|
.send({ |
|
|
sid: sid |
|
|
sid: sid |
|
|
}) |
|
|
}) |
|
|
.end(function(err, res) { |
|
|
.end(function(err, res) { |
|
|
|
|
|
if(err) { |
|
|
|
|
|
console.log(err); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
if(res.status == 200) { |
|
|
if(res.status == 200) { |
|
|
var room = get_user_room(res.body.message.user); |
|
|
|
|
|
|
|
|
var room = get_user_room(socket, res.body.message.user); |
|
|
|
|
|
// console.log('joining', room); |
|
|
socket.join(room); |
|
|
socket.join(room); |
|
|
} |
|
|
} |
|
|
}) |
|
|
}) |
|
@@ -55,7 +70,7 @@ io.on('connection', function(socket){ |
|
|
}) |
|
|
}) |
|
|
}); |
|
|
}); |
|
|
socket.on('doc_unsubscribe', function(doctype, docname) { |
|
|
socket.on('doc_unsubscribe', function(doctype, docname) { |
|
|
var room = get_doc_room(doctype, docname); |
|
|
|
|
|
|
|
|
var room = get_doc_room(socket, doctype, docname); |
|
|
socket.leave(room); |
|
|
socket.leave(room); |
|
|
}); |
|
|
}); |
|
|
}); |
|
|
}); |
|
@@ -75,7 +90,7 @@ function send_existing_lines(task_id, socket) { |
|
|
subscriber.on("message", function(channel, message) { |
|
|
subscriber.on("message", function(channel, message) { |
|
|
message = JSON.parse(message); |
|
|
message = JSON.parse(message); |
|
|
io.to(message.room).emit(message.event, message.message); |
|
|
io.to(message.room).emit(message.event, message.message); |
|
|
console.log(message.room, message.event, message.message) |
|
|
|
|
|
|
|
|
// console.log(message.room, message.event, message.message) |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
subscriber.subscribe("events"); |
|
|
subscriber.subscribe("events"); |
|
@@ -84,10 +99,43 @@ http.listen(3000, function(){ |
|
|
console.log('listening on *:3000'); |
|
|
console.log('listening on *:3000'); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
function get_doc_room(doctype, docname) { |
|
|
|
|
|
return 'doc:'+ doctype + '/' + docname; |
|
|
|
|
|
|
|
|
function get_doc_room(socket, doctype, docname) { |
|
|
|
|
|
return get_site_room(socket) + ':doc:'+ doctype + '/' + docname; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function get_user_room(socket, user) { |
|
|
|
|
|
return get_site_room(socket) + ':user:' + user; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function get_site_room(socket) { |
|
|
|
|
|
return get_site_name(socket) + ':all'; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function get_site_name(socket) { |
|
|
|
|
|
if (default_site) { |
|
|
|
|
|
return default_site; |
|
|
|
|
|
} |
|
|
|
|
|
else if (socket.request.headers['x-frappe-site-name']) { |
|
|
|
|
|
return get_hostname(socket.request.headers['x-frappe-site-name']); |
|
|
|
|
|
} |
|
|
|
|
|
else if (socket.request.headers.origin) { |
|
|
|
|
|
return get_hostname(socket.request.headers.origin); |
|
|
|
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
return get_hostname(socket.request.headers.host); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function get_hostname(url) { |
|
|
|
|
|
if (url.indexOf("://") > -1) { |
|
|
|
|
|
url = url.split('/')[2]; |
|
|
|
|
|
} |
|
|
|
|
|
return ( url.match(/:/g) ) ? url.slice( 0, url.indexOf(":") ) : url |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function get_user_room(user) { |
|
|
|
|
|
return 'user:' + user; |
|
|
|
|
|
|
|
|
function get_url(socket, path) { |
|
|
|
|
|
if (!path) { |
|
|
|
|
|
path = ''; |
|
|
|
|
|
} |
|
|
|
|
|
return socket.request.headers.origin + path; |
|
|
} |
|
|
} |