close.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /**
  2. * @type {typeof import("../..").Peer}
  3. */
  4. const Peer = window.peerjs.Peer;
  5. document.getElementsByTagName("title")[0].innerText =
  6. window.location.hash.substring(1);
  7. const callBtn = document.getElementById("call-btn");
  8. console.log(callBtn);
  9. const receiverIdInput = document.getElementById("receiver-id");
  10. const closeBtn = document.getElementById("close-btn");
  11. const messages = document.getElementById("messages");
  12. const errorMessage = document.getElementById("error-message");
  13. const stream = window["sender-stream"].captureStream(30);
  14. const peer = new Peer({ debug: 3 });
  15. /**
  16. * @type {import("peerjs").MediaConnection}
  17. */
  18. let mediaConnection;
  19. peer
  20. .once("open", (id) => {
  21. messages.textContent = `Your Peer ID: ${id}`;
  22. })
  23. .once("error", (error) => {
  24. errorMessage.textContent = JSON.stringify(error);
  25. })
  26. .once("call", (call) => {
  27. mediaConnection = call;
  28. mediaConnection
  29. .once("stream", function (stream) {
  30. const video = document.getElementById("receiver-stream");
  31. video.srcObject = stream;
  32. video.play();
  33. })
  34. .once("close", () => {
  35. messages.textContent = "Closed!";
  36. })
  37. .once("willCloseOnRemote", () => {
  38. messages.textContent = "Connected!";
  39. });
  40. call.answer(stream);
  41. });
  42. callBtn.addEventListener("click", async () => {
  43. console.log("calling");
  44. /** @type {string} */
  45. const receiverId = receiverIdInput.value;
  46. if (receiverId) {
  47. mediaConnection = peer.call(receiverId, stream);
  48. mediaConnection
  49. .once("stream", (stream) => {
  50. const video = document.getElementById("receiver-stream");
  51. video.srcObject = stream;
  52. video.play();
  53. messages.innerText = "Connected!";
  54. })
  55. .once("close", () => {
  56. messages.textContent = "Closed!";
  57. });
  58. }
  59. });
  60. closeBtn.addEventListener("click", () => {
  61. mediaConnection.close();
  62. });
  63. callBtn.disabled = false;