licode_basicExample简易分析【2016-9】

/*global require, __dirname, console*/
var express = require('express'),
    bodyParser = require('body-parser'),
    errorhandler = require('errorhandler'),
    morgan = require('morgan'),
    net = require('net'),
    N = require('./nuve'),
    fs = require("fs"),
    https = require("https"),
        config = require('./../../licode_config');

var options = {
    key: fs.readFileSync('../../cert/key.pem').toString(),
    cert: fs.readFileSync('../../cert/cert.pem').toString()
};

var app = express();

// app.configure ya no existe
"use strict";
app.use(errorhandler({
    dumpExceptions: true,
    showStack: true
}));
app.use(morgan('dev'));
app.use(express.static(__dirname + '/public'));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

//app.set('views', __dirname + '/../views/');
//disable layout
//app.set("view options", {layout: false});

N.API.init(config.nuve.superserviceID, config.nuve.superserviceKey, 'http://localhost:3000/');

var defaultRoom;
var defaultRoomName = "basicExampleRoom";

var getOrCreateRoom = function (roomName, callback) {  

    if (roomName == defaultRoomName && defaultRoom) {
        console.log("It's the default Room", roomName);
        callback(defaultRoom);
        return;
    }
    //先查找basicExampleRoom是否存在,不存在则创建
    N.API.getRooms(function (roomlist){
        "use strict";
        var theRoom = "";
        var rooms = JSON.parse(roomlist);
        for (var room in rooms) {
            if (rooms[room].name === roomName && rooms[room].data && rooms[room].data.basicExampleRoom){
                theRoom = rooms[room]._id;
                console.log("Found Room", roomName);
                callback(theRoom);
                return;
            }
        }
        N.API.createRoom(roomName, function (roomID) {
            theRoom = roomID._id;
            console.log("Created Room", theRoom);
            callback(theRoom);
        }, function(){}, {data: {basicExampleRoom:true}});
    });
};
var deleteRoomsIfEmpty = function (theRooms, callback) {
    if (theRooms.length == 0){
        callback(true);
        return;
    }
    var theRoom = theRooms.pop();  //取出数组中的数据

    //查找用户列表,为空则删除房间。
    N.API.getUsers(theRoom._id, function(userlist){
        var users = JSON.parse(userlist);
        console.log("Checking room", theRoom.name, "users", Object.keys(users).length);
        if (Object.keys(users).length === 0){
            N.API.deleteRoom(theRoom._id, function(res){
                console.log("Deleted Room", theRoom.name);
                if (theRooms.length > 0){
                    deleteRoomsIfEmpty(theRooms, callback);
                }
            });
        } else {
            if (theRooms.length > 0){
                deleteRoomsIfEmpty(theRooms, callback);
            }
        }
    });
}

var cleanExampleRooms = function (callback) {
    console.log("Cleaning old BasicExample Rooms");
    N.API.getRooms(function (roomlist) {  //N.API.getRooms会从mongo数据库集合中查找房间列表
        "use strict";
        var rooms = JSON.parse(roomlist);
        var roomsToCheck = [];
        for (var room in rooms){
            if (rooms[room].data && rooms[room].data.basicExampleRoom && rooms[room].name !== defaultRoomName){
                roomsToCheck.push(rooms[room]);  //将不为defaultRoomName房间放入roomsToCheck数组中
            }
        }
        deleteRoomsIfEmpty (roomsToCheck, function (res) {
            callback("done");
        });
    });

}

app.get('/getRooms/', function(req, res) {
    "use strict";
    N.API.getRooms(function(rooms) {
        res.send(rooms);
    });
});

app.get('/getUsers/:room', function(req, res) {
    "use strict";
    var room = req.params.room;
    N.API.getUsers(room, function(users) {
        res.send(users);
    });
});


app.post('/createToken/', function(req, res) {
    "use strict";
    var room = defaultRoomName;
    if (req.body.room && !isNaN(req.body.room))
        room = req.body.room

    var username = req.body.username,
    role = req.body.role;

    getOrCreateRoom(room, function (roomId) {
        N.API.createToken(roomId, username, role, function(token) {
            console.log(token);
            res.send(token);
        }, function(error) {
            console.log(error);
            res.status(401).send('No Erizo Controller found');
        });
    });
});


app.use(function(req, res, next) {
    "use strict";
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, DELETE');
    res.header('Access-Control-Allow-Headers', 'origin, content-type');
    if (req.method == 'OPTIONS') {
        res.send(200);
    } else {
        next();
    }
});

cleanExampleRooms(function(res) {
    console.log("Rooms Clean");
    getOrCreateRoom(defaultRoomName, function (roomId) {
        console.log("Got default Room", roomId);
        defaultRoom = roomId;
        app.listen(3001);  	//用于http
        var server = https.createServer(options, app);
        server.listen(3004);	//用于https

    });
});

/*
运行结果:
Cleaning old BasicExample Rooms
Rooms Clean
Found Room basicExampleRoom
Got default Room 57b7b8ebc9ffd2606acb29e8
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值