TT#2723 Added PluginResponse and PluginError

Change-Id: I468201359e9ab2f8ad9e30d98f4258d836a9904b
changes/85/9285/1
Hans-Peter Herzog 10 years ago
parent cd515e1f5c
commit 15e591bab3

@ -1,5 +1,6 @@
'use strict';
var assert = require('chai').assert;
var _ = require('lodash');
/**
@ -37,4 +38,26 @@ class ClientResponse {
}
}
class PluginResponse extends ClientResponse {
constructor(req, res) {
super(req, res);
assert(_.has(res, 'plugindata.plugin'), 'Missing property plugindata.plugin');
assert(_.has(res, 'plugindata.data'), 'Missing property plugindata.data');
}
isError() {
return _.get(this.response, 'plugindata.data.error_code', null) !== null;
}
getName() {
return _.get(this.response, 'plugindata.plugin', null);
}
getData() {
return _.get(this.response, 'plugindata.data', null);
}
}
module.exports.ClientResponse = ClientResponse;
module.exports.PluginResponse = PluginResponse;

@ -1,5 +1,6 @@
'use strict';
var assert = require('chai').assert;
var _ = require('lodash');
/**
@ -33,15 +34,16 @@ class ResponseError extends Error {
*/
class PluginError extends ResponseError {
constructor(req, res, plugin) {
super(req, res);
constructor(res, handle) {
super(res);
assert(_.has(res.getResponse()))
this.message = _.get(res, 'plugindata.data.error', null);
this.code = _.get(res, 'plugindata.data.error_code', null);
this.plugin = plugin;
this.handle = handle;
}
getPlugin() {
return this.plugin;
getHandle() {
return this.handle;
}
}

@ -1,6 +1,21 @@
module.exports = {
error: {
general: {
unauthorized: function unauthorized(req) {
return {
janus: 'error',
transaction: req.transaction,
error: {
code: 403,
reason: 'Unauthorized request (wrong or missing secret/token)'
}
};
}
}
},
general: {
info: function info(req) {
return {
@ -142,6 +157,20 @@ module.exports = {
},
videoRoomHandle: {
error: {
destroy: function destroy(req) {
return { janus: 'success',
session_id: req.session_id,
sender: req.handle_id,
transaction: req.transaction,
plugindata:
{ plugin: 'janus.plugin.videoroom',
data:
{ videoroom: 'event',
error_code: 426,
error: 'No such room (' + req.body.room + ')' } } };
}
},
create: function create(req) {
return { janus: 'success',
session_id: req.session_id,
@ -158,10 +187,25 @@ module.exports = {
transaction: req.transaction,
plugindata:
{ plugin: 'janus.plugin.videoroom',
data: { videoroom: 'created', room: 2146929290 } } }
data: { videoroom: 'destroyed', room: 2146929290 } } }
},
exists: function exists(req) {
return {
janus: 'success',
session_id: req.session_id,
sender: req.handle_id,
transaction: req.transaction,
plugindata: {
plugin: 'janus.plugin.videoroom',
data: {
videoroom: 'success', room: 2146929290, exists: 'true'
}
}
}
},
list: function list(req) {
return { janus: 'success',
return {
janus: 'success',
session_id: req.session_id,
sender: req.handle_id,
transaction: req.transaction,

@ -111,6 +111,9 @@ class JanusServer {
case 'list':
this.send(webSocket, JanusResponse.videoRoomHandle.list(object));
break;
case 'exists':
this.send(webSocket, JanusResponse.videoRoomHandle.exists(object));
break;
}
}

@ -3,6 +3,8 @@
var _ = require('lodash');
var EventEmitter = require('events').EventEmitter;
var JanusEvents = require('../constants').JanusEvents;
var PluginError = require('../errors').PluginError;
var PluginResponse = require('../client/response').PluginResponse;
/**
* @class
@ -106,11 +108,17 @@ class PluginHandle {
requestMessage(body, options) {
return new Promise((resolve, reject)=>{
this.request({
var req = {
janus: 'message',
body: body
}, options).then((res)=>{
resolve(res);
};
this.request(req, options).then((res)=>{
var pluginResponse = new PluginResponse(res.getRequest(), res.getResponse());
if(pluginResponse.isError()) {
reject(new PluginError(res, this));
} else {
resolve(pluginResponse);
}
}).catch((err)=>{
reject(err);
});

@ -1,5 +1,6 @@
'use strict';
var assert = require('chai').assert;
var _ = require('lodash');
var Promise = require('bluebird');
var PluginHandle = require('../plugin-handle').PluginHandle;
@ -26,8 +27,9 @@ class VideoRoomHandle extends PluginHandle {
this.requestMessage({
request: 'create'
}).then((res)=>{
assert.isNumber(res.getData().room, 'Missing room id in response');
resolve(new VideoRoom({
room: _.get(res.getResponse(), 'plugindata.data.room', null)
room: res.getData().room
}, this));
}).catch((err)=>{
reject(err);
@ -37,9 +39,10 @@ class VideoRoomHandle extends PluginHandle {
destroy(room) {
return new Promise((resolve, reject)=>{
assert.isNotNaN(parseInt(room));
this.requestMessage({
request: 'destroy',
room: room
room: parseInt(room)
}).then(()=>{
resolve();
}).catch((err)=>{
@ -48,12 +51,26 @@ class VideoRoomHandle extends PluginHandle {
});
}
exists(room) {
return new Promise((resolve, reject)=>{
assert.isNotNaN(parseInt(room));
this.requestMessage({
request: 'exists',
room: parseInt(room)
}).then((res)=>{
resolve(res.getData().exists);
}).catch((err)=>{
reject(err);
});
});
}
list() {
return new Promise((resolve, reject)=>{
this.requestMessage({
request: 'list'
}).then((res)=>{
resolve(_.get(res.getResponse(), 'plugindata.data.list', []));
resolve(res.getData().list || []);
}).catch((err)=>{
reject(err);
});
@ -62,6 +79,7 @@ class VideoRoomHandle extends PluginHandle {
joinPublisher(room) {
return new Promise((resolve, reject)=>{
assert.isNotNaN(parseInt(room));
var transaction = this.transactMessage({
request: 'join',
ptype: 'publisher',

@ -87,11 +87,27 @@ describe('PluginHandle', function(){
});
it('should destroy a room', function(done) {
done();
handle.destroy(123).then(()=>{
done();
}).catch((err)=>{
done(err);
});
});
it('should check whether a room exists or not', function(done) {
done();
it('should fail while destroying a none existing room', function(done) {
handle.destroy(123).then(()=>{
done();
}).catch((err)=>{
done(err);
});
});
it('should check whether a room exists', function(done) {
handle.exists(123).then(()=>{
done();
}).catch((err)=>{
done(err);
});
});
it('should list all rooms', function(done) {

@ -0,0 +1,101 @@
'use strict';
var assert = require('chai').assert;
var ClientResponse = require('../src/client/response').ClientResponse;
var PluginResponse = require('../src/client/response').PluginResponse;
var JanusResponse = require('../src/mock/janus-response');
describe('Response', function(){
describe('ClientResponse', function(){
it('should return request and response', function(done){
var createSessionReq = {
janus: 'create',
transaction: '1234567890'
};
var createSessionRes = JanusResponse.session.create(createSessionReq);
var clientResponse = new ClientResponse(createSessionReq, createSessionRes);
assert.deepEqual(clientResponse.getRequest(), createSessionReq);
assert.deepEqual(clientResponse.getResponse(), createSessionRes);
done();
});
it('should check whether the response is a success response', function(done){
var createSessionReq = {
janus: 'create',
transaction: '1234567890'
};
var createSessionRes = JanusResponse.session.create(createSessionReq);
var clientResponse = new ClientResponse(createSessionReq, createSessionRes);
assert.equal(clientResponse.getType(), 'success');
assert.isTrue(clientResponse.isSuccess());
assert.isFalse(clientResponse.isAck());
assert.isFalse(clientResponse.isError());
done();
});
it('should check whether the response is a ack response', function(done){
var keepAliveReq = {
janus: 'keepalive',
transaction: '1234567890'
};
var keepAliveRes = JanusResponse.session.keepAlive(keepAliveReq);
var clientResponse = new ClientResponse(keepAliveReq, keepAliveRes);
assert.equal(clientResponse.getType(), 'ack');
assert.isFalse(clientResponse.isSuccess());
assert.isTrue(clientResponse.isAck());
assert.isFalse(clientResponse.isError());
done();
});
it('should check whether the response is a error response', function(done){
var createSessionReq = {
janus: 'create',
transaction: '1234567890'
};
var errRes = JanusResponse.error.general.unauthorized(createSessionReq);
var clientResponse = new ClientResponse(createSessionReq, errRes);
assert.equal(clientResponse.getType(), 'error');
assert.isFalse(clientResponse.isSuccess());
assert.isFalse(clientResponse.isAck());
assert.isTrue(clientResponse.isError());
done();
});
});
describe('PluginResponse', function(){
it('should return plugin name and data', function(){
var createRoomReq = {
janus: 'message',
body: {
request: 'create'
},
handle_id: 123,
session_id: 456,
transaction: 'abc'
};
var createRoomRes = JanusResponse.videoRoomHandle.create(createRoomReq);
var pluginResponse = new PluginResponse(createRoomReq, createRoomRes);
assert.equal(pluginResponse.getName(), createRoomRes.plugindata.plugin);
assert.deepEqual(pluginResponse.getData(), createRoomRes.plugindata.data);
});
it('should return error code and message', function(){
var destroyRoomReq = {
janus: 'message',
body: {
request: 'destroy',
room: 123
},
handle_id: 456,
session_id: 789,
transaction: 'abc'
};
var destroyRoomRes = JanusResponse.videoRoomHandle.error.destroy(destroyRoomReq);
var pluginResponse = new PluginResponse(destroyRoomReq, destroyRoomRes);
assert.isTrue(pluginResponse.isError());
});
});
});
Loading…
Cancel
Save