Skip to content

Instantly share code, notes, and snippets.

@woolfi182
Created February 6, 2015 16:21
Show Gist options
  • Select an option

  • Save woolfi182/1ddf99eaaf7afb2e4119 to your computer and use it in GitHub Desktop.

Select an option

Save woolfi182/1ddf99eaaf7afb2e4119 to your computer and use it in GitHub Desktop.
tests
module.exports = function(database,fs){
return [
{
match: function(obj){
return true;
},
callback: function(obj, socket){
socket.write(JSON.stringify(obj)+'\n');
}
}
]
}
// Module that realises database interface
// "Private" in module var storage - in-memory database
var storage = {
users: {
'id1': {
firstName: 'Vasily',
lastName: 'Pupkin',
age: 20,
password: '123'
},
id2: {
firstName: 'Petr',
lastName: 'Pepkin',
age: 32,
password: 'abc'
}
},
sessions: []
};
// Object implementing database interface
var database = {
sessions: {
// Creates session using userId(userId is the same as login)
// id of created session returns to callback
create: function(userId, callback){
database.users.getById(userId, function(err, user){
if(err) {
callback(err);
} else {
storage.sessions.push({
sessionId: storage.sessions.length.toString(),
userId: userId
});
callback(null,
storage.sessions[storage.sessions.length-1].sessionId);
}
});
},
// get session object by sessionId or error if session is invalid
getById: function(sessionId, callback){
if(storage.sessions[sessionId]) {
callback(null, storage.sessions[sessionId]);
} else {
callback({
error: "Invalid session"
});
}
}
},
users: {
// get user object by userId(login) or error if user not exists
getById: function(userId, callback){
if(storage.users[userId]) {
callback(null, storage.users[userId]);
} else {
callback({
error: 'User not exists'
});
}
},
// if user exists and password correct, return null as error to callback
auth: function(userId, password, callback){
database.users.getById(userId, function(err, user){
if(err){
callback(err);
} else {
if(user.password===password) {
callback(null);
} else {
callback({
error: 'Invalid password'
})
}
}
});
}
}
};
// return database object as module
module.exports = database;
module.exports = function(net) {
return function(config,port) {
net.createServer(function(socket){
//socket.pipe(process.stdout);
//socket.pipe(socket);
var buffer = '';
socket.on('data', function(data){
buffer+=data;
var arr = buffer.split('\n');
if(arr.length==2){
var message = arr[0];
buffer=arr[1];
try {
var obj = JSON.parse(message);
if(!(function(){
for(var i=0; i<config.length; i++){
var handler = config[i];
if(handler.match(obj)){
handler.callback(obj, socket);
return true;
}
}
return false;
})()){
socket.write(JSON.stringify({
error: "Invalid request"
})+'\n');
}
} catch (e) {
socket.write(JSON.stringify({
error: "Invalid JSON"
})+'\n');
}
}
});
}).listen(port);
}
}
var net = require("net"),
database = require("./database.js"),
fs = require("fs"),
config = require("./config")(database,fs),
router = require("./router.js")(net);
router(config,8080)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment