This repository was archived by the owner on Apr 4, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathNodejs-Recording-Handler.js
executable file
·98 lines (74 loc) · 2.92 KB
/
Nodejs-Recording-Handler.js
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Muaz Khan - www.MuazKhan.com
// MIT License - www.webrtc-experiment.com/licence
// Documentation - github.com/streamproc/MediaStreamRecorder
module.exports = exports = function(socket) {
SocketExtender(socket);
};
var mkdirp = require('mkdirp');
var fs = require('fs');
var WriteToDisk = require('./Write-Recordings-To-Disk.js');
var ConcatenateRecordings = require('./Concatenate-Recordings.js');
var roomsDirs = {};
function SocketExtender(socket) {
var params = socket.handshake.query;
function onGettingRecordedMessages(data, callback) {
var file = JSON.parse(data);
socket.roomId = file.roomId;
socket.userId = file.userId;
if (!roomsDirs[file.roomId]) {
roomsDirs[file.roomId] = {
usersIndexed: {}
};
if (!fs.existsSync('./uploads/' + file.roomId)) {
createNewDir('./uploads/' + file.roomId, data, onGettingRecordedMessages, callback);
return;
}
onGettingRecordedMessages(data, callback);
return;
}
if (!roomsDirs[file.roomId].usersIndexed[file.userId]) {
roomsDirs[file.roomId].usersIndexed[file.userId] = {
interval: file.interval,
fileName: file.fileName
};
}
roomsDirs[file.roomId].usersIndexed[file.userId].interval = file.interval;
console.log('writing file do disk', file.interval);
WriteToDisk(file, socket);
callback();
}
socket.on('recording-message', onGettingRecordedMessages);
socket.on('stream-stopped', onRecordingStopped);
socket.on('disconnect', onRecordingStopped);
function onRecordingStopped() {
if (!socket.roomId || !socket.userId) return;
console.log('onRecordingStopped');
if (!roomsDirs[socket.roomId] || !roomsDirs[socket.roomId].usersIndexed[socket.userId]) {
console.log('skipped', socket.roomId, socket.userId);
return;
}
var user = roomsDirs[socket.roomId].usersIndexed[socket.userId];
ConcatenateRecordings({
fileName: user.fileName,
lastIndex: user.interval + 1,
roomId: socket.roomId,
userId: socket.userId,
interval: user.interval
}, socket);
if (!!roomsDirs[socket.roomId] && !!roomsDirs[socket.roomId].usersIndexed[socket.userId]) {
delete roomsDirs[socket.roomId].usersIndexed[socket.userId];
}
if (!!roomsDirs[socket.roomId] && Object.keys(roomsDirs[socket.roomId].usersIndexed).length <= 1) {
delete roomsDirs[socket.roomId];
}
}
}
// FUNCTION used to create room-directory
function createNewDir(path, data, onGettingRecordedMessages, callback) {
mkdirp(path, function(err) {
if (err) {
return setTimeout(createNewDir, 1000);
}
onGettingRecordedMessages(data, callback);
});
}