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 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. const 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. static createServer(): PromiseIO {
  14. return new PromiseIO();
  15. }
  16. attach(httpServer: httpServer) {
  17. this.httpServer = httpServer
  18. this.io = socketio(httpServer)
  19. this.io!.on('connection', (sock: Socket) => {
  20. const pioSock = U.makePioSocket(sock)
  21. this.listeners['socket'].forEach(listener => listener(pioSock))
  22. this.listeners['connect'].forEach(listener => listener(pioSock))
  23. /*
  24. pioSock.on('error', ()=>console.log('error'));
  25. pioSock.on('connect_timeout', ()=>console.log('connect_timeout'))
  26. pioSock.on('disconnect', ()=>console.log('disconnect'))
  27. pioSock.on('reconnect', ()=>console.log('reconnect'))
  28. pioSock.on('reconnect_attempt', ()=>console.log('reconnect_attempt'))
  29. pioSock.on('reconnecting', ()=>console.log('reconnecting'));
  30. pioSock.on('reconnect_failed', ()=>console.log('reconnect_failed'));
  31. pioSock.on('reconnecting', ()=>console.log('reconnecting'));
  32. */
  33. })
  34. }
  35. listen(port: number) {
  36. this.httpServer!.listen(port)
  37. }
  38. on(eventName: string, listener: T.AnyFunction) {
  39. if (this.listeners[eventName] == null) {
  40. this.listeners[eventName] = []
  41. }
  42. this.listeners[eventName].push(listener)
  43. }
  44. close = () => {
  45. if(this.io){
  46. this.io.engine.ws.close()
  47. this.io.close()
  48. this.io = undefined
  49. }
  50. }
  51. }