socket.utils.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { Observable } from 'rxjs';
  2. import { createServer } from 'http';
  3. import { Server, Socket as ServerSocket } from 'socket.io';
  4. import { io, Socket as ClientSocket } from 'socket.io-client';
  5. export function startSocketServer(port: number): Observable<ServerSocket> {
  6. return new Observable((observer) => {
  7. try {
  8. let httpServer = createServer();
  9. let socketServer = new Server(httpServer)
  10. // something wrong here
  11. socketServer.on('connection', (socket) => {
  12. // console.log(`New client connected ${socket.id}`)
  13. observer.next(socket)
  14. })
  15. socketServer.engine.on("connection_error", (err) => {
  16. console.log(err.req); // the request object
  17. console.log(err.code); // the error code, for example 1
  18. console.log(err.message); // the error message, for example "Session ID unknown"
  19. console.log(err.context); // some additional error context
  20. });
  21. // Start the socketServer
  22. httpServer.listen(port)
  23. } catch (error) {
  24. observer.error(error)
  25. }
  26. })
  27. }
  28. export async function startClientSocketConnection(serverUrl: string): Promise<ClientSocket> {
  29. return new Promise((resolve, reject) => {
  30. try {
  31. let clientSocket = io(serverUrl, {
  32. reconnection: true, // Enable automatic reconnections
  33. reconnectionAttempts: 100, // Retry up to 10 times
  34. reconnectionDelay: 500, // Start with a 500ms delay
  35. reconnectionDelayMax: 10000, // Delay can grow to a max of 10 seconds
  36. randomizationFactor: 0.3,
  37. })
  38. // Listen for a connection event
  39. clientSocket.on('connect', () => {
  40. // console.log('Connected to the server:', clientSocket.id)
  41. resolve(clientSocket)
  42. });
  43. }
  44. catch (error) {
  45. reject(error)
  46. }
  47. })
  48. }