socket.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // socket.ts
  2. import { Server, Socket } from 'socket.io';
  3. import * as http from 'http';
  4. import chalk from 'chalk';
  5. import { WS_EVENTS, isElectron } from './utils';
  6. export let io: Server;
  7. export let clients = new Map<string, Socket>();
  8. export function initWebSocket(server: http.Server) {
  9. io = new Server(server, {
  10. cors: {
  11. origin: '*',
  12. methods: ['GET', 'POST'],
  13. },
  14. });
  15. io.on('connection', (socket: Socket) => {
  16. // register client
  17. socket.on(WS_EVENTS.REGISTER, (clientId: string) => {
  18. clients.set(clientId, socket);
  19. if (!isElectron()) {
  20. console.info(chalk.green(`ws client connected ${clientId}`));
  21. }
  22. socket.on('disconnect', () => {
  23. if (!isElectron()) {
  24. console.info(chalk.green(`ws client disconnected ${clientId}`));
  25. }
  26. clients.delete(clientId);
  27. });
  28. socket.on('error', (error: Error) => {
  29. if (!isElectron()) {
  30. console.error(
  31. chalk.red(`ws client error ${clientId}: ${error.message}`)
  32. );
  33. }
  34. });
  35. });
  36. });
  37. // Handle server-level errors
  38. io.on('error', (error: Error) => {
  39. if (!isElectron()) {
  40. console.error(chalk.red(`ws server error: ${error.message}`));
  41. }
  42. });
  43. }