From 37542dc0e6d1c462b9e5620a24b1c1022c093cf0 Mon Sep 17 00:00:00 2001 From: Mitchell McCaffrey Date: Fri, 23 Oct 2020 10:27:22 +1100 Subject: [PATCH] Moved session and connection helpers and change data sending to use write streams --- src/{helpers => network}/Connection.js | 5 +++-- src/network/NetworkedMapAndTokens.js | 2 +- src/network/NetworkedParty.js | 2 +- src/{helpers => network}/Session.js | 2 +- src/routes/Game.js | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) rename src/{helpers => network}/Connection.js (94%) rename src/{helpers => network}/Session.js (99%) diff --git a/src/helpers/Connection.js b/src/network/Connection.js similarity index 94% rename from src/helpers/Connection.js rename to src/network/Connection.js index d5085c3..40c490d 100644 --- a/src/helpers/Connection.js +++ b/src/network/Connection.js @@ -2,7 +2,7 @@ import SimplePeer from "simple-peer"; import { encode, decode } from "@msgpack/msgpack"; import shortid from "shortid"; -import blobToBuffer from "./blobToBuffer"; +import blobToBuffer from "../helpers/blobToBuffer"; // Limit buffer size to 16kb to avoid issues with chrome packet size // http://viblast.com/blog/2015/2/5/webrtc-data-channel-message-size/ @@ -63,7 +63,8 @@ class Connection extends SimplePeer { const chunks = this.chunk(packedData); for (let chunk of chunks) { if (this.dataChannels[channel]) { - this.dataChannels[channel].send(encode(chunk)); + // Write to the stream to allow for buffer / backpressure handling + this.dataChannels[channel].write(encode(chunk)); } else { super.send(encode(chunk)); } diff --git a/src/network/NetworkedMapAndTokens.js b/src/network/NetworkedMapAndTokens.js index c6efd0b..cd892e9 100644 --- a/src/network/NetworkedMapAndTokens.js +++ b/src/network/NetworkedMapAndTokens.js @@ -10,7 +10,7 @@ import { omit } from "../helpers/shared"; import useDebounce from "../helpers/useDebounce"; // Load session for auto complete // eslint-disable-next-line no-unused-vars -import Session from "../helpers/Session"; +import Session from "./Session"; import Map from "../components/map/Map"; import Tokens from "../components/token/Tokens"; diff --git a/src/network/NetworkedParty.js b/src/network/NetworkedParty.js index 3e03326..cf8f02d 100644 --- a/src/network/NetworkedParty.js +++ b/src/network/NetworkedParty.js @@ -2,7 +2,7 @@ import React, { useContext, useState, useEffect, useCallback } from "react"; // Load session for auto complete // eslint-disable-next-line no-unused-vars -import Session from "../helpers/Session"; +import Session from "./Session"; import { isStreamStopped, omit, fromEntries } from "../helpers/shared"; import AuthContext from "../contexts/AuthContext"; diff --git a/src/helpers/Session.js b/src/network/Session.js similarity index 99% rename from src/helpers/Session.js rename to src/network/Session.js index 7343c72..f410afd 100644 --- a/src/helpers/Session.js +++ b/src/network/Session.js @@ -3,7 +3,7 @@ import { EventEmitter } from "events"; import Connection from "./Connection"; -import { omit } from "./shared"; +import { omit } from "../helpers/shared"; /** * @typedef {object} SessionPeer diff --git a/src/routes/Game.js b/src/routes/Game.js index 45a66f0..54fa351 100644 --- a/src/routes/Game.js +++ b/src/routes/Game.js @@ -14,7 +14,7 @@ import { MapStageProvider } from "../contexts/MapStageContext"; import NetworkedMapAndTokens from "../network/NetworkedMapAndTokens"; import NetworkedParty from "../network/NetworkedParty"; -import Session from "../helpers/Session"; +import Session from "../network/Session"; const session = new Session();