|
@@ -8,6 +8,8 @@ import mediaActionProcessor from "./processors/mediaActionProcessor";
|
|
|
import controlProcessor from "./processors/controlProcessor";
|
|
|
import searchIdResultProcessor from "./processors/searchIdResultProcessor";
|
|
|
|
|
|
+const RETRY_TIMEOUT = 1000;
|
|
|
+
|
|
|
function registerHandlers(resolver) {
|
|
|
resolver.register(MessageTypes.STATE, stateProcessor);
|
|
|
resolver.register(MessageTypes.LIST_OPERATION, listOperationProcessor);
|
|
@@ -33,20 +35,35 @@ export default function useRoom(path) {
|
|
|
const resolverRef = useRef(new Resolver());
|
|
|
const [connected, setConnected] = useState(false);
|
|
|
|
|
|
+ const [tryConnect, setTryReconnect] = useState({ go: true });
|
|
|
+
|
|
|
useEffect(() => {
|
|
|
if (path !== null) {
|
|
|
- const ws = resolverRef.current.connectSocket(path);
|
|
|
- ws.addEventListener("open", function () {
|
|
|
- setConnected(true);
|
|
|
- ws.send(makeMessage(MessageTypes.STATE, null))
|
|
|
- });
|
|
|
- ws.addEventListener("message", console.log);
|
|
|
- return (() => {
|
|
|
- ws.close();
|
|
|
- setConnected(false);
|
|
|
- })
|
|
|
+ if (tryConnect.go) {
|
|
|
+ const ws = resolverRef.current.connectSocket(path);
|
|
|
+ ws.addEventListener("open", function () {
|
|
|
+ setConnected(true);
|
|
|
+ ws.send(makeMessage(MessageTypes.STATE, null))
|
|
|
+ });
|
|
|
+ ws.addEventListener("message", (...args) => console.warn("Received message before handler could be set", args));
|
|
|
+ const setRetryFlag = () => {
|
|
|
+ const code = setTimeout(() => setTryReconnect({ go: true }), RETRY_TIMEOUT)
|
|
|
+ setTryReconnect({ code, go: false })
|
|
|
+ }
|
|
|
+ ws.addEventListener("error", setRetryFlag)
|
|
|
+ ws.addEventListener("close", setRetryFlag)
|
|
|
+ return (() => {
|
|
|
+ setConnected(false);
|
|
|
+ ws.removeEventListener("close", setRetryFlag);
|
|
|
+ ws.close();
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ return () => {
|
|
|
+ clearTimeout(tryConnect.code)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- }, [path])
|
|
|
+ }, [path, tryConnect])
|
|
|
|
|
|
useEffect(() => {
|
|
|
const currentResolver = resolverRef.current;
|
|
@@ -67,7 +84,7 @@ export default function useRoom(path) {
|
|
|
return () => unRegisterHandlers(resolver)
|
|
|
}, [connected, resolverRef])
|
|
|
|
|
|
- const resolver =resolverRef.current;
|
|
|
+ const resolver = resolverRef.current;
|
|
|
const websocket = resolver.websocket;
|
|
|
|
|
|
return {
|