connection-wrapper.html 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <link rel="import" href="p2p-network.html">
  2. <link rel="import" href="web-socket.html">
  3. <dom-module id="connection-wrapper">
  4. <template>
  5. <p2p-network id="p2p" me="{{me}}"></p2p-network>
  6. <web-socket id="ws" me="{{me}}"></web-socket>
  7. </template>
  8. <script>
  9. 'use strict';
  10. (function() {
  11. function guid() {
  12. function s4() {
  13. return Math.floor((1 + Math.random()) * 0x10000)
  14. .toString(16)
  15. .substring(1);
  16. }
  17. return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
  18. s4() + '-' + s4() + s4() + s4();
  19. }
  20. var webRTCSupported = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection || window.webkitRTCPeerConnection;
  21. function rtcConnectionSupported(peerId) {
  22. return webRTCSupported && (peerId.indexOf('rtc_') === 0);
  23. }
  24. Polymer({
  25. is: 'connection-wrapper',
  26. properties: {
  27. me: {
  28. notify: true,
  29. value: (webRTCSupported ? 'rtc_' : 'ws_') + guid()
  30. }
  31. },
  32. behaviors: [Chat.FileTransferProtocol],
  33. _sendFile: function(toPeer, file) {
  34. if (!rtcConnectionSupported(toPeer)) {
  35. this.$.ws._sendFile(toPeer, file);
  36. } else {
  37. this.$.p2p._sendFile(toPeer, file);
  38. }
  39. },
  40. _sendSystemEvent: function(toPeer, event) {
  41. console.log('system event', toPeer, event);
  42. if (!rtcConnectionSupported(toPeer)) {
  43. this.$.ws._sendSystemEvent(toPeer, event);
  44. } else {
  45. this.$.p2p._sendSystemEvent(toPeer, event);
  46. }
  47. },
  48. connectToPeer: function(toPeer, callback) {
  49. if (!rtcConnectionSupported(toPeer)) {
  50. callback();
  51. } else {
  52. this.$.p2p.connectToPeer(toPeer,callback);
  53. }
  54. },
  55. });
  56. })();
  57. </script>
  58. </dom-module>