Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 
 

77 lignes
1.8 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.on('task_subscribe', function(task_id) {
  14. var room = 'task:' + task_id;
  15. socket.join(room);
  16. })
  17. socket.on('progress_subscribe', function(task_id) {
  18. var room = 'task_progress:' + task_id;
  19. socket.join(room);
  20. send_existing_lines(task_id, socket);
  21. })
  22. socket.on('doc_subscribe', function(doctype, docname) {
  23. var sid = cookie.parse(socket.request.headers.cookie).sid
  24. if(!sid) {
  25. return;
  26. }
  27. request.post('http://localhost:8000/api/method/frappe.async.can_subscribe_doc')
  28. .type('form')
  29. .send({
  30. sid: sid,
  31. doctype: doctype,
  32. docname: docname
  33. })
  34. .end(function(err, res) {
  35. if(res.status == 200) {
  36. var room = get_doc_room(doctype, docname);
  37. socket.join(room);
  38. }
  39. })
  40. });
  41. socket.on('doc_unsubscribe', function(doctype, docname) {
  42. var room = get_doc_room(doctype, docname);
  43. socket.leave(room);
  44. });
  45. });
  46. function send_existing_lines(task_id, socket) {
  47. r.hgetall('task_log:' + task_id, function(err, lines) {
  48. socket.emit('task_progress', {
  49. "task_id": task_id,
  50. "message": {
  51. "lines": lines
  52. }
  53. })
  54. })
  55. }
  56. subscriber.on("message", function(channel, message) {
  57. message = JSON.parse(message);
  58. io.to(message.room).emit(message.event, message.message);
  59. });
  60. subscriber.subscribe("events");
  61. http.listen(3000, function(){
  62. console.log('listening on *:3000');
  63. });
  64. function get_doc_room(doctype, docname) {
  65. return 'doc:'+ doctype + '/' + docname;
  66. }