socket.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // socket.ts
  2. import { Server, Socket } from 'socket.io';
  3. import * as http from 'http';
  4. import chalk from 'chalk';
  5. import { 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. const clientId = socket.handshake.query['milvus-client-id'] as string;
  17. if (clientId) {
  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. }