123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import { Server, Socket } from "socket.io"
- import { Server as httpServer } from "http"
- import * as U from '../Utils'
- import * as T from '../Types'
- import socketio = require('socket.io')
- import middleware = require('socketio-wildcard');
-
-
- const defaultConfig : T.SomeOf<socketio.ServerOptions> = {}
-
- export class PromiseIO {
- io?: Server
- httpServer: httpServer
- private listeners: { [eventName in string]: ((...args: any) => void)[] } = {
- socket: [],
- connect: []
- }
-
- attach(httpServer: httpServer, options: T.SomeOf<socketio.ServerOptions> = defaultConfig) {
- if(options.path && !options.path.startsWith('/')){
- options.path = "/"+options.path
- }
- this.httpServer = httpServer
- this.io = new Server(httpServer, options)
- this.io!.use(middleware())
- this.io!.on('connection', (clientSocket: Socket) => {
-
- clientSocket['address'] = clientSocket.handshake.headers["x-real-ip"] || clientSocket.handshake.address
- const pioSock = U.makePioSocket(clientSocket)
- this.listeners['socket'].forEach(listener => listener(pioSock))
- this.listeners['connect'].forEach(listener => listener(pioSock))
-
- /*
- pioSock.on('error', ()=>console.log('error'));
-
- pioSock.on('connect_timeout', ()=>console.log('connect_timeout'))
- pioSock.on('disconnect', ()=>console.log('disconnect'))
- pioSock.on('reconnect', ()=>console.log('reconnect'))
- pioSock.on('reconnect_attempt', ()=>console.log('reconnect_attempt'))
- pioSock.on('reconnecting', ()=>console.log('reconnecting'));
- pioSock.on('reconnect_failed', ()=>console.log('reconnect_failed'));
- pioSock.on('reconnecting', ()=>console.log('reconnecting'));
- */
- })
- }
-
- listen(port: number) {
- this.httpServer!.listen(port)
- }
-
- on(eventName: string, listener: T.GenericFunction) {
- if (this.listeners[eventName] == null) {
- this.listeners[eventName] = []
- }
- this.listeners[eventName].push(listener)
- }
-
- close = () => {
- if(this.io){
- this.io.engine.ws.close()
- this.io.close()
- this.io = undefined
- }
- }
-
- }
|