'use strict';
var loopbackWebSocket = null;
var LOOPBACK_CLIENT_ID = 'loopback_client_id';
function setupLoopback(wssUrl, roomId) {
if (loopbackWebSocket) {
loopbackWebSocket.close();
}
trace('Setting up loopback WebSocket.');
loopbackWebSocket = new WebSocket(wssUrl);
var sendLoopbackMessage = function(message) {
var msgString = JSON.stringify({
cmd: 'send',
msg: JSON.stringify(message)
});
loopbackWebSocket.send(msgString);
};
loopbackWebSocket.onopen = function() {
trace('Loopback WebSocket opened.');
var registerMessage = {
cmd: 'register',
roomid: roomId,
clientid: LOOPBACK_CLIENT_ID
};
loopbackWebSocket.send(JSON.stringify(registerMessage));
};
loopbackWebSocket.onmessage = function(event) {
var wssMessage;
var message;
try {
wssMessage = JSON.parse(event.data);
message = JSON.parse(wssMessage.msg);
} catch (e) {
trace('Error parsing JSON: ' + event.data);
return;
}
if (wssMessage.error) {
trace('WSS error: ' + wssMessage.error);
return;
}
if (message.type === 'offer') {
message.type = 'answer';
message.sdp = message.sdp
.replace('a=ice-options:google-ice\r\n', '')
.replace(/a=crypto:[1-9]+ .*\r\n/g, '');
sendLoopbackMessage(message);
} else if (message.type === 'candidate') {
sendLoopbackMessage(message);
}
};
loopbackWebSocket.onclose = function(event) {
trace('Loopback WebSocket closed with code:' + event.code + ' reason:' +
event.reason);
};
}