You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Server.ts 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { Server, Socket } from "socket.io"
  2. import { Server as httpServer } from "http"
  3. import * as U from '../Utils'
  4. import * as T from '../Types'
  5. import socketio = require('socket.io')
  6. export class PromiseIO {
  7. io?: Server
  8. httpServer: httpServer
  9. private listeners: { [eventName in string]: ((...args: any) => void)[] } = {
  10. socket: [],
  11. connect: []
  12. }
  13. attach(httpServer: httpServer) {
  14. this.httpServer = httpServer
  15. this.io = socketio(httpServer, { cookie:false })
  16. this.io!.on('connection', (clientSocket: Socket) => {
  17. clientSocket.use((packet, next) => {
  18. next()
  19. })
  20. clientSocket['address'] = clientSocket.handshake.headers["x-real-ip"] || clientSocket.handshake.address
  21. const pioSock = U.makePioSocket(clientSocket)
  22. this.listeners['socket'].forEach(listener => listener(pioSock))
  23. this.listeners['connect'].forEach(listener => listener(pioSock))
  24. /*
  25. pioSock.on('error', ()=>console.log('error'));
  26. pioSock.on('connect_timeout', ()=>console.log('connect_timeout'))
  27. pioSock.on('disconnect', ()=>console.log('disconnect'))
  28. pioSock.on('reconnect', ()=>console.log('reconnect'))
  29. pioSock.on('reconnect_attempt', ()=>console.log('reconnect_attempt'))
  30. pioSock.on('reconnecting', ()=>console.log('reconnecting'));
  31. pioSock.on('reconnect_failed', ()=>console.log('reconnect_failed'));
  32. pioSock.on('reconnecting', ()=>console.log('reconnecting'));
  33. */
  34. })
  35. }
  36. listen(port: number) {
  37. this.httpServer!.listen(port)
  38. }
  39. on(eventName: string, listener: T.AnyFunction) {
  40. if (this.listeners[eventName] == null) {
  41. this.listeners[eventName] = []
  42. }
  43. this.listeners[eventName].push(listener)
  44. }
  45. close = () => {
  46. if(this.io){
  47. this.io.engine.ws.close()
  48. this.io.close()
  49. this.io = undefined
  50. }
  51. }
  52. }