@@ -134,87 +134,68 @@ export const useChartSocket = ({
134
134
}
135
135
} ;
136
136
137
- // Socket.IO implementation
137
+ // Socket.IO implementation - Initialize socket
138
138
useEffect ( ( ) => {
139
+ // FIXME: currently: allway create instance of socket.io
139
140
if ( socketType === "socketio" && socketIOUrl ) {
140
- const initSocketIO = async ( ) => {
141
- try {
142
- // Clean up existing socket if any
143
- if ( socketIORef . current ) {
144
- socketIORef . current . off ( eventName || "updateOhlcv" , ohlcvHandler ) ;
145
- socketIORef . current . disconnect ( ) ;
146
- socketIORef . current = null ;
147
- }
148
-
149
- const socket = io ( socketIOUrl , {
150
- transports : [ "websocket" , "polling" ] , // Fallback to polling if websocket fails
151
- autoConnect : false , // Don't auto connect, we'll connect manually
152
- reconnection : true ,
153
- reconnectionAttempts : reconnectAttempts || WEBSOCKET_RECONNECT_ATTEMPTS ,
154
- reconnectionDelay : reconnectInterval || WEBSOCKET_RECONNECT_INTERVAL ,
155
- reconnectionDelayMax : 5000 ,
156
- timeout : 20000 , // Increase timeout
157
- forceNew : true , // Force new connection
158
- ...socketIOOptions
159
- } ) ;
160
-
161
- socket . on ( "connect" , ( ) => {
162
- console . info ( "useChartSocket: Socket.IO connected - " , socketIOUrl ) ;
163
- setIsConnected ( true ) ;
164
- } ) ;
165
-
166
- socket . on ( "disconnect" , ( reason ) => {
167
- console . info ( "useChartSocket: Socket.IO disconnected" , reason ) ;
168
- setIsConnected ( false ) ;
169
- } ) ;
170
-
171
- socket . on ( "connect_error" , ( error ) => {
172
- console . error ( "useChartSocket: Socket.IO connection error" , error ) ;
173
- setIsConnected ( false ) ;
174
- } ) ;
175
-
176
- socket . on ( "reconnect_attempt" , ( attemptNumber ) => {
177
- console . info ( `useChartSocket: Socket.IO reconnection attempt ${ attemptNumber } ` ) ;
178
- } ) ;
179
-
180
- socket . on ( "reconnect_failed" , ( ) => {
181
- console . error ( "useChartSocket: Socket.IO reconnection failed" ) ;
182
- setIsConnected ( false ) ;
183
- } ) ;
184
-
185
- socket . on ( "error" , ( error ) => {
186
- console . error ( "useChartSocket: Socket.IO error" , error ) ;
187
- } ) ;
188
-
189
- // Listen for ADL updateOhlcv events
190
- socket . on ( eventName || "updateOhlcv" , ohlcvHandler ) ;
191
-
192
- socketIORef . current = socket ;
193
-
194
- // Connect manually after setting up all event handlers
195
- socket . connect ( ) ;
196
- } catch ( error ) {
197
- console . error ( "useChartSocket: Failed to initialize Socket.IO" , error ) ;
141
+ const socket = io ( socketIOUrl , {
142
+ transports : [ "websocket" ] ,
143
+ reconnectionAttempts : reconnectAttempts || WEBSOCKET_RECONNECT_ATTEMPTS ,
144
+ reconnectionDelay : reconnectInterval || WEBSOCKET_RECONNECT_INTERVAL ,
145
+ ...socketIOOptions
146
+ } ) ;
147
+
148
+ socket . on ( "connect" , ( ) => {
149
+ console . info ( "useChartSocket: Socket.IO connected - " , socketIOUrl , socket . id ) ;
150
+ setIsConnected ( true ) ;
151
+ } ) ;
152
+
153
+ socket . on ( "disconnect" , ( reason ) => {
154
+ console . info ( "useChartSocket: Socket.IO disconnected" , reason , socket . id ) ;
155
+ setIsConnected ( false ) ;
156
+ } ) ;
157
+
158
+ socket . on ( "connect_error" , ( error ) => {
159
+ if ( socket . active ) {
160
+ // temporary failure, the socket will automatically try to reconnect
161
+ console . warn ( "useChartSocket: Temporary connection error, attempting to reconnect..." , error . message ) ;
162
+ } else {
163
+ // the connection was denied by the server
164
+ console . error ( "useChartSocket: Connection denied by server" , error . message ) ;
198
165
setIsConnected ( false ) ;
199
166
}
200
- } ;
167
+ } ) ;
201
168
202
- initSocketIO ( ) ;
169
+ socketIORef . current = socket ;
203
170
204
171
return ( ) => {
205
172
if ( socketIORef . current ) {
206
- try {
207
- socketIORef . current . off ( eventName || "updateOhlcv" , ohlcvHandler ) ;
208
- socketIORef . current . disconnect ( ) ;
209
- socketIORef . current = null ;
210
- setIsConnected ( false ) ;
211
- } catch ( error ) {
212
- console . error ( "useChartSocket: Error during cleanup" , error ) ;
213
- }
173
+ socketIORef . current . off ( "connect" ) ;
174
+ socketIORef . current . off ( "disconnect" ) ;
175
+ socketIORef . current . off ( "connect_error" ) ;
176
+ socketIORef . current . disconnect ( ) ;
177
+ socketIORef . current = null ;
178
+ setIsConnected ( false ) ;
214
179
}
215
180
} ;
216
181
}
217
- } , [ socketType , socketIOUrl , eventName , reconnectAttempts , reconnectInterval , socketIOOptions ] ) ;
182
+ // FIXME: socketConfig,... is constant so no need add to dependency array
183
+ // }, [socketType, socketIOUrl, reconnectAttempts, reconnectInterval, socketIOOptions]);
184
+ } , [ ] ) ;
185
+
186
+ // Socket.IO implementation - Handle events
187
+ useEffect ( ( ) => {
188
+ if ( socketType === "socketio" && socketIORef . current ) {
189
+ const socket = socketIORef . current ;
190
+
191
+ // Listen for ADL updateOhlcv events
192
+ socket . on ( eventName || "updateOhlcv" , ohlcvHandler ) ;
193
+
194
+ return ( ) => {
195
+ socket . off ( eventName || "updateOhlcv" , ohlcvHandler ) ;
196
+ } ;
197
+ }
198
+ } , [ socketType , eventName ] ) ;
218
199
219
200
// WebSocket subscription logic
220
201
useEffect ( ( ) => {
0 commit comments