* feat(api): assist peerJS server * feat(api): install assist_server dependencies and start it with the API * feat(api): assist: list live sessions * feat(nginx): expose assist_server and block peers listing * feat(api): merged sourcemaps reader and assist-server feat(api): change image definition feat(api): changed service start command feat(utilities): created full server & image definition feat(nginx): reset chalice configuration * feat(utilities): utilities.yaml * feat(nginx): utilities URL * feat(utilities): utilities template * feat(ci): Adding utilities GH action. Signed-off-by: Rajesh Rajendran <rjshrjndrn@gmail.com> * feat(utilities): build script * feat(utilities): build script fix image name * feat(utilities): tag and push image as latest * feat(api): tag and push image as latest * feat(api): extract peers host * feat(api): fixed utilities URL * feat(api): assist logs * feat(api): assist: fixed peerjs URL * feat(api): log peers URL * feat(api): assit: get all durations, even if it is not null * feat(api): assit: include peerId in response * feat(api): return project_key with session's details * feat(assist): fix peerJS error * feat(api): fix typo Co-authored-by: Rajesh Rajendran <rjshrjndrn@gmail.com>
64 lines
No EOL
1.9 KiB
JavaScript
64 lines
No EOL
1.9 KiB
JavaScript
var express = require('express');
|
|
var peerRouter = express.Router();
|
|
|
|
|
|
const extractPeerId = (peerId) => {
|
|
let splited = peerId.split("-");
|
|
if (splited.length !== 2) {
|
|
console.error(`cannot split peerId: ${peerId}`);
|
|
return {};
|
|
}
|
|
return {projectKey: splited[0], sessionId: splited[1]};
|
|
};
|
|
const connectedPeers = {};
|
|
|
|
const peerConnection = (client) => {
|
|
console.log(`initiating ${client.id}`);
|
|
const {projectKey, sessionId} = extractPeerId(client.id);
|
|
if (projectKey === undefined || sessionId === undefined) {
|
|
return;
|
|
}
|
|
connectedPeers[projectKey] = connectedPeers[projectKey] || [];
|
|
if (connectedPeers[projectKey].indexOf(sessionId) === -1) {
|
|
console.log(`new connexion ${client.id}`);
|
|
connectedPeers[projectKey].push(sessionId);
|
|
} else {
|
|
console.log(`reconnecting peer ${client.id}`);
|
|
}
|
|
|
|
|
|
};
|
|
const peerDisconnect = (client) => {
|
|
console.log(`disconnect ${client.id}`);
|
|
const {projectKey, sessionId} = extractPeerId(client.id);
|
|
if (projectKey === undefined || sessionId === undefined) {
|
|
return;
|
|
}
|
|
const i = (connectedPeers[projectKey] || []).indexOf(sessionId);
|
|
if (i === -1) {
|
|
console.log(`session not found ${client.id}`);
|
|
} else {
|
|
connectedPeers[projectKey].splice(i, 1);
|
|
}
|
|
}
|
|
|
|
|
|
peerRouter.get('/peers', function (req, res) {
|
|
console.log("looking for all available sessions");
|
|
res.statusCode = 200;
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.end(JSON.stringify({"data": connectedPeers}));
|
|
});
|
|
peerRouter.get('/peers/:projectKey', function (req, res) {
|
|
console.log(`looking for available sessions for ${req.params.projectKey}`);
|
|
res.statusCode = 200;
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.end(JSON.stringify({"data": connectedPeers[req.params.projectKey] || []}));
|
|
});
|
|
|
|
|
|
module.exports = {
|
|
peerRouter,
|
|
peerConnection,
|
|
peerDisconnect
|
|
}; |