metamaps--metamaps/realtime/realtime-server.js

191 lines
6.8 KiB
JavaScript
Raw Normal View History

2015-09-19 16:02:05 +00:00
var
io = require('socket.io').listen(5001),
signalServer = require('./signal'),
stunservers = [{"url": "stun:stun.l.google.com:19302"}];
2014-02-10 07:03:06 +00:00
2015-12-11 19:23:41 +00:00
io.set('log', false);
2014-02-10 07:03:06 +00:00
function start() {
var livemaps = {}
2015-09-19 16:02:05 +00:00
signalServer(io, stunservers);
io.on('connection', function (socket) {
socket.on('requestLiveMaps', function (activeUser) {
//constrain response to maps visible to user
var maps = Object.keys(livemaps).map(function(key) { return livemaps[key] })
socket.emit('receiveLiveMaps', maps)
})
// this will ping a new person with awareness of who's already on the map
socket.on('updateNewMapperList', function (data) {
var existingUser = {
userid: data.userid,
2014-06-11 20:47:46 +00:00
username: data.username,
2014-09-03 23:05:25 +00:00
userrealtime: data.userrealtime,
userinconversation: data.userinconversation,
2014-09-03 23:05:25 +00:00
userimage: data.userimage
};
socket.broadcast.emit(data.userToNotify + '-' + data.mapid + '-UpdateMapperList', existingUser);
});
2015-12-13 00:00:51 +00:00
// as a new mapper check whether there's a call in progress to join
socket.on('checkForCall', function (data) {
var socketsInRoom = io.sockets.clients(data.room);
if (socketsInRoom.length) socket.emit('maps-' + data.mapid + '-callInProgress');
2015-12-13 00:00:51 +00:00
});
// send the invitation to start a call
socket.on('inviteACall', function (data) {
socket.broadcast.emit(data.invited + '-' + data.mapid + '-invitedToCall', data.inviter);
});
2016-02-17 00:27:22 +00:00
// send an invitation to join a call in progress
socket.on('inviteToJoin', function (data) {
socket.broadcast.emit(data.invited + '-' + data.mapid + '-invitedToJoin', data.inviter);
});
2015-12-13 00:00:51 +00:00
// send response back to the inviter
socket.on('callAccepted', function (data) {
socket.broadcast.emit(data.inviter + '-' + data.mapid + '-callAccepted', data.invited);
socket.broadcast.emit('maps-' + data.mapid + '-callStarting');
2015-12-13 00:00:51 +00:00
});
socket.on('callDenied', function (data) {
socket.broadcast.emit(data.inviter + '-' + data.mapid + '-callDenied', data.invited);
});
socket.on('inviteDenied', function (data) {
socket.broadcast.emit(data.inviter + '-' + data.mapid + '-inviteDenied', data.invited);
});
2016-02-17 00:27:22 +00:00
socket.on('mapperJoinedCall', function (data) {
socket.broadcast.emit('maps-' + data.mapid + '-mapperJoinedCall', data.id);
});
socket.on('mapperLeftCall', function (data) {
socket.broadcast.emit('maps-' + data.mapid + '-mapperLeftCall', data.id);
});
2015-12-13 00:00:51 +00:00
// this will ping everyone on a map that there's a person just joined the map
socket.on('newMapperNotify', 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,
2014-09-03 23:05:25 +00:00
username: data.username,
userimage: data.userimage
};
socket.broadcast.emit('maps-' + data.mapid + '-newmapper', newUser);
});
2014-10-27 16:03:55 +00:00
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_no_longer_live', { id: mapid })
}
else if (livemaps[mapid]) {
livemaps[mapid].mapper_count--
}
socket.broadcast.emit('maps-' + mapid + '-lostmapper', data);
});
2014-10-27 16:03:55 +00:00
};
// this will ping everyone on a map that there's a person just left the map
socket.on('disconnect', end);
socket.on('endMapperNotify', end);
2015-12-13 00:00:51 +00:00
2014-09-09 22:17:39 +00:00
socket.on('updateMapperCoords', function (data) {
var peer = {
userid: data.userid,
usercoords: data.usercoords
};
socket.broadcast.emit('maps-' + data.mapid + '-updatePeerCoords', peer);
});
socket.on('topicDrag', function (data) {
var mapId = data.mapid;
delete data.mapid;
socket.broadcast.emit('maps-' + mapId + '-topicDrag', data);
});
2015-12-11 19:23:41 +00:00
socket.on('newMessage', function (data) {
var mapId = data.mapid;
delete data.mapid;
socket.broadcast.emit('maps-' + mapId + '-newMessage', data);
});
socket.on('newTopic', function (data) {
var mapId = data.mapid;
delete data.mapid;
socket.broadcast.emit('maps-' + mapId + '-newTopic', data);
});
2014-10-27 16:03:55 +00:00
socket.on('topicChangeFromClient', function (data) {
socket.broadcast.emit('topicChangeFromServer', data);
});
socket.on('synapseChangeFromClient', function (data) {
socket.broadcast.emit('synapseChangeFromServer', data);
});
socket.on('mapChangeFromClient', function (data) {
socket.broadcast.emit('mapChangeFromServer', data);
});
socket.on('deleteTopicFromClient', function (data) {
socket.broadcast.emit('deleteTopicFromServer', data);
});
socket.on('removeTopic', function (data) {
var mapId = data.mapid;
delete data.mapid;
socket.broadcast.emit('maps-' + mapId + '-removeTopic', data);
});
socket.on('newSynapse', function (data) {
var mapId = data.mapid;
delete data.mapid;
socket.broadcast.emit('maps-' + mapId + '-newSynapse', data);
});
2014-10-27 16:03:55 +00:00
socket.on('deleteSynapseFromClient', function (data) {
socket.broadcast.emit('deleteSynapseFromServer', data);
});
socket.on('removeSynapse', function (data) {
var mapId = data.mapid;
delete data.mapid;
socket.broadcast.emit('maps-' + mapId + '-removeSynapse', data);
});
});
2014-02-10 07:03:06 +00:00
}
2015-12-13 00:00:51 +00:00
start();