Bladeren bron

Namespace rooms to site

version-14
Pratik Vyas 10 jaren geleden
bovenliggende
commit
88f9281e3b
2 gewijzigde bestanden met toevoegingen van 64 en 12 verwijderingen
  1. +7
    -3
      frappe/async.py
  2. +57
    -9
      socketio.js

+ 7
- 3
frappe/async.py Bestand weergeven

@@ -196,14 +196,18 @@ def new_comment(doc, event):
if doc.comment_docname == frappe.session.user: if doc.comment_docname == frappe.session.user:
message = doc.as_dict() message = doc.as_dict()
message['broadcast'] = True message['broadcast'] = True
emit_via_redis('new_message', message, room=get_url())
emit_via_redis('new_message', message, room=get_site_room())
else: else:
emit_via_redis('new_message', doc.as_dict(), room=get_user_room(doc.comment_docname)) emit_via_redis('new_message', doc.as_dict(), room=get_user_room(doc.comment_docname))
else: else:
emit_via_redis('new_comment', doc.as_dict(), room=get_doc_room(doc.comment_doctype, doc.comment_docname)) emit_via_redis('new_comment', doc.as_dict(), room=get_doc_room(doc.comment_doctype, doc.comment_docname))


def get_doc_room(doctype, docname): def get_doc_room(doctype, docname):
return ''.join(['doc:', doctype, '/', docname])
return ''.join([frappe.local.site, ':doc:', doctype, '/', docname])


def get_user_room(user): def get_user_room(user):
return ''.join(['user:', user])
return ''.join([frappe.local.site, ':user:', user])

def get_site_room():
return ''.join([frappe.local.site, ':all'])

+ 57
- 9
socketio.js Bestand weergeven

@@ -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;
} }

Laden…
Annuleren
Opslaan