const { MAPPER_LIST_UPDATED, NEW_MAPPER, LOST_MAPPER, TOPIC_DRAGGED, PEER_COORDS_UPDATED, JOIN_MAP, LEAVE_MAP, SEND_COORDS, SEND_MAPPER_INFO, DRAG_TOPIC, } = require('../frontend/src/Metamaps/Realtime/events') const { mapRoom, userMapRoom } = require('./rooms') module.exports = function(io, store) { io.on('connection', function(socket) { // this will ping everyone on a map that there's a person just joined the map socket.on(JOIN_MAP, function(data) { socket.mapid = data.mapid socket.userid = data.userid socket.username = data.username socket.avatar = data.avatar var newUser = { userid: data.userid, username: data.username, avatar: data.avatar } socket.join(mapRoom(data.mapid)) socket.join(userMapRoom(data.userid, data.mapid)) socket.broadcast.in(mapRoom(data.mapid)).emit(NEW_MAPPER, newUser) }) const leaveMap = () => { var data = { username: socket.username, userid: socket.userid } socket.leave(mapRoom(socket.mapid)) socket.leave(userMapRoom(socket.userid, socket.mapid)) socket.broadcast.in(mapRoom(socket.mapid)).emit(LOST_MAPPER, data) socket.mapid = null } socket.on(LEAVE_MAP, leaveMap) socket.on('disconnect', leaveMap) // this will ping a new person with awareness of who's already on the map socket.on(SEND_MAPPER_INFO, function(data) { var existingUser = { userid: data.userid, username: data.username, userinconversation: data.userinconversation, avatar: data.avatar } socket.broadcast.in(userMapRoom(data.userToNotify, data.mapid)).emit(MAPPER_LIST_UPDATED, existingUser) }) socket.on(SEND_COORDS, function(data) { var peer = { userid: data.userid, usercoords: data.usercoords } socket.broadcast.in(mapRoom(data.mapid)).emit(PEER_COORDS_UPDATED, peer) }) socket.on(DRAG_TOPIC, function(data) { var mapId = data.mapid delete data.mapid socket.broadcast.in(mapRoom(mapId)).emit(TOPIC_DRAGGED, data) }) }) }