No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

94 líneas
2.2 KiB

  1. var app = require('express')();
  2. var http = require('http').Server(app);
  3. var io = require('socket.io')(http);
  4. var cookie = require('cookie')
  5. var redis = require("redis")
  6. var subscriber = redis.createClient(12311);
  7. var r = redis.createClient(12311);
  8. var request = require('superagent')
  9. app.get('/', function(req, res){
  10. res.sendfile('index.html');
  11. });
  12. io.on('connection', function(socket){
  13. socket.join(socket.request.headers.origin);
  14. var sid = cookie.parse(socket.request.headers.cookie).sid
  15. if(!sid) {
  16. return;
  17. }
  18. request.post('http://localhost:8000/api/method/frappe.async.get_user_info')
  19. .type('form')
  20. .send({
  21. sid: sid
  22. })
  23. .end(function(err, res) {
  24. if(res.status == 200) {
  25. var room = get_user_room(res.body.message.user);
  26. socket.join(room);
  27. }
  28. })
  29. socket.on('task_subscribe', function(task_id) {
  30. var room = 'task:' + task_id;
  31. socket.join(room);
  32. })
  33. socket.on('progress_subscribe', function(task_id) {
  34. var room = 'task_progress:' + task_id;
  35. socket.join(room);
  36. send_existing_lines(task_id, socket);
  37. })
  38. socket.on('doc_subscribe', function(doctype, docname) {
  39. request.post('http://localhost:8000/api/method/frappe.async.can_subscribe_doc')
  40. .type('form')
  41. .send({
  42. sid: sid,
  43. doctype: doctype,
  44. docname: docname
  45. })
  46. .end(function(err, res) {
  47. if(res.status == 200) {
  48. var room = get_doc_room(doctype, docname);
  49. socket.join(room);
  50. }
  51. })
  52. });
  53. socket.on('doc_unsubscribe', function(doctype, docname) {
  54. var room = get_doc_room(doctype, docname);
  55. socket.leave(room);
  56. });
  57. });
  58. function send_existing_lines(task_id, socket) {
  59. r.hgetall('task_log:' + task_id, function(err, lines) {
  60. socket.emit('task_progress', {
  61. "task_id": task_id,
  62. "message": {
  63. "lines": lines
  64. }
  65. })
  66. })
  67. }
  68. subscriber.on("message", function(channel, message) {
  69. message = JSON.parse(message);
  70. io.to(message.room).emit(message.event, message.message);
  71. console.log(message.room, message.event, message.message)
  72. });
  73. subscriber.subscribe("events");
  74. http.listen(3000, function(){
  75. console.log('listening on *:3000');
  76. });
  77. function get_doc_room(doctype, docname) {
  78. return 'doc:'+ doctype + '/' + docname;
  79. }
  80. function get_user_room(user) {
  81. return 'user:' + user;
  82. }