var signaling = function(options){ var socket = new WebSocket(options.webSocketAddress); var logg = function(s) { console.log(s); }; var myId = options.id; var that = {}; var callbacks = {}; function getCallback(type){ return callbacks[type] !== undefined ? callbacks[type] : function(){ console.log("Callback of type " + type + " not found"); }; } that.addCallback = function(type, f){ callbacks[type] = f; } that.sendMessage = function(message, to) { sendMsg(message, to); } that.sendPresence = function(_name, stat){ _status = stat || 'on'; myId = _name; sendMsg({type: 'presence', name: _name, status: _status}); } that.joinRoom = function(room){ sendMsg({type: 'room'}, room); } that.callOtherParty = function(to){ sendMsg({type: 's-offer'}, to); }; that.answer = function(to, _answer){ sendMsg({type: 's-answer', answer: _answer}, to); }; function sendMsg(message, to){ message.from = myId; if(to !== undefined) message.to = to; var mymsg = JSON.stringify(message); logg("SOCKET Send: " + mymsg); socket.send(mymsg); } socket.addEventListener("message", onMessage, false); socket.addEventListener("error", function(event) { logg("SOCKET Error: " + event); }); socket.addEventListener("close", function(event) { logg("SOCKET Close: " + event); }); function onMessage(evt) { logg("RECEIVED: " + evt.data); processSignalingMessage(evt.data); } //message comes as a JSON from the websocket server function processSignalingMessage(message) { var msg = JSON.parse(message); logg("processSignalingMessage type(" + msg.type + ")= " + message); getCallback(msg.type)(msg); } return that; }