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.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. private listeners: { [eventName in string]: ((...args: any) => void)[] } = {
  9. socket: [],
  10. connect: []
  11. }
  12. static createServer(): PromiseIO {
  13. return new PromiseIO();
  14. }
  15. attach(httpServer: httpServer) {
  16. this.io = socketio(httpServer)
  17. }
  18. listen(port: number) {
  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. this.io!.listen(port)
  35. }
  36. on(eventName: string, listener: T.AnyFunction) {
  37. if (this.listeners[eventName] == null) {
  38. this.listeners[eventName] = []
  39. }
  40. this.listeners[eventName].push(listener)
  41. }
  42. close = () => {
  43. if(this.io){
  44. this.io.engine.ws.close()
  45. this.io.close()
  46. this.io = undefined
  47. }
  48. }
  49. }