@@ -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 ) ;
@@ -76,15 +79,26 @@ const ExerciseContainer = ({
7679 } ;
7780
7881 useEffect ( ( ) => {
79- const manager = CommsManager . getInstance ( ) ;
80- setManager ( manager ) ;
8182 subscribe ( "CommsManagerStateChange" , resetUniverse ) ;
8283
8384 return ( ) => {
8485 unsubscribe ( "CommsManagerStateChange" , ( ) => { } ) ;
85- const currManager = CommsManager . getInstance ( ) ;
86- if ( currManager ) {
87- currManager . disconnect ( ) ;
86+
87+ if ( hasTriedToConnect . current ) {
88+ const currManager = CommsManager . getInstance ( ) ;
89+ if ( currManager ) {
90+ currManager . disconnect ( ) ;
91+ CommsManager . deleteInstance ( ) ;
92+ setManager ( null ) ;
93+ }
94+ }
95+
96+ if ( timeoutRef . current ) {
97+ window . clearTimeout ( timeoutRef . current ) ;
98+ }
99+
100+ if ( connectTimeoutRef . current ) {
101+ window . clearTimeout ( connectTimeoutRef . current ) ;
88102 }
89103 } ;
90104 } , [ ] ) ;
@@ -93,13 +107,9 @@ const ExerciseContainer = ({
93107 desiredState ?: string ,
94108 callback ?: ( ) => void
95109 ) => {
96- console . log ( manager ?. getState ( ) , CommsManager . getInstance ( ) . getState ( ) ) ;
97- if ( ! manager || manager ?. getState ( ) != "idle" ) {
98- return ;
99- }
100110 try {
101111 const currManager = CommsManager . getInstance ( ) ;
102- console . log ( currManager ) ;
112+ hasTriedToConnect . current = true ;
103113 await currManager . connect ( ) ;
104114 getUniverseList ( project ) ;
105115 console . log ( "Connected!" , currManager . getState ( ) ) ;
@@ -110,15 +120,26 @@ const ExerciseContainer = ({
110120 }
111121 } catch {
112122 console . log ( "Connection failed, trying again!" ) ;
113- setTimeout ( connectWithRetry , 2000 , desiredState , callback ) ;
123+ timeoutRef . current = window . setTimeout (
124+ connectWithRetry ,
125+ 2000 ,
126+ desiredState ,
127+ callback
128+ ) ;
114129 }
115130 } ;
116131
117132 const waitManagerState = async ( state : string , callback : ( ) => void ) => {
118- if ( manager ?. getState ( ) === state ) {
133+ const currManager = CommsManager . getInstance ( ) ;
134+ if ( currManager ?. getState ( ) === state ) {
119135 callback ( ) ;
120136 } else {
121- return setTimeout ( waitManagerState , 100 , state , callback ) ;
137+ connectTimeoutRef . current = window . setTimeout (
138+ waitManagerState ,
139+ 100 ,
140+ state ,
141+ callback
142+ ) ;
122143 }
123144 } ;
124145
0 commit comments