const path = require('path'); const http = require('http'); const express = require('express'); const socketIO = require('socket.io'); const publicPath = path.join(__dirname, '../public'); const port = process.env.PORT || 8000; const { generateMsg, generateLocationMsg } = require('./utils/message'); const { isRealString } = require('./utils/validation'); const { Users } = require('./utils/users'); let app = express(); let server = http.createServer(app); let io = socketIO(server); let users = new Users(); app.use(express.static(publicPath)); io.on('connection', (socket) => { socket.on('join', ({params}, callback) => { console.log(params.name); if (!isRealString(params.name) || !isRealString(params.room)) { return callback('Name and room name are required'); } socket.join(params.room); users.removeUser(socket.id); users.addUser(socket.id, params.name, params.room); io.to(params.room).emit('updateUserList', users.getUserList(params.room)); socket.emit('newMsg', generateMsg('Admin', 'Welcome to the chat group')); socket.broadcast.to(params.room).emit('newMsg', generateMsg('Admin', `${params.name} joined`)); callback(); }); socket.on('createMsg', function(message, callback) { let user = users.getUser(socket.id); if (user && isRealString(message.text)) { io.to(user.room).emit('newMsg', generateMsg(user.name, message.text)); } }); socket.on('createLocationMessage', coords => { let user = users.getUser(socket.id); if (user) { io.to(user.room).emit('newLocationMsg', generateLocationMsg(`${user.name}'s`, { coords })); } }); socket.on('disconnect', () => { let user = users.removeUser(socket.id); if (user) { io.to(user.room).emit('updateUserList', users.getUserList(user.room)); io.to(user.room).emit('newMsg', generateMsg('Admin', `${user.name} has left`)) } }) }); server.listen(port, '0.0.0.0', () => { console.log(`server is up on ${port}`); });