-
-
Save mrajagopal/e6e5add0ef20adbb7cc4 to your computer and use it in GitHub Desktop.
A Node.js script for LineRate extolling the moveRequest() method
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Move request example | |
"use strict"; | |
var vsm = require('lrs/virtualServerModule'); | |
var redis = require('redis'); | |
var url = require('url'); | |
var async = require('async'); | |
var trialUsersServer = undefined; | |
var client = redis.createClient(); | |
var userAccountDB = 1; | |
// Select the dedicated db for user accounts | |
client.select(userAccountDB, function(err, result){ | |
if(err){ | |
return err; | |
} | |
}); | |
client.on('error', function(err){ | |
console.log('Error ' + err); | |
}); | |
// Connect to the redis server and populate with sample entries | |
client.on('connect', function(){ | |
console.log("Connected to redis server"); | |
client.mset("John", "trial", "Jane", "paid", "Donald", "trial"); | |
}); | |
function getUsername(servReq, callback){ | |
var url_parts = url.parse(servReq.url, true); | |
var query = url_parts.query; | |
console.log(query.name); | |
return callback(null, query.name); | |
} | |
// Determine whether the user is a trial or paid user of the services | |
function getUserStatus(username, callback){ | |
if (!username){ | |
console.log("No username found"); | |
return callback(null, false); | |
} | |
// If the query string contains a name, process request | |
// based on user's trial or paid 'status' | |
client.get(username, function(err, result){ | |
if (err){ | |
throw err; | |
} | |
if (!result){ | |
console.log("User " + username + " not found"); | |
client.set(username, "trial", function(err, result){ | |
if(err){ | |
return callback(err); | |
} | |
if (result){ | |
console.log("User " + username + " added"); | |
return callback(null, true); | |
} | |
}); | |
} | |
else{ | |
console.log("User " + username + " found"); | |
if (result === "trial"){ | |
return callback(null, true); | |
} | |
else if(result === "paid"){ | |
return callback(null, false); | |
} | |
else{ | |
console.log("Parse error from redis value"); | |
return callback(null, false); | |
} | |
} | |
}); | |
} | |
function processRequest(isTrialUser, servReq, servResp, cliReq){ | |
if (trialUsersServer && isTrialUser){ | |
trialUsersServer.moveRequest(servReq, servResp); | |
} | |
else{ | |
cliReq(); | |
} | |
} | |
var onUserRequest = function(servReq, servResp, cliReq){ | |
async.waterfall([ | |
function(callback){ | |
getUsername(servReq, callback); | |
}, | |
function(username, callback){ | |
getUserStatus(username, callback); | |
}, | |
function(isTrialUser, callback){ | |
processRequest(isTrialUser, servReq, servResp, cliReq); | |
} | |
], function(err, result){ | |
if(err){ | |
console.log("Error processing request " + err); | |
processRequest(false, servReq, servResp, cliReq); | |
} | |
}); | |
} | |
var onPaidUsersServerExists = function(vs){ | |
console.log("Paid users' server ready"); | |
vs.on('request', onUserRequest); | |
} | |
vsm.on('exist', 'paidUsersServer', onPaidUsersServerExists); | |
var onTrialUsersServerExists = function(vs){ | |
console.log("Trial users' server ready"); | |
trialUsersServer = vs; | |
} | |
vsm.on('exist', 'trialUsersServer', onTrialUsersServerExists); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment