Skip to content

Instantly share code, notes, and snippets.

@pavlo-yuriychuk
Created July 24, 2014 15:28
Show Gist options
  • Save pavlo-yuriychuk/655a6c74f99837f5a678 to your computer and use it in GitHub Desktop.
Save pavlo-yuriychuk/655a6c74f99837f5a678 to your computer and use it in GitHub Desktop.
Connections, Sessions, Users
var _ = require('lodash');
var connections = {};
var sessions = {};
var users = {};
function registerConnection(id, socket) {
connections[id] = {
id: id,
socket: socket,
lastAccess: _.now(),
sessionId: null,
userId: null
};
}
function unregisterConnection(id) {
unlinkSessionFromconnection(connections[id].sessionId, id);
delete connections[id];
}
function linkSessionToConnection(sessionId, connectionId) {
sessions[sessionId] = sessions[sessionId] || [];
sessions[sessionId].push(connectionId);
}
function unlinkSessionFromconnection(sessionId, connectionId) {
if (sessionId && connectionId) {
sessions[sessionId] = _.without(sessions[sessionId], connectionId);
}
}
function hasConnections(sessionId) {
return _.isArray(sessions[sessionId]) && sessions[sessionId].length > 0;
}
function hasUser(connectionId) {
return (connectionId in connections) && (connections[connectionId].userId !== null);
}
function getUser(connectionId) {
return (connectionId in connections) && connections[connectionId].userId;
}
function getSession(connectionId) {
return (connectionId in connections) && connections[connectionId].sessionId;
}
function linkUserToSession(userId, sessionId) {
users[userId] = users[userId] || [];
users[userId].push(sessionId);
}
function unlinkUserFromSession(userId, sessionId) {
if (userId && sessionId) {
users[userId] = _.without(users[userId], sessionId);
}
}
module.exports = {
linkSessionToConnection: linkSessionToConnection,
unlinkSessionFromconnection: unlinkSessionFromconnection,
registerConnection: registerConnection,
unregisterConnection: unregisterConnection,
hasConnections: hasConnections,
hasUser: hasUser,
getUser: getUser,
getSession: getSession,
linkUserToSession: linkUserToSession,
unlinkUserFromSession: unlinkUserFromSession
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment