diff --git a/frontend/src/Metamaps/Backbone/index.js b/frontend/src/Metamaps/Backbone/index.js index 389d7dcf..a3d5b77e 100644 --- a/frontend/src/Metamaps/Backbone/index.js +++ b/frontend/src/Metamaps/Backbone/index.js @@ -63,7 +63,7 @@ _Backbone.Map = Backbone.Model.extend({ this.on('saved', this.savedEvent) }, savedEvent: function () { - Realtime.sendMapChange(this) + Realtime.updateMap(this) }, authorizeToEdit: function (mapper) { if (mapper && ( @@ -370,7 +370,7 @@ _Backbone.init = function () { return node }, savedEvent: function () { - Realtime.sendTopicChange(this) + Realtime.updateTopic(this) }, updateViews: function () { var onPageWithTopicCard = Active.Map || Active.Topic @@ -549,7 +549,7 @@ _Backbone.init = function () { return edge }, savedEvent: function () { - Realtime.sendSynapseChange(this) + Realtime.updateSynapse(this) }, updateViews: function () { this.updateCardView() diff --git a/frontend/src/Metamaps/Realtime/events.js b/frontend/src/Metamaps/Realtime/events.js index 025504e6..20265154 100644 --- a/frontend/src/Metamaps/Realtime/events.js +++ b/frontend/src/Metamaps/Realtime/events.js @@ -3,17 +3,16 @@ export const REQUEST_LIVE_MAPS = 'REQUEST_LIVE_MAPS' export const JOIN_MAP = 'JOIN_MAP' export const LEAVE_MAP = 'LEAVE_MAP' export const CHECK_FOR_CALL = 'CHECK_FOR_CALL' -export const ACCEPT_CALL = 'ACCEPT_CALL' +export const ACCEPT_CALL = 'ACCEPT_CALL' export const DENY_CALL = 'DENY_CALL' export const DENY_INVITE = 'DENY_INVITE' export const INVITE_TO_JOIN = 'INVITE_TO_JOIN' export const INVITE_A_CALL = 'INVITE_A_CALL' export const JOIN_CALL = 'JOIN_CALL' export const LEAVE_CALL = 'LEAVE_CALL' -export const REQUEST_MAPPER_INFO = 'REQUEST_MAPPER_INFO' export const SEND_MAPPER_INFO = 'SEND_MAPPER_INFO' -export const SEND_COORDS = 'SEND_COORDS' -export const CREATE_MESSAGE = 'CREATE_MESSAGE' +export const SEND_COORDS = 'SEND_COORDS' +export const CREATE_MESSAGE = 'CREATE_MESSAGE' export const DRAG_TOPIC = 'DRAG_TOPIC' export const CREATE_TOPIC = 'CREATE_TOPIC' export const UPDATE_TOPIC = 'UPDATE_TOPIC' @@ -23,7 +22,7 @@ export const CREATE_SYNAPSE = 'CREATE_SYNAPSE' export const UPDATE_SYNAPSE = 'UPDATE_SYNAPSE' export const REMOVE_SYNAPSE = 'REMOVE_SYNAPSE' export const DELETE_SYNAPSE = 'DELETE_SYNAPSE' -export const UPDATE_MAP = 'UPDATE_MAP' +export const UPDATE_MAP = 'UPDATE_MAP' /* EVENTS RECEIVABLE */ export const INVITED_TO_CALL = 'INVITED_TO_CALL' @@ -53,4 +52,3 @@ export const MAP_UPDATED = 'MAP_UPDATED' export const LIVE_MAPS_RECEIVED = 'LIVE_MAPS_RECEIVED' export const MAP_WENT_LIVE = 'MAP_WENT_LIVE' export const MAP_CEASED_LIVE = 'MAP_CEASED_LIVE' - diff --git a/frontend/src/Metamaps/Realtime/index.js b/frontend/src/Metamaps/Realtime/index.js index 5916cd28..2ef61927 100644 --- a/frontend/src/Metamaps/Realtime/index.js +++ b/frontend/src/Metamaps/Realtime/index.js @@ -12,6 +12,7 @@ * - Metamaps.Synapses * - Metamaps.Topics */ + import _ from 'lodash' import SimpleWebRTC from 'simplewebrtc' @@ -82,7 +83,7 @@ import { liveMapsReceived, mapWentLive, mapCeasedLive -} from './receivable' +} from './receivable' import { requestLiveMaps, @@ -96,7 +97,6 @@ import { inviteACall, joinCall, leaveCall, - requestMapperInfo, sendMapperInfo, sendCoords, dragTopic, @@ -111,10 +111,6 @@ import { updateMap } from './sendable' -var socketReference = null - -export const getSocket = () => socketReference - const Realtime = { videoId: 'video-wrapper', socket: null, @@ -133,10 +129,13 @@ const Realtime = { self.addJuntoListeners() self.socket = new SocketIoConnection({ url: Metamaps.Erb['REALTIME_SERVER']}) - socketReference = self.socket + + setupSendables(self) + self.socket.on('connect', function () { console.log('connected') - subscribeToEvents(self.socket) + subscribeToEvents(self, self.socket) + if (!self.disconnected) { self.startActiveMap() } else self.disconnected = false @@ -233,7 +232,7 @@ const Realtime = { if (Active.Map.authorizeToEdit(Active.Mapper)) { self.turnOn() self.setupSocket() - self.setupSendables() + self.setupLocalSendables() } self.room.addMessages(new Metamaps.Backbone.MessageCollection(Metamaps.Messages), true) } @@ -271,11 +270,11 @@ const Realtime = { }, setupSocket: function () { var self = Realtime - // subscribe to rooms on the websocket? + // subscribe to rooms on the websocket? self.checkForCall() - self.newMapperNotify() + self.joinMap() }, - setupSendables: function () { + setupLocalSendables: function () { var self = Realtime // local event listeners that trigger events @@ -496,8 +495,11 @@ const Realtime = { yLimit = Math.min(yLimit, yMax - compassDiameter) return {x: xLimit,y: yLimit} - }, - requestLiveMaps, + } +} + +const setupSendables = Realtime => { + [requestLiveMaps, joinMap, leaveMap, checkForCall, @@ -508,7 +510,6 @@ const Realtime = { inviteACall, joinCall, leaveCall, - requestMapperInfo, sendMapperInfo, sendCoords, dragTopic, @@ -520,67 +521,37 @@ const Realtime = { updateSynapse, removeSynapse, deleteSynapse, - updateMap + updateMap].forEach(sendable => Realtime[sendable.name] = sendable(Realtime, Realtime.socket)) } -const subscribeToEvents = socket => { - socket.on(INVITED_TO_CALL, invitedToCall) - socket.on(INVITED_TO_JOIN, invitedToJoin) - socket.on(CALL_ACCEPTED, callAccepted) - socket.on(CALL_DENIED, callDenied) - socket.on(INVITE_DENIED, inviteDenied) - socket.on(CALL_IN_PROGRESS, callInProgress) - socket.on(CALL_STARTED, callStarted) - socket.on(MAPPER_JOINED_CALL, mapperJoinedCall) - socket.on(MAPPER_LEFT_CALL, mapperLeftCall) - socket.on(MAPPER_LIST_UPDATED, mapperListUpdated) - socket.on(PEER_COORDS_UPDATED, peerCoordsUpdated) - socket.on(NEW_MAPPER, newMapper) - socket.on(LOST_MAPPER, lostMapper) - socket.on(MESSAGE_CREATED, messageCreated) - socket.on(TOPIC_DRAGGED, topicDragged) - socket.on(TOPIC_CREATED, topicCreated) - socket.on(TOPIC_UPDATED, topicUpdated) - socket.on(TOPIC_REMOVED, topicRemoved) - socket.on(TOPIC_DELETED, topicDeleted) - socket.on(SYNAPSE_CREATED, synapseCreated) - socket.on(SYNAPSE_UPDATED, synapseUpdated) - socket.on(SYNAPSE_REMOVED, synapseRemoved) - socket.on(SYNAPSE_DELETED, synapseDeleted) - socket.on(MAP_UPDATED, mapUpdated) - socket.on(LIVE_MAPS_RECEIVED, liveMapsReceived) - socket.on(MAP_WENT_LIVE, mapWentLive) - socket.on(MAP_CEASED_LIVE, mapCeasedLive) -} - -const unsub = socket => { - socket.off(INVITED_TO_CALL) - socket.off(INVITED_TO_JOIN) - socket.off(CALL_ACCEPTED) - socket.off(CALL_DENIED) - socket.off(INVITE_DENIED) - socket.off(CALL_IN_PROGRESS) - socket.off(CALL_STARTED) - socket.off(MAPPER_JOINED_CALL) - socket.off(MAPPER_LEFT_CALL) - socket.off(MAPPER_LIST_UPDATED) - socket.off(PEER_COORDS_UPDATED) - socket.off(NEW_MAPPER) - socket.off(LOST_MAPPER) - socket.off(MESSAGE_CREATED) - socket.off(TOPIC_DRAGGED) - socket.off(TOPIC_CREATED) - socket.off(TOPIC_UPDATED) - socket.off(TOPIC_REMOVED) - socket.off(TOPIC_DELETED) - socket.off(SYNAPSE_CREATED) - socket.off(SYNAPSE_UPDATED) - socket.off(SYNAPSE_REMOVED) - socket.off(SYNAPSE_DELETED) - socket.off(MAP_UPDATED) - socket.off(LIVE_MAPS_RECEIVED) - socket.off(MAP_WENT_LIVE) - socket.off(MAP_CEASED_LIVE) +const subscribeToEvents = (Realtime, socket) => { + socket.on(INVITED_TO_CALL, invitedToCall(Realtime)) + socket.on(INVITED_TO_JOIN, invitedToJoin(Realtime)) + socket.on(CALL_ACCEPTED, callAccepted(Realtime)) + socket.on(CALL_DENIED, callDenied(Realtime)) + socket.on(INVITE_DENIED, inviteDenied(Realtime)) + socket.on(CALL_IN_PROGRESS, callInProgress(Realtime)) + socket.on(CALL_STARTED, callStarted(Realtime)) + socket.on(MAPPER_JOINED_CALL, mapperJoinedCall(Realtime)) + socket.on(MAPPER_LEFT_CALL, mapperLeftCall(Realtime)) + socket.on(MAPPER_LIST_UPDATED, mapperListUpdated(Realtime)) + socket.on(PEER_COORDS_UPDATED, peerCoordsUpdated(Realtime)) + socket.on(NEW_MAPPER, newMapper(Realtime)) + socket.on(LOST_MAPPER, lostMapper(Realtime)) + socket.on(MESSAGE_CREATED, messageCreated(Realtime)) + socket.on(TOPIC_DRAGGED, topicDragged(Realtime)) + socket.on(TOPIC_CREATED, topicCreated(Realtime)) + socket.on(TOPIC_UPDATED, topicUpdated(Realtime)) + socket.on(TOPIC_REMOVED, topicRemoved(Realtime)) + socket.on(TOPIC_DELETED, topicDeleted(Realtime)) + socket.on(SYNAPSE_CREATED, synapseCreated(Realtime)) + socket.on(SYNAPSE_UPDATED, synapseUpdated(Realtime)) + socket.on(SYNAPSE_REMOVED, synapseRemoved(Realtime)) + socket.on(SYNAPSE_DELETED, synapseDeleted(Realtime)) + socket.on(MAP_UPDATED, mapUpdated(Realtime)) + socket.on(LIVE_MAPS_RECEIVED, liveMapsReceived(Realtime)) + socket.on(MAP_WENT_LIVE, mapWentLive(Realtime)) + socket.on(MAP_CEASED_LIVE, mapCeasedLive(Realtime)) } export default Realtime diff --git a/frontend/src/Metamaps/Realtime/receivable.js b/frontend/src/Metamaps/Realtime/receivable.js index 6a843d06..bf974bbe 100644 --- a/frontend/src/Metamaps/Realtime/receivable.js +++ b/frontend/src/Metamaps/Realtime/receivable.js @@ -7,10 +7,12 @@ import GlobalUI from '../GlobalUI' import Control from '../Control' import Map from '../Map' import Mapper from '../Mapper' -import Realtime from './index' -var self = Realtime +import Topic from '../Topic' +import Synapse from '../Synapse' +import Util from '../Util' +import Visualize from '../Visualize' -export const synapseRemoved = data => { +export const synapseRemoved = self => data => { var synapse = Metamaps.Synapses.get(data.mappableid) if (synapse) { var edge = synapse.get('edge') @@ -30,11 +32,11 @@ export const synapseRemoved = data => { } } -export const synapseDeleted = data => { +export const synapseDeleted = self => data => { self.synapseRemoved(data) } -export const synapseCreated = function (data) { +export const synapseCreated = self => data => { var topic1, topic2, node1, node2, synapse, mapping, cancel, mapper @@ -82,7 +84,7 @@ export const synapseCreated = function (data) { waitThenRenderSynapse() } -export const topicRemoved = function (data) { +export const topicRemoved = self => data => { var topic = Metamaps.Topics.get(data.mappableid) if (topic) { var node = topic.get('node') @@ -93,11 +95,11 @@ export const topicRemoved = function (data) { } } -export const topicDeleted = function (data) { +export const topicDeleted = self => data => { self.topicRemoved(data) } -export const topicCreated = function (data) { +export const topicCreated = self => data => { var topic, mapping, mapper, cancel function waitThenRenderTopic () { @@ -140,11 +142,11 @@ export const topicCreated = function (data) { waitThenRenderTopic() } -export const messageCreated = function (data) { +export const messageCreated = self => data => { self.room.addMessages(new Metamaps.Backbone.MessageCollection(data)) } -export const mapUpdated = function (data) { +export const mapUpdated = self => data => { var map = Active.Map var isActiveMap = map && data.mapId === map.id if (isActiveMap) { @@ -170,7 +172,7 @@ export const mapUpdated = function (data) { } } -export const topicUpdated = function (data) { +export const topicUpdated = self => data => { var topic = Metamaps.Topics.get(data.topicId) if (topic) { var node = topic.get('node') @@ -183,7 +185,7 @@ export const topicUpdated = function (data) { } } -export const synapseUpdated = function (data) { +export const synapseUpdated = self => data => { var synapse = Metamaps.Synapses.get(data.synapseId) if (synapse) { // edge reset necessary because fetch causes model reset @@ -197,7 +199,7 @@ export const synapseUpdated = function (data) { } } -export const topicDragged = function (positions) { +export const topicDragged = self => positions => { var topic var node @@ -211,13 +213,13 @@ export const topicDragged = function (positions) { } } -export const peerCoordsUpdated = function (data) { +export const peerCoordsUpdated = self => data => { if (!self.mappersOnMap[data.userid]) return self.mappersOnMap[data.userid].coords = {x: data.usercoords.x,y: data.usercoords.y} self.positionPeerIcon(data.userid) } -export const lostMapper = function (data) { +export const lostMapper = self => data => { // data.userid // data.username delete self.mappersOnMap[data.userid] @@ -234,7 +236,7 @@ export const lostMapper = function (data) { } } -export const mapperListUpdated = function (data) { +export const mapperListUpdated = self => data => { // data.userid // data.username // data.userimage @@ -261,7 +263,7 @@ export const mapperListUpdated = function (data) { } } -export const newMapper = function (data) { +export const newMapper = self => data => { // data.userid // data.username // data.userimage @@ -298,26 +300,26 @@ export const newMapper = function (data) { } } -export const callAccepted = function (userid) { +export const callAccepted = self => userid => { var username = self.mappersOnMap[userid].name GlobalUI.notifyUser('Conversation starting...') self.joinCall() self.room.chat.invitationAnswered(userid) } -export const callDenied = function (userid) { +export const callDenied = self => userid => { var username = self.mappersOnMap[userid].name GlobalUI.notifyUser(username + " didn't accept your invitation") self.room.chat.invitationAnswered(userid) } -export const inviteDenied = function (userid) { +export const inviteDenied = self => userid => { var username = self.mappersOnMap[userid].name GlobalUI.notifyUser(username + " didn't accept your invitation") self.room.chat.invitationAnswered(userid) } -export const invitedToCall = function (inviter) { +export const invitedToCall = self => inviter => { self.room.chat.sound.stop(self.soundId) self.soundId = self.room.chat.sound.play('sessioninvite') @@ -329,7 +331,7 @@ export const invitedToCall = function (inviter) { GlobalUI.notifyUser(notifyText, true) } -export const invitedToJoin = function (inviter) { +export const invitedToJoin = self => inviter => { self.room.chat.sound.stop(self.soundId) self.soundId = self.room.chat.sound.play('sessioninvite') @@ -340,7 +342,7 @@ export const invitedToJoin = function (inviter) { GlobalUI.notifyUser(notifyText, true) } -export const mapperJoinedCall = function (id) { +export const mapperJoinedCall = self => id => { var mapper = self.mappersOnMap[id] if (mapper) { @@ -355,7 +357,7 @@ export const mapperJoinedCall = function (id) { } } -export const mapperLeftCall = function (id) { +export const mapperLeftCall = self => id => { var mapper = self.mappersOnMap[id] if (mapper) { if (self.inConversation) { @@ -372,7 +374,7 @@ export const mapperLeftCall = function (id) { } } -export const callInProgress = function () { +export const callInProgress = self => () => { var notifyText = "There's a conversation happening, want to join?" notifyText += ' ' notifyText += ' ' @@ -380,7 +382,7 @@ export const callInProgress = function () { self.room.conversationInProgress() } -export const callStarted = function () { +export const callStarted = self => () => { if (self.inConversation) return var notifyText = "There's a conversation starting, want to join?" notifyText += ' ' @@ -389,3 +391,6 @@ export const callStarted = function () { self.room.conversationInProgress() } +export const liveMapsReceived = self => () => {} +export const mapWentLive = self => () => {} +export const mapCeasedLive = self => () => {} diff --git a/frontend/src/Metamaps/Realtime/sendable.js b/frontend/src/Metamaps/Realtime/sendable.js index aab74989..a3321b03 100644 --- a/frontend/src/Metamaps/Realtime/sendable.js +++ b/frontend/src/Metamaps/Realtime/sendable.js @@ -6,17 +6,16 @@ import { JOIN_MAP, LEAVE_MAP, CHECK_FOR_CALL, - ACCEPT_CALL, + ACCEPT_CALL, DENY_CALL, DENY_INVITE, INVITE_TO_JOIN, INVITE_A_CALL, JOIN_CALL, LEAVE_CALL, - REQUEST_MAPPER_INFO, SEND_MAPPER_INFO, - SEND_COORDS, - CREATE_MESSAGE, + SEND_COORDS, + CREATE_MESSAGE, DRAG_TOPIC, CREATE_TOPIC, UPDATE_TOPIC, @@ -26,19 +25,15 @@ import { UPDATE_SYNAPSE, REMOVE_SYNAPSE, DELETE_SYNAPSE, - UPDATE_MAP + UPDATE_MAP } from './events' -export const requestLiveMaps = function (self, socket) { +export const requestLiveMaps = (self, socket) => () => { socket.emit(REQUEST_LIVE_MAPS) } -export const checkForCall = function (self, socket) { - socket.emit(CHECK_FOR_CALL, { room: self.room.room, mapid: Active.Map.id }) -} - -export const newMapperNotify = function (self, socket) { - socket.emit(NEW_MAPPER_NOTIFY, { +export const joinMap = (self, socket) => () => { + socket.emit(JOIN_MAP, { userid: Active.Mapper.id, username: Active.Mapper.get('name'), userimage: Active.Mapper.get('image'), @@ -47,7 +42,15 @@ export const newMapperNotify = function (self, socket) { }) } -export const sendMapperInfo = (userid, self, socket) => { +export const leaveMap = (self, socket) => () => { + socket.emit(LEAVE_MAP) +} + +export const checkForCall = (self, socket) => () => { + socket.emit(CHECK_FOR_CALL, { room: self.room.room, mapid: Active.Map.id }) +} + +export const sendMapperInfo = (self, socket) => userid => { // send this new mapper back your details, and the awareness that you've loaded the map var update = { userToNotify: userid, @@ -60,7 +63,7 @@ export const sendMapperInfo = (userid, self, socket) => { socket.emit(SEND_MAPPER_INFO, update) } -export const joinCall = function (self, socket) { +export const joinCall = (self, socket) => () => { self.webrtc.off('readyToCall') self.webrtc.once('readyToCall', function () { self.videoInitialized = true @@ -83,7 +86,7 @@ export const joinCall = function (self, socket) { self.room.chat.mapperJoinedCall(Active.Mapper.id) } -export const leaveCall = function (self, socket) { +export const leaveCall = (self, socket) => () => { socket.emit(LEAVE_CALL, { mapid: Active.Map.id, id: Active.Mapper.id @@ -102,7 +105,6 @@ export const leaveCall = function (self, socket) { } export const acceptCall = (self, socket) => userid => { - var self = Realtime self.room.chat.sound.stop(self.soundId) socket.emit(ACCEPT_CALL, { mapid: Active.Map.id, @@ -114,7 +116,7 @@ export const acceptCall = (self, socket) => userid => { GlobalUI.clearNotify() } -export const denyCall = (userid) => { +export const denyCall = (self, socket) => userid => { self.room.chat.sound.stop(self.soundId) socket.emit(DENY_CALL, { mapid: Active.Map.id, @@ -124,7 +126,7 @@ export const denyCall = (userid) => { GlobalUI.clearNotify() } -export const denyInvite = (userid) => { +export const denyInvite = (self, socket) => userid => { self.room.chat.sound.stop(self.soundId) socket.emit(DENY_INVITE, { mapid: Active.Map.id, @@ -134,7 +136,7 @@ export const denyInvite = (userid) => { GlobalUI.clearNotify() } -export const inviteACall = function (userid) { +export const inviteACall = (self, socket) => userid => { socket.emit(INVITE_A_CALL, { mapid: Active.Map.id, inviter: Active.Mapper.id, @@ -144,7 +146,7 @@ export const inviteACall = function (userid) { GlobalUI.clearNotify() } -export const inviteToJoin = function (userid) { +export const inviteToJoin = (self, socket) => userid => { socket.emit(INVITE_TO_JOIN, { mapid: Active.Map.id, inviter: Active.Mapper.id, @@ -153,7 +155,7 @@ export const inviteToJoin = function (userid) { self.room.chat.invitationPending(userid) } -export const sendCoords = function (coords) { +export const sendCoords = (self, socket) => coords => { var map = Active.Map var mapper = Active.Mapper if (map.authorizeToEdit(mapper)) { @@ -166,41 +168,41 @@ export const sendCoords = function (coords) { } } -export const dragTopic = function (positions) { +export const dragTopic = (self, socket) => positions => { if (Active.Map) { positions.mapid = Active.Map.id socket.emit(DRAG_TOPIC, positions) } } -export const updateTopic = function (topic) { +export const updateTopic = (self, socket) => topic => { var data = { topicId: topic.id } socket.emit(UPDATE_TOPIC, data) } -export const updateSynapse = function (synapse) { +export const updateSynapse = (self, socket) => synapse => { var data = { synapseId: synapse.id } socket.emit(UPDATE_SYNAPSE, data) } -export const updateMap = function (map) { +export const updateMap = (self, socket) => map => { var data = { mapId: map.id } socket.emit(UPDATE_MAP, data) } -export const createMessage = function (data) { +export const createMessage = (self, socket) => data => { var message = data.attributes message.mapid = Active.Map.id socket.emit(CREATE_MESSAGE, message) } -export const createTopic = function (data) { +export const createTopic = (self, socket) => data => { if (Active.Map) { data.mapperid = Active.Mapper.id data.mapid = Active.Map.id @@ -208,20 +210,20 @@ export const createTopic = function (data) { } } -export const deleteTopic = function (data) { +export const deleteTopic = (self, socket) => data => { if (Active.Map) { socket.emit(DELETE_TOPIC, data) } } -export const removeTopic = function (data) { +export const removeTopic = (self, socket) => data => { if (Active.Map) { data.mapid = Active.Map.id socket.emit(REMOVE_TOPIC, data) } } -export const createSynapse = function (data) { +export const createSynapse = (self, socket) => data => { if (Active.Map) { data.mapperid = Active.Mapper.id data.mapid = Active.Map.id @@ -229,14 +231,14 @@ export const createSynapse = function (data) { } } -export const deleteSynapse = function (data) { +export const deleteSynapse = (self, socket) => data => { if (Active.Map) { data.mapid = Active.Map.id socket.emit(DELETE_SYNAPSE, data) } } -export const removeSynapse = function (data) { +export const removeSynapse = (self, socket) => data => { if (Active.Map) { data.mapid = Active.Map.id socket.emit(REMOVE_SYNAPSE, data) diff --git a/realtime/realtime-server.js b/realtime/realtime-server.js index c8cc15a2..89b38c31 100644 --- a/realtime/realtime-server.js +++ b/realtime/realtime-server.js @@ -1,7 +1,7 @@ var - io = require('socket.io').listen(5001), - signalServer = require('./signal'), - stunservers = [{"url": "stun:stun.l.google.com:19302"}] +io = require('socket.io').listen(5001), +signalServer = require('./signal'), +stunservers = [{"url": "stun:stun.l.google.com:19302"}] import { // server sendable, client receivable @@ -38,17 +38,17 @@ import { JOIN_MAP, LEAVE_MAP, CHECK_FOR_CALL, - ACCEPT_CALL, + ACCEPT_CALL, DENY_CALL, DENY_INVITE, INVITE_TO_JOIN, INVITE_A_CALL, JOIN_CALL, LEAVE_CALL, - REQUEST_MAPPER_INFO, + REQUEST_MAPPER_INFO, SEND_MAPPER_INFO, - SEND_COORDS, - CREATE_MESSAGE, + SEND_COORDS, + CREATE_MESSAGE, DRAG_TOPIC, CREATE_TOPIC, UPDATE_TOPIC, @@ -58,208 +58,208 @@ import { UPDATE_SYNAPSE, REMOVE_SYNAPSE, DELETE_SYNAPSE, - UPDATE_MAP + UPDATE_MAP } from '../frontend/src/Metamaps/Realtime/events' io.set('log', false) function start() { - var livemaps = {} + var livemaps = {} - signalServer(io, stunservers) + signalServer(io, stunservers) - io.on('connection', function (socket) { - - socket.on(REQUEST_LIVE_MAPS, function (activeUser) { - //constrain response to maps visible to user - var maps = Object.keys(livemaps).map(function(key) { return livemaps[key] }) - socket.emit(LIVE_MAPS_RECEIVED, maps) - }) + io.on('connection', function (socket) { - // 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, - userrealtime: data.userrealtime, - userinconversation: data.userinconversation, - userimage: data.userimage - } - //socket.broadcast.emit(data.userToNotify + '-' + data.mapid + '-UpdateMapperList', existingUser) - socket.broadcast.emit(MAPPER_LIST_UPDATED, existingUser) - }) + socket.on(REQUEST_LIVE_MAPS, function (activeUser) { + //constrain response to maps visible to user + var maps = Object.keys(livemaps).map(function(key) { return livemaps[key] }) + socket.emit(LIVE_MAPS_RECEIVED, maps) + }) - // as a new mapper check whether there's a call in progress to join - socket.on(CHECK_FOR_CALL, function (data) { - var socketsInRoom = io.sockets.clients(data.room) - //if (socketsInRoom.length) socket.emit('maps-' + data.mapid + '-callInProgress') - if (socketsInRoom.length) socket.emit(CALL_IN_PROGRESS) - }) - - // send the invitation to start a call - socket.on(INVITE_A_CALL, function (data) { - //socket.broadcast.emit(data.invited + '-' + data.mapid + '-invitedToCall', data.inviter) - socket.broadcast.emit(INVITED_TO_CALL, data.inviter) - }) - - // send an invitation to join a call in progress - socket.on(INVITE_TO_JOIN, function (data) { - //socket.broadcast.emit(data.invited + '-' + data.mapid + '-invitedToJoin', data.inviter) - socket.broadcast.emit(INVITED_TO_JOIN, data.inviter) - }) - - // send response back to the inviter - socket.on(ACCEPT_CALL, function (data) { - //socket.broadcast.emit(data.inviter + '-' + data.mapid + '-callAccepted', data.invited) - //socket.broadcast.emit('maps-' + data.mapid + '-callStarting') - socket.broadcast.emit(CALL_ACCEPTED, data.invited) - socket.broadcast.emit(CALL_STARTED) - }) - - socket.on(DENY_CALL, function (data) { - //socket.broadcast.emit(data.inviter + '-' + data.mapid + '-callDenied', data.invited) - socket.broadcast.emit(CALL_DENIED, data.invited) - }) - socket.on(DENY_INVITE, function (data) { - //socket.broadcast.emit(data.inviter + '-' + data.mapid + '-inviteDenied', data.invited) - socket.broadcast.emit(INVITE_DENIED, data.invited) - }) - socket.on(JOIN_CALL, function (data) { - //socket.broadcast.emit('maps-' + data.mapid + '-mapperJoinedCall', data.id) - socket.broadcast.emit(MAPPER_JOINED_CALL, data.id) - }) - socket.on(LEAVE_CALL, function (data) { - //socket.broadcast.emit('maps-' + data.mapid + '-mapperLeftCall', data.id) - socket.broadcast.emit(MAPPER_LEFT_CALL, data.id) - }) - - // this will ping everyone on a map that there's a person just joined the map - socket.on(NEW_MAPPER, function (data) { - - if (!livemaps[data.mapid]) { - livemaps[data.mapid] = data.map // { name: '', desc: '', numTopics: '' } - livemaps[data.mapid].mapper_count = 1 - io.sockets.emit(MAP_WENT_LIVE, livemaps[data.mapid]) - } - else { - livemaps[data.mapid].mapper_count++ - } - - socket.set('mapid', data.mapid) - socket.set('userid', data.userid) - socket.set('username', data.username) - - var newUser = { - userid: data.userid, - username: data.username, - userimage: data.userimage - } - - //socket.broadcast.emit('maps-' + data.mapid + '-newmapper', newUser) - socket.broadcast.emit(NEW_MAPPER, newUser) - }) - - var end = function () { - - var socketUserName, socketUserID - socket.get('userid', function (err, id) { - socketUserID = id - }) - socket.get('username', function (err, name) { - socketUserName = name - }) - var data = { - username: socketUserName, - userid: socketUserID - } - socket.get('mapid', function (err, mapid) { - if (livemaps[mapid] && livemaps[mapid].mapper_count == 1) { - delete livemaps[mapid] - io.sockets.emit(MAP_CEASED_LIVE, { id: mapid }) - } - else if (livemaps[mapid]) { - livemaps[mapid].mapper_count-- - } - // scope by map - socket.broadcast.emit(LOST_MAPPER, data) - }) + // 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, + userrealtime: data.userrealtime, + userinconversation: data.userinconversation, + userimage: data.userimage } - // this will ping everyone on a map that there's a person just left the map - socket.on('disconnect', end) - socket.on('endMapperNotify', end) + //socket.broadcast.emit(data.userToNotify + '-' + data.mapid + '-UpdateMapperList', existingUser) + socket.broadcast.emit(MAPPER_LIST_UPDATED, existingUser) + }) - socket.on(SEND_COORDS, function (data) { - var peer = { - userid: data.userid, - usercoords: data.usercoords - } + // as a new mapper check whether there's a call in progress to join + socket.on(CHECK_FOR_CALL, function (data) { + var socketsInRoom = io.sockets.clients(data.room) + //if (socketsInRoom.length) socket.emit('maps-' + data.mapid + '-callInProgress') + if (socketsInRoom.length) socket.emit(CALL_IN_PROGRESS) + }) - //socket.broadcast.emit('maps-' + data.mapid + '-updatePeerCoords', peer) - socket.broadcast.emit(PEER_COORDS_UPDATED, peer) + // send the invitation to start a call + socket.on(INVITE_A_CALL, function (data) { + //socket.broadcast.emit(data.invited + '-' + data.mapid + '-invitedToCall', data.inviter) + socket.broadcast.emit(INVITED_TO_CALL, data.inviter) + }) + + // send an invitation to join a call in progress + socket.on(INVITE_TO_JOIN, function (data) { + //socket.broadcast.emit(data.invited + '-' + data.mapid + '-invitedToJoin', data.inviter) + socket.broadcast.emit(INVITED_TO_JOIN, data.inviter) + }) + + // send response back to the inviter + socket.on(ACCEPT_CALL, function (data) { + //socket.broadcast.emit(data.inviter + '-' + data.mapid + '-callAccepted', data.invited) + //socket.broadcast.emit('maps-' + data.mapid + '-callStarting') + socket.broadcast.emit(CALL_ACCEPTED, data.invited) + socket.broadcast.emit(CALL_STARTED) + }) + + socket.on(DENY_CALL, function (data) { + //socket.broadcast.emit(data.inviter + '-' + data.mapid + '-callDenied', data.invited) + socket.broadcast.emit(CALL_DENIED, data.invited) + }) + socket.on(DENY_INVITE, function (data) { + //socket.broadcast.emit(data.inviter + '-' + data.mapid + '-inviteDenied', data.invited) + socket.broadcast.emit(INVITE_DENIED, data.invited) + }) + socket.on(JOIN_CALL, function (data) { + //socket.broadcast.emit('maps-' + data.mapid + '-mapperJoinedCall', data.id) + socket.broadcast.emit(MAPPER_JOINED_CALL, data.id) + }) + socket.on(LEAVE_CALL, function (data) { + //socket.broadcast.emit('maps-' + data.mapid + '-mapperLeftCall', data.id) + socket.broadcast.emit(MAPPER_LEFT_CALL, data.id) + }) + + // this will ping everyone on a map that there's a person just joined the map + socket.on(JOIN_MAP, function (data) { + + if (!livemaps[data.mapid]) { + livemaps[data.mapid] = data.map // { name: '', desc: '', numTopics: '' } + livemaps[data.mapid].mapper_count = 1 + io.sockets.emit(MAP_WENT_LIVE, livemaps[data.mapid]) + } + else { + livemaps[data.mapid].mapper_count++ + } + + socket.set('mapid', data.mapid) + socket.set('userid', data.userid) + socket.set('username', data.username) + + var newUser = { + userid: data.userid, + username: data.username, + userimage: data.userimage + } + + //socket.broadcast.emit('maps-' + data.mapid + '-newmapper', newUser) + socket.broadcast.emit(NEW_MAPPER, newUser) + }) + + var end = function () { + + var socketUserName, socketUserID + socket.get('userid', function (err, id) { + socketUserID = id }) - - socket.on(DRAG_TOPIC, function (data) { - var mapId = data.mapid - delete data.mapid - - //socket.broadcast.emit('maps-' + mapId + '-topicDrag', data) - socket.broadcast.emit(TOPIC_DRAGGED, data) + socket.get('username', function (err, name) { + socketUserName = name }) - - socket.on(CREATE_MESSAGE, function (data) { - var mapId = data.mapid - delete data.mapid - //socket.broadcast.emit('maps-' + mapId + '-newMessage', data) - socket.broadcast.emit(MESSAGE_CREATED, data) + var data = { + username: socketUserName, + userid: socketUserID + } + socket.get('mapid', function (err, mapid) { + if (livemaps[mapid] && livemaps[mapid].mapper_count == 1) { + delete livemaps[mapid] + io.sockets.emit(MAP_CEASED_LIVE, { id: mapid }) + } + else if (livemaps[mapid]) { + livemaps[mapid].mapper_count-- + } + // scope by map + socket.broadcast.emit(LOST_MAPPER, data) }) + } + // this will ping everyone on a map that there's a person just left the map + socket.on('disconnect', end) + socket.on(LEAVE_MAP, end) - socket.on(CREATE_TOPIC, function (data) { - var mapId = data.mapid - delete data.mapid - //socket.broadcast.emit('maps-' + mapId + '-newTopic', data) - socket.broadbast.emit(TOPIC_CREATED, data) - }) + socket.on(SEND_COORDS, function (data) { + var peer = { + userid: data.userid, + usercoords: data.usercoords + } - socket.on(UPDATE_TOPIC, function (data) { - socket.broadcast.emit(TOPIC_UPDATED, data) - }) + //socket.broadcast.emit('maps-' + data.mapid + '-updatePeerCoords', peer) + socket.broadcast.emit(PEER_COORDS_UPDATED, peer) + }) - socket.on(REMOVE_TOPIC, function (data) { - var mapId = data.mapid - delete data.mapid - //socket.broadcast.emit('maps-' + mapId + '-removeTopic', data) - socket.broadcast.emit(TOPIC_REMOVED, data) - }) + socket.on(DRAG_TOPIC, function (data) { + var mapId = data.mapid + delete data.mapid - socket.on(DELETE_TOPIC, function (data) { - socket.broadcast.emit(TOPIC_DELETED, data) - }) + //socket.broadcast.emit('maps-' + mapId + '-topicDrag', data) + socket.broadcast.emit(TOPIC_DRAGGED, data) + }) - socket.on(CREATE_SYNAPSE, function (data) { - var mapId = data.mapid - delete data.mapid - //socket.broadcast.emit('maps-' + mapId + '-newSynapse', data) - socket.broadcast.emit(SYNAPSE_CREATED, data) - }) + socket.on(CREATE_MESSAGE, function (data) { + var mapId = data.mapid + delete data.mapid + //socket.broadcast.emit('maps-' + mapId + '-newMessage', data) + socket.broadcast.emit(MESSAGE_CREATED, data) + }) - socket.on(UPDATE_SYNAPSE, function (data) { - socket.broadcast.emit(SYNAPSE_UPDATED, data) - }) + socket.on(CREATE_TOPIC, function (data) { + var mapId = data.mapid + delete data.mapid + //socket.broadcast.emit('maps-' + mapId + '-newTopic', data) + socket.broadcast.emit(TOPIC_CREATED, data) + }) - socket.on(REMOVE_SYNAPSE, function (data) { - var mapId = data.mapid - delete data.mapid - //socket.broadcast.emit('maps-' + mapId + '-removeSynapse', data) - socket.broadcast.emit(SYNAPSE_REMOVED, data) - }) + socket.on(UPDATE_TOPIC, function (data) { + socket.broadcast.emit(TOPIC_UPDATED, data) + }) - socket.on(DELETE_SYNAPSE, function (data) { - //socket.broadcast.emit('deleteSynapseFromServer', data) - socket.broadcast.emit(SYNAPSE_DELETED, data) - }) + socket.on(REMOVE_TOPIC, function (data) { + var mapId = data.mapid + delete data.mapid + //socket.broadcast.emit('maps-' + mapId + '-removeTopic', data) + socket.broadcast.emit(TOPIC_REMOVED, data) + }) - socket.on(UPDATE_MAP, function (data) { - socket.broadcast.emit(MAP_UPDATED, data) + socket.on(DELETE_TOPIC, function (data) { + socket.broadcast.emit(TOPIC_DELETED, data) + }) + + socket.on(CREATE_SYNAPSE, function (data) { + var mapId = data.mapid + delete data.mapid + //socket.broadcast.emit('maps-' + mapId + '-newSynapse', data) + socket.broadcast.emit(SYNAPSE_CREATED, data) + }) + + socket.on(UPDATE_SYNAPSE, function (data) { + socket.broadcast.emit(SYNAPSE_UPDATED, data) + }) + + socket.on(REMOVE_SYNAPSE, function (data) { + var mapId = data.mapid + delete data.mapid + //socket.broadcast.emit('maps-' + mapId + '-removeSynapse', data) + socket.broadcast.emit(SYNAPSE_REMOVED, data) + }) + + socket.on(DELETE_SYNAPSE, function (data) { + //socket.broadcast.emit('deleteSynapseFromServer', data) + socket.broadcast.emit(SYNAPSE_DELETED, data) + }) + + socket.on(UPDATE_MAP, function (data) { + socket.broadcast.emit(MAP_UPDATED, data) }) }) }