-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsocketConnector.js
87 lines (61 loc) · 2.01 KB
/
socketConnector.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
var io = require('socket.io');
var express = require('express')
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var Streamer = require('./streamManager');
var hashListeners = {};
module.exports = function(options){
this.port = options.port | 9999;
server.listen(this.port);
console.log("socket server started on port "+this.port);
var self = this;
io.on('connection', (socket) =>{
socket.onclose = function(reason){
this.emit('disconnecting', reason); //<--insert the new event here
this.leaveAll();
this.emit('disconnect', reason);
};
console.log("connected");
socket.on('join', (data)=>{
console.log(data);
var ip = data.ip;
var url = data.url;
var rooms = io.sockets.adapter.rooms;
if(!rooms[ip]){
//create stream manager because no client for that stream
var stream = new Streamer({streamUrl:url});
hashListeners[ip] = stream;
//self.writeSocket(socket);
//Listen for stream events
stream.on('data',(data)=>{
//console.log("here")
io.to(ip).emit('data',data);
})
stream.on('ffmpegError',(data)=>{
//console.log("error");
global.process.stderr.write(data);
})
}
socket.join(ip)
});
socket.on('disconnecting', function(reason){
console.log("disconnecting");
var id = socket.id;
var rooms = socket.rooms;
for(room in rooms){
if(room != id){
var clientsInRoom = io.of('/').adapter.rooms[room];
//console.log(clientsInRoom);
var numClients = clientsInRoom === undefined ? 0 : Object.keys(clientsInRoom.sockets).length;
//console.log(numClients);
var stream = hashListeners[room];
if(stream && numClients <= 1){
stream.remove();
}
}
};
});
})
return this;
};