diff --git a/examples/voip/README.md b/examples/voip/README.md new file mode 100644 index 000000000..1253d8000 --- /dev/null +++ b/examples/voip/README.md @@ -0,0 +1,9 @@ +To try it out, **you must build the SDK first** and then host this folder: + +``` + $ npm run build + $ cd examples/browser + $ python -m SimpleHTTPServer 8003 +``` + +Then visit ``http://localhost:8003``. diff --git a/examples/voip/browserTest.js b/examples/voip/browserTest.js new file mode 100644 index 000000000..53b19920c --- /dev/null +++ b/examples/voip/browserTest.js @@ -0,0 +1,89 @@ +"use strict"; +console.log("Loading browser sdk"); +var BASE_URL = "https://matrix.org"; +var TOKEN = "accesstokengoeshere"; +var USER_ID = "@username:localhost"; +var ROOM_ID = "!room:id"; + + +var client = matrixcs.createClient({ + baseUrl: BASE_URL, + accessToken: TOKEN, + userId: USER_ID +}); +var call; + +function disableButtons(place, answer, hangup) { + document.getElementById("hangup").disabled = hangup; + document.getElementById("answer").disabled = answer; + document.getElementById("call").disabled = place; +} + +function addListeners(call) { + var lastError = ""; + call.on("hangup", function() { + disableButtons(false, true, true); + document.getElementById("result").innerHTML = ( + "

Call ended. Last error: "+lastError+"

" + ); + }); + call.on("error", function(err) { + lastError = err.message; + call.hangup(); + disableButtons(false, true, true); + }); +} + +window.onload = function() { + document.getElementById("result").innerHTML = "

Please wait. Syncing...

"; + document.getElementById("config").innerHTML = "

" + + "Homeserver: "+BASE_URL+"
"+ + "Room: "+ROOM_ID+"
"+ + "User: "+USER_ID+"
"+ + "

"; + disableButtons(true, true, true); +}; + +client.on("syncComplete", function () { + document.getElementById("result").innerHTML = "

Ready for calls.

"; + disableButtons(false, true, true); + + document.getElementById("call").onclick = function() { + console.log("Placing call..."); + call = matrixcs.createNewMatrixCall( + client, ROOM_ID + ); + console.log("Call => %s", call); + addListeners(call); + call.placeVideoCall( + document.getElementById("remote"), + document.getElementById("local") + ); + document.getElementById("result").innerHTML = "

Placed call.

"; + disableButtons(true, true, false); + }; + + document.getElementById("hangup").onclick = function() { + console.log("Hanging up call..."); + console.log("Call => %s", call); + call.hangup(); + document.getElementById("result").innerHTML = "

Hungup call.

"; + }; + + document.getElementById("answer").onclick = function() { + console.log("Answering call..."); + console.log("Call => %s", call); + call.answer(); + disableButtons(true, true, false); + document.getElementById("result").innerHTML = "

Answered call.

"; + }; + + client.on("Call.incoming", function(c) { + console.log("Call ringing"); + disableButtons(true, false, false); + document.getElementById("result").innerHTML = "

Incoming call...

"; + call = c; + addListeners(call); + }); +}); +client.startClient(); diff --git a/examples/voip/index.html b/examples/voip/index.html new file mode 100644 index 000000000..a3259cfa1 --- /dev/null +++ b/examples/voip/index.html @@ -0,0 +1,26 @@ + + +VoIP Test + + + + + You can place and receive calls with this example. Make sure to edit the + constants in browserTest.js first. +
+
+ + + +
+
+ +
+
+
+
+ +
+
+ + diff --git a/examples/voip/lib/matrix.js b/examples/voip/lib/matrix.js new file mode 120000 index 000000000..e4b1b6ecb --- /dev/null +++ b/examples/voip/lib/matrix.js @@ -0,0 +1 @@ +../../../dist/browser-matrix-dev.js \ No newline at end of file diff --git a/lib/webrtc/call.js b/lib/webrtc/call.js index 753a2dff7..3ae8eeebe 100644 --- a/lib/webrtc/call.js +++ b/lib/webrtc/call.js @@ -7,7 +7,7 @@ var utils = require("../utils"); var EventEmitter = require("events").EventEmitter; var DEBUG = true; // set true to enable console logging. -// events: onHangup, error, replaced +// events: hangup, error, replaced /** * Construct a new Matrix Call. @@ -147,7 +147,7 @@ MatrixCall.prototype._initWithInvite = function(event) { if (self.peerConn.signalingState != 'closed') { self.peerConn.close(); } - self.emit("onHangup", self); + self.emit("hangup", self); } }, this.msg.lifetime - event.getAge()); } @@ -568,7 +568,7 @@ MatrixCall.prototype._onRemoteStreamEnded = function(event) { if (this.peerConn.signalingState != 'closed') { this.peerConn.close(); } - this.emit("onHangup", this); + this.emit("hangup", this); }; /** @@ -638,7 +638,7 @@ var terminate = function(self, hangupParty, hangupReason, shouldEmit) { self.peerConn.close(); } if (shouldEmit) { - self.emit("onHangup", self); + self.emit("hangup", self); } };