timhaley94/holdem

View on GitHub
server/src/api/socket/index.js

Summary

Maintainability
A
1 hr
Test Coverage
D
64%
const IO = require('socket.io');
const redisAdapter = require('socket.io-redis');
const config = require('../../config');
const Room = require('./room');
const Game = require('./game');
const User = require('./user');
const Middleware = require('./middleware');

const modules = [Room, Game, User];

async function Socket(server) {
  const io = IO(server, {
    origins: '*:*',
    serveClient: false,
    pingInterval: config.socket.pingInterval,
    pingTimeout: config.socket.pingTimeout,
    transports: ['websocket'],
  });

  if (!config.isTest()) {
    // Figure out a way to mock redis in tests
    io.adapter(redisAdapter(config.redis));
  }

  if (config.isProduction()) {
    io.use(Middleware.Logging);
  }

  io.use(Middleware.Auth);

  modules.forEach((module) => {
    if (module.onStart) {
      module.onStart(io);
    }
  });

  io.sockets.on('connection', (socket) => {
    modules.forEach((module) => {
      if (module.onConnect) {
        module.onConnect(socket);
      }
    });

    socket.on('disconnect', () => {
      modules.forEach((module) => {
        if (module.onDisconnect) {
          module.onDisconnect(socket);
        }
      });
    });
  });
}

module.exports = Socket;