import { Observable } from 'rxjs'; import { createServer } from 'http'; import { Server, Socket as ServerSocket } from 'socket.io'; import { io, Socket as ClientSocket } from 'socket.io-client'; export function startSocketServer(port: number): Observable { return new Observable((observer) => { try { let httpServer = createServer(); let socketServer = new Server(httpServer) // something wrong here socketServer.on('connection', (socket) => { // console.log(`New client connected ${socket.id}`) observer.next(socket) }) socketServer.engine.on("connection_error", (err) => { console.log(err.req); // the request object console.log(err.code); // the error code, for example 1 console.log(err.message); // the error message, for example "Session ID unknown" console.log(err.context); // some additional error context }); // Start the socketServer httpServer.listen(port) } catch (error) { observer.error(error) } }) } export async function startClientSocketConnection(serverUrl: string): Promise { return new Promise((resolve, reject) => { try { let clientSocket = io(serverUrl, { reconnection: true, // Enable automatic reconnections reconnectionAttempts: 100, // Retry up to 10 times reconnectionDelay: 500, // Start with a 500ms delay reconnectionDelayMax: 10000, // Delay can grow to a max of 10 seconds randomizationFactor: 0.3, }) // Listen for a connection event clientSocket.on('connect', () => { // console.log('Connected to the server:', clientSocket.id) resolve(clientSocket) }); } catch (error) { reject(error) } }) }