File size: 1,323 Bytes
9da6ee1
f431cd4
0f62cae
9da6ee1
 
 
0f62cae
9da6ee1
 
0f62cae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93540c2
0f62cae
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import app from './app.js';
let port = process.env.PORT || 8083

import express from 'express';
import { createServer } from 'http';
import { Server } from 'socket.io';

const server = createServer(app);
const io = new Server(server);

const usersSubscribedToJobs = new Map();

app.observer = (job_id, msg) => {
  const subscribers = usersSubscribedToJobs.get(job_id);
  if (subscribers) {
    subscribers.forEach((socket) => {
      socket.emit('job_status', { job_id, msg });
    });
  }
};

io.on('connection', (socket) => {
  console.log('A user connected');
  socket.on('subscribe_job', (job_id) => {
    if (!usersSubscribedToJobs.has(job_id)) {
      usersSubscribedToJobs.set(job_id, new Set());
    }
    usersSubscribedToJobs.get(job_id).add(socket);
    console.log(`User subscribed to job: ${job_id}`);
  });

  socket.on('unsubscribe_job', (job_id) => {
    if (usersSubscribedToJobs.has(job_id)) {
      usersSubscribedToJobs.get(job_id).delete(socket);
      console.log(`User unsubscribed from job: ${job_id}`);
    }
  });

  socket.on('disconnect', () => {
    console.log('User disconnected');
    usersSubscribedToJobs.forEach((subscribers, job_id) => {
      subscribers.delete(socket);
    });
  });
});

server.listen(port, () => {
  console.log(`Remote Render Server listening on port ${port}`);
});