From c06ffae5304f7d8103ea0861761ca761e7d2bbc6 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Mon, 12 Jun 2017 11:26:43 +0200 Subject: [PATCH] openvidu-node-client integration in openvidu-js-node --- openvidu-js-node/package.json | 3 +- openvidu-js-node/server.js | 133 +++++++++++----------------------- 2 files changed, 43 insertions(+), 93 deletions(-) diff --git a/openvidu-js-node/package.json b/openvidu-js-node/package.json index e274c75c..2afd296c 100644 --- a/openvidu-js-node/package.json +++ b/openvidu-js-node/package.json @@ -19,6 +19,7 @@ "dependencies": { "body-parser": "^1.17.2", "express": "^4.15.3", - "express-session": "^1.15.3" + "express-session": "^1.15.3", + "openvidu-node-client": "1.0.0" } } diff --git a/openvidu-js-node/server.js b/openvidu-js-node/server.js index 7f6e5375..f7a2986e 100644 --- a/openvidu-js-node/server.js +++ b/openvidu-js-node/server.js @@ -1,3 +1,8 @@ +var OpenVidu = require('openvidu-node-client').OpenVidu; +var Session = require('openvidu-node-client').Session; +var OpenViduRole = require('openvidu-node-client').OpenViduRole; +var TokenOptions = require('openvidu-node-client').TokenOptions; + // Check launch arguments if (process.argv.length != 4) { console.log("Usage: node " + __filename + " OPENVIDU_URL OPENVIDU_SECRET"); @@ -37,28 +42,32 @@ var options = { https.createServer(options, app).listen(5000); console.log("App listening on port https://[]:5000"); -// Environment variables -var OPENVIDU_URL = process.argv[2]; -var OPENVIDU_SECRET = process.argv[3]; - // Mock database var users = [{ user: "publisher1", pass: "pass", - role: "PUBLISHER" + role: OpenViduRole.PUBLISHER }, { user: "publisher2", pass: "pass", - role: "PUBLISHER" + role: OpenViduRole.PUBLISHER }, { user: "subscriber", pass: "pass", - role: "SUBSCRIBER" + role: OpenViduRole.SUBSCRIBER }]; + +// Environment variables +var OPENVIDU_URL = process.argv[2]; +var OPENVIDU_SECRET = process.argv[3]; + +// OpenVidu object +var OV = new OpenVidu(OPENVIDU_URL, OPENVIDU_SECRET); + // Objects for storing active sessions and users -var mapSessionNameSessionId = {}; -var mapSessionIdsTokens = {}; +var mapSessionNameSession = {}; +var mapSessionIdTokens = {}; // APIRest @@ -94,11 +103,17 @@ app.post('/api-sessions/get-sessionid-token', function (req, res) { var serverData = '{"serverData": "' + req.session.loggedUser + '"}'; console.log("Getting sessionId and token | {sessionName}={" + sessionName + "}"); - var sessionId = mapSessionNameSessionId[sessionName]; - if (sessionId) { + var mySession = mapSessionNameSession[sessionName]; + var tokenOptions = new TokenOptions.Builder() + .role(role) + .data('{"serverData": "' + req.session.loggedUser + '"}') + .build(); + + if (mySession) { console.log('Existing session ' + sessionName); - getToken(sessionId, role, serverData, function (token) { - mapSessionIdsTokens[sessionId].push(token); + mySession.generateToken(tokenOptions, function (token) { + var sessionId = mySession.getSessionId(); + mapSessionIdTokens[sessionId].push(token); console.log('SESSIONID: ' + sessionId); console.log('TOKEN: ' + token); res.status(200).send({ @@ -108,11 +123,13 @@ app.post('/api-sessions/get-sessionid-token', function (req, res) { }); } else { console.log('New session ' + sessionName); - getSessionId(function (sessionId) { - mapSessionNameSessionId[sessionName] = sessionId; - mapSessionIdsTokens[sessionId] = []; - getToken(sessionId, role, serverData, function (token) { - mapSessionIdsTokens[sessionId].push(token); + mySession = OV.createSession(); + mySession.getSessionId(function (sessionId) { + mapSessionNameSession[sessionName] = mySession; + mapSessionIdTokens[sessionId] = []; + + mySession.generateToken(tokenOptions, function (token) { + mapSessionIdTokens[sessionId].push(token); console.log('SESSIONID: ' + sessionId); console.log('TOKEN: ' + token); res.status(200).send({ @@ -133,22 +150,22 @@ app.post('/api-sessions/remove-user', function (req, res) { var sessionName = req.body.sessionName; var token = req.body.token; console.log('Removing user | {sessionName, token}={' + sessionName + ", " + token + '}'); - var sessionId = mapSessionNameSessionId[sessionName]; - if (sessionId) { - var tokens = mapSessionIdsTokens[sessionId]; + var mySession = mapSessionNameSession[sessionName]; + if (mySession) { + var tokens = mapSessionIdTokens[mySession.getSessionId()]; if (tokens) { var index = tokens.indexOf(token); if (index !== -1) { // User left the session tokens.splice(index, 1); - console.log(sessionName + ': ' + mapSessionIdsTokens[sessionId].toString()); + console.log(sessionName + ': ' + mapSessionIdTokens[mySession.getSessionId()].toString()); } else { var msg = 'Problems in the app server: the TOKEN wasn\'t valid'; console.log(msg); res.status(500).send(msg); } - if (mapSessionIdsTokens[sessionId].length == 0) { // Last user left the session + if (mapSessionIdTokens[mySession.getSessionId()].length == 0) { // Last user left the session console.log(sessionName + ' empty!'); - delete mapSessionNameSessionId[sessionName]; + delete mapSessionNameSession[sessionName]; } res.status(200).send(); } else { @@ -175,72 +192,4 @@ function isLogged(session) { function getBasicAuth() { return 'Basic ' + (new Buffer('OPENVIDUAPP:' + OPENVIDU_SECRET).toString('base64')); -} - -// HTTP request to OpenVidu Server to get a sessionId -function getSessionId(callback) { - var options = { - hostname: OPENVIDU_URL, - port: 8443, - path: '/api/sessions', - method: 'POST', - headers: { - 'Authorization': getBasicAuth() - } - } - const req = https.request(options, (res) => { - var body = ''; - res.on('data', (d) => { - // Continuously update stream with data - body += d; - }); - res.on('end', function () { - // Data reception is done - var parsed = JSON.parse(body); - callback(parsed.id); - }); - }); - - req.on('error', (e) => { - console.error(e); - }); - req.end(); -} - -// HTTP request to OpenVidu Server to get a token -function getToken(sessionId, role, data, callback) { - var requestBody = JSON.stringify({ - 'session': sessionId, - 'role': role, - 'data': data - }); - var options = { - hostname: OPENVIDU_URL, - port: 8443, - path: '/api/tokens', - method: 'POST', - headers: { - 'Authorization': getBasicAuth(), - 'Content-Type': 'application/json', - 'Content-Length': Buffer.byteLength(requestBody) - } - }; - const req = https.request(options, (res) => { - var body = ''; - res.on('data', (d) => { - // Continuously update stream with data - body += d; - }); - res.on('end', function () { - // Data reception is done - var parsed = JSON.parse(body); - callback(parsed.token); - }); - }); - - req.on('error', (e) => { - console.error(e); - }); - req.write(requestBody); - req.end(); } \ No newline at end of file