serialization.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /**
  2. * @type {typeof import("../../lib/exports.js").Peer}
  3. */
  4. const Peer = window.peerjs.Peer;
  5. const params = new URLSearchParams(document.location.search);
  6. const testfile = params.get("testfile");
  7. const serialization = params.get("serialization");
  8. const serializers = {};
  9. import(`./${testfile}.js`).then(({ check, send }) => {
  10. document.getElementsByTagName("title")[0].innerText =
  11. window.location.hash.substring(1);
  12. const checkBtn = document.getElementById("check-btn");
  13. const sendBtn = document.getElementById("send-btn");
  14. const receiverIdInput = document.getElementById("receiver-id");
  15. const connectBtn = document.getElementById("connect-btn");
  16. const messages = document.getElementById("messages");
  17. const result = document.getElementById("result");
  18. const errorMessage = document.getElementById("error-message");
  19. const peer = new Peer({ debug: 3, serializers });
  20. const received = [];
  21. /**
  22. * @type {import("../../lib/exports.js").DataConnection}
  23. */
  24. let dataConnection;
  25. peer
  26. .once("open", (id) => {
  27. messages.textContent = `Your Peer ID: ${id}`;
  28. })
  29. .once("error", (error) => {
  30. errorMessage.textContent = JSON.stringify(error);
  31. })
  32. .once("connection", (connection) => {
  33. dataConnection = connection;
  34. dataConnection.on("data", (data) => {
  35. console.log(data);
  36. received.push(data);
  37. });
  38. dataConnection.once("close", () => {
  39. messages.textContent = "Closed!";
  40. });
  41. });
  42. connectBtn.addEventListener("click", () => {
  43. const receiverId = receiverIdInput.value;
  44. if (receiverId) {
  45. dataConnection = peer.connect(receiverId, {
  46. reliable: true,
  47. serialization,
  48. });
  49. dataConnection.once("open", () => {
  50. messages.textContent = "Connected!";
  51. });
  52. }
  53. });
  54. checkBtn.addEventListener("click", async () => {
  55. try {
  56. console.log(received);
  57. check(received);
  58. result.textContent = "Success!";
  59. } catch (e) {
  60. result.textContent = "Failed!";
  61. errorMessage.textContent = JSON.stringify(e.message);
  62. } finally {
  63. messages.textContent = "Checked!";
  64. }
  65. });
  66. sendBtn.addEventListener("click", () => {
  67. dataConnection.once("error", (err) => {
  68. errorMessage.innerText = err.toString();
  69. });
  70. send(dataConnection);
  71. dataConnection.close({ flush: true });
  72. messages.textContent = "Sent!";
  73. });
  74. window["connect-btn"].disabled = false;
  75. });