XHR/XMLHttpRequest for WebRTC Signaling
XHR/XMLHttpRequest based WebRTC signaling implementation.
Though, this repository is part of WebRTC Experiments however you can use it within any WebRTC project!
// database has a single table; which has two columns: // 1) Message (required to store JSON data) // 2) ID (optional: as primary key) // a simple function to make XMLHttpRequests function xhr(url, callback, data) { if (!window.XMLHttpRequest || !window.JSON) return; var request = new XMLHttpRequest(); request.onreadystatechange = function () { if (callback && request.readyState == 4 && request.status == 200) { // server MUST return JSON text callback(JSON.parse(request.responseText)); } }; request.open('POST', url); var formData = new FormData(); // you're passing "message" parameter formData.append('message', data); request.send(formData); } // this object is used to store "onmessage" callbacks from "openSignalingChannel handler var onMessageCallbacks = {}; // this object is used to make sure identical messages are not used multiple times var messagesReceived = {}; function repeatedlyCheck() { xhr('/Home/GetData', function (data) { // if server says nothing; wait. if (data == false) return setTimeout(repeatedlyCheck, 400); // if already receied same message; skip. if (messagesReceived[data.ID]) return setTimeout(repeatedlyCheck, 400); messagesReceived[data.ID] = data.Message; // "Message" property is JSON-ified in "openSignalingChannel handler data = JSON.parse(data.Message); // don't pass self messages over "onmessage" handlers if (data.sender != connection.userid && onMessageCallbacks[data.channel]) { onMessageCallbacks[data.channel](data.message); } // repeatedly check the database setTimeout(repeatedlyCheck, 1); }); } repeatedlyCheck(); // overriding "openSignalingChannel handler connection.openSignalingChannel = function (config) { var channel = config.channel || this.channel; onMessageCallbacks[channel] = config.onmessage; // let RTCMultiConnection know that server connection is opened! if (config.onopen) setTimeout(config.onopen, 1); // returning an object to RTCMultiConnection // so it can send data using "send" method return { send: function (data) { data = { channel: channel, message: data, sender: connection.userid }; // posting data to server // data is also JSON-ified. xhr('/Home/PostData', null, JSON.stringify(data)); }, channel: channel }; };Source code is available here: https://github.com/muaz-khan/XHR-Signaling
Remember: You can use same code JavaScript code both for PHP and ASP.NET.
=
=
=
- www.rtcmulticonnection.org/docs/
- https:/www.webrtc-experiment.com/
- https://www.webrtc-experiment.com/docs/WebRTC-Signaling-Concepts.html
=
Muaz Khan (muazkh@gmail.com) - @muazkh / @WebRTCWeb
=
WebRTC Experiments are released under MIT licence . Copyright (c) Muaz Khan.
