@@ -19,7 +19,7 @@ import {
1919import Frequencies from "Components/statusBar/Frequencies" ;
2020import { StyledExerciseContainer } from "Styles/layouts/ExerciseContainer.styles" ;
2121import { getHalGuiMethods } from "Helpers/editor" ;
22- import { subscribe , unsubscribe } from "Helpers/utils" ;
22+ import { clearTimeouts , subscribe , unsubscribe } from "Helpers/utils" ;
2323import { fileExplorer } from "Helpers/explorer" ;
2424import getTools from "Helpers/tools" ;
2525
@@ -47,6 +47,9 @@ const ExerciseContainer = ({
4747 multiLanguage : boolean ;
4848 children : JSX . Element ;
4949} ) => {
50+ const hasTriedToConnect = useRef ( false ) ;
51+ const timeoutRef = useRef < number | null > ( null ) ;
52+ const connectTimeoutRef = useRef < number | null > ( null ) ;
5053 const [ manager , setManager ] = useState < CommsManager | null > ( null ) ;
5154 const [ universes , setUniverses ] = useState < string [ ] | undefined > ( undefined ) ;
5255 const toolsList = getTools ( manager , tools , children ) ;
@@ -63,9 +66,6 @@ const ExerciseContainer = ({
6366 setUniverses ( list ) ;
6467 } ;
6568
66- // RB manager setup
67- const connected = useRef < boolean > ( false ) ;
68-
6969 const resetUniverse = ( e : unknown ) => {
7070 const T = CustomEvent < { detail : unknown } > ;
7171 if ( e instanceof T ) {
@@ -76,49 +76,60 @@ const ExerciseContainer = ({
7676 } ;
7777
7878 useEffect ( ( ) => {
79- const manager = CommsManager . getInstance ( ) ;
80- setManager ( manager ) ;
8179 subscribe ( "CommsManagerStateChange" , resetUniverse ) ;
8280
8381 return ( ) => {
8482 unsubscribe ( "CommsManagerStateChange" , ( ) => { } ) ;
85- const currManager = CommsManager . getInstance ( ) ;
86- if ( currManager ) {
87- currManager . disconnect ( ) ;
83+
84+ if ( hasTriedToConnect . current ) {
85+ const currManager = CommsManager . getInstance ( ) ;
86+ if ( currManager ) {
87+ currManager . disconnect ( ) ;
88+ CommsManager . deleteInstance ( ) ;
89+ setManager ( null ) ;
90+ }
8891 }
92+
93+ clearTimeouts ( [ timeoutRef , connectTimeoutRef ] ) ;
8994 } ;
9095 } , [ ] ) ;
9196
9297 const connectWithRetry = async (
9398 desiredState ?: string ,
9499 callback ?: ( ) => void
95100 ) => {
96- console . log ( manager ?. getState ( ) , CommsManager . getInstance ( ) . getState ( ) ) ;
97- if ( ! manager || manager ?. getState ( ) != "idle" ) {
98- return ;
99- }
100101 try {
101102 const currManager = CommsManager . getInstance ( ) ;
102- console . log ( currManager ) ;
103+ hasTriedToConnect . current = true ;
103104 await currManager . connect ( ) ;
104105 getUniverseList ( project ) ;
105106 console . log ( "Connected!" , currManager . getState ( ) ) ;
106- connected . current = true ;
107107 setManager ( currManager ) ;
108108 if ( callback ) {
109109 waitManagerState ( desiredState ? desiredState : "connected" , callback ) ;
110110 }
111111 } catch {
112112 console . log ( "Connection failed, trying again!" ) ;
113- setTimeout ( connectWithRetry , 2000 , desiredState , callback ) ;
113+ timeoutRef . current = window . setTimeout (
114+ connectWithRetry ,
115+ 2000 ,
116+ desiredState ,
117+ callback
118+ ) ;
114119 }
115120 } ;
116121
117122 const waitManagerState = async ( state : string , callback : ( ) => void ) => {
118- if ( manager ?. getState ( ) === state ) {
123+ const currManager = CommsManager . getInstance ( ) ;
124+ if ( currManager ?. getState ( ) === state ) {
119125 callback ( ) ;
120126 } else {
121- return setTimeout ( waitManagerState , 100 , state , callback ) ;
127+ connectTimeoutRef . current = window . setTimeout (
128+ waitManagerState ,
129+ 100 ,
130+ state ,
131+ callback
132+ ) ;
122133 }
123134 } ;
124135
0 commit comments