socket.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // socket.ts
  2. import { Server, Socket } from 'socket.io';
  3. import * as http from 'http';
  4. import chalk from 'chalk';
  5. import { serverEvent } from './events';
  6. import { WS_EVENTS } from './utils';
  7. export let io: Server;
  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. console.info(
  17. chalk.green(`ws client connected ${socket.client.conn.remoteAddress}`)
  18. );
  19. socket.on(WS_EVENTS.COLLECTION, (message: any) => {
  20. socket.emit(WS_EVENTS.COLLECTION, { data: message });
  21. });
  22. // frontend emit -> serverEvent.emit -> server event handler
  23. socket.on(WS_EVENTS.TO_SERVER, (msg: any) => {
  24. serverEvent.emit(msg.event, msg);
  25. });
  26. // server emit -> socket emit -> frontend event handler
  27. serverEvent.on(WS_EVENTS.TO_CLIENT, (msg: any) => {
  28. socket.emit(msg.event, msg.data);
  29. });
  30. socket.on('disconnect', () => {
  31. console.info(
  32. chalk.green(
  33. `ws client disconnected ${socket.client.conn.remoteAddress}`
  34. )
  35. );
  36. });
  37. });
  38. }