serialization.js 2.5 KB

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