Skip to content

Instantly share code, notes, and snippets.

@Fauntleroy
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Fauntleroy/9478052 to your computer and use it in GitHub Desktop.
Save Fauntleroy/9478052 to your computer and use it in GitHub Desktop.
// assume this is node.js/browserify land so this is actually private
var next_server_number = function( servers ){
var current_int = 1;
servers = servers.sort( function( a, b ){
return a - b;
});
for( var i = 0; i < servers.length; i++ ){
if( current_int === servers[i] ){
current_int++;
}
else {
break;
}
}
return current_int;
};
var Tracker = function(){
// internally store server ids
this.servers = {};
};
Tracker.prototype.allocate = function( server_type ){
var server_id = 1;
// does server type exist
// if it does exist, find lowest server id
// add server id lowest
if( this.servers[server_type] ){
server_id = next_server_number( this.servers[server_type] );
this.servers[server_type].push( server_id );
}
// if it doesn't exist, add array for server ids
// add server id 1
else {
this.servers[server_type] = [ server_id ];
}
return server_type + server_id;
};
Tracker.prototype.deallocate = function( server_type_id ){
// split server name and id
// find server id in server ids
// if server exists, splice it out
var server_id_bits = /([a-z]+)(\d+)$/.exec( server_type_id );
if( !server_id_bits ){
throw new Error('Invalid argument. Must be format "server1", "server2", etc');
}
var server_type = server_id_bits[1];
var server_id = parseInt( server_id_bits[2], 10 );
var server_id_index = this.servers[server_type].indexOf( server_id );
if( server_id_index >= 0 ){
this.servers[server_type].splice( server_id_index, 1 );
}
return this.servers[server_type];
};
module.exports = Tracker;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment