Ejemplo n.º 1
0
	that.close = function(callback) {
		callback = callback || noop;
		
		ondb.get(common.fork(callback, function(db) {
			db.close(callback);
		}));
	};	
Collection.prototype.find = function() {
  var args = Array.prototype.slice.call(arguments);
  var oncursor = common.future();
  var oncollection = this._oncollection;

  // we provide sugar for doing find(query, callback) -> find(query).toArray(callback);
  if (typeof args[args.length - 1] === 'function') {
    var callback = args.pop();

    oncursor.get(common.fork(callback, function(cur) {
      cur.toArray(callback);
    }));
  }

  common.step([

  function(next) {
      oncollection.get(next);
  },
  function(col, next) {
      args.push(next);
      col.find.apply(col, args);
  },
  function(cur) {
      oncursor.put(null, cur);
  }
 ], oncursor.put);

  return new Cursor(oncursor);
};
Ejemplo n.º 3
0
Request.prototype.send = function(body, callback) {
	if (!callback) {
		callback = body;
		body = '';
	} else {
		body = this._encode(body);
		this._headers['content-length'] = this._headers['content-length'] || (Buffer.isBuffer(body) ? body.length : Buffer.byteLength(body));
	}
	
	callback = callback || noop;
	
	var self = this;

	this._response(common.fork(callback, function(response) {
		if (self._head) {
			callback(null, response.headers);
			return;
		}

		self._decode(response, callback);
	}));
	
	if (!this._piping) {
		this.end(body);		
	}
	return this;
};
        that[name] = function() {
          var args = arguments;
          var callback = args[args.length - 1] || noop;

          ondb.get(common.fork(callback, function(db) {
            db[name].apply(db, args);
          }));
        };
Cursor.prototype._exec = function(name, args) {
  var callback = typeof args[args.length - 1] === 'function' ? args[args.length - 1] : noop;

  this._oncursor.get(common.fork(callback, function(cur) {
    cur[name].apply(cur, args);
  }));
  return this;
};
Ejemplo n.º 6
0
		var flush = function() {
			if (!buffer) {
				writer = null;
				that.send = send;
				return;
			}
			that.send = sendBuffer;
			writer = mania.put('/sockets/'+id).send(empty(), common.fork(onerror, flush));
		};
Ejemplo n.º 7
0
		single(function(free) {
			callback = free.wrap(callback);

			sub.exclude = common.join(sub.exclude, exclude);
			
			resolveFile(entry, sub, common.fork(callback, function(main) {
				exclude = common.join(exclude, main.dependencies, {require:1});
				callback(null, main.compiled);
			}));			
		});
Ejemplo n.º 8
0
Cursor.prototype._exec = function(name, args) {
	var callback = noop;
	
	if (typeof args[args.length-1] === 'function') {
		callback = args[args.length-1] = normalize(args[args.length-1]);
	}
	this._oncursor.get(common.fork(callback, function(cur) {
		cur[name].apply(cur, args);
	}));
	return this;
};
Ejemplo n.º 9
0
server.get('/user/{user}/unbook', function(request, response) {
	if (!request.query.date) {
		respond(response, {err:'no date'}, 500);
	}

	db.booking.remove({bookingId: request.query.date}, common.fork(function(err) {
		respond(response, {err:'no date'}, 500);
	}, function(data) {
		respond(response, {}, 200);
	}));
});
Ejemplo n.º 10
0
	return function(stream, callback) {
		exports.string(common.fork(callback, function(result) {
			try {
				result = strat(result);
			} catch(err) {
				callback(err);
				return;
			}
			callback(null, result);
		}));		
	};
Ejemplo n.º 11
0
Request.prototype.to = function(output, callback) {
	callback = callback || noop;
	
	this._response(common.fork(callback, function(response) {
		pipe(response, output, callback);
	}));
	
	if (!this._piping) {
		this.end();		
	}
	return this;
};
Collection.prototype._exec = function(name, args) {
  var callback = typeof args[args.length - 1] === 'function' ? args[args.length - 1] : noop;

  this._oncollection.get(common.fork(callback, function(col) {
    var old = col.opts.safe;

    if (callback !== noop) {
      col.opts.safe = true;
    }
    col[name].apply(col, args);
    col.opts.safe = old;
  }));
};
Ejemplo n.º 13
0
Collection.prototype._exec = function(name, args) {
	var args = normalizeId(args);
	var callback = args[args.length-1];
	
	if (typeof callback === 'function') {
		args[args.length-1] = callback = normalize(callback);
	} else {
		callback = noop;
	}
	
	this._oncollection.get(common.fork(callback, function(col) {
		col[name].apply(col, args);
	}));
};
Ejemplo n.º 14
0
Request.prototype.from = function(input, callback) {
	this._piping = true;
	
	input.pipe(this._request());
	
	if (callback) {
		var self = this;
		
		this._response(common.fork(callback, function(response) {
			self._decode(response, callback);
		}));
	}
	return this;
};
Ejemplo n.º 15
0
		var read = function(message) {
			if (message === '') {
				onerror(new Error('empty message'));
				return;
			}
			if (message) {
				message = message.split('\n');

				for (var i = 0; i < message.length; i++) {
					if (message[i]) {
						that.emit('message', message[i]);
					}
				}
			}
			reader = mania.get('/sockets/'+id, common.fork(onerror, read));	
		};
Ejemplo n.º 16
0
		var read = function(data) {
			if (data) {
				data = data.split('\n');
				
				for (var i = 0; i < data.length; i++) {
					if (!data[i] || data[i] === 'pong') {
						continue;
					}
					self.emit('message', JSON.parse(data[i]));								
				}
			}
			if (self.destroyed) {
				return;
			}
					
			reader.get('/read?id='+id+'&t='+tick(), common.fork(onerror, read));
		};
Ejemplo n.º 17
0
	router.get('/json-sockets/read', function(request, response) {
		var query = parseURL(request.url, true).query;
		var socket = polls[query.id];

		var respond = responder(query, response);
		var onerror = function() {
			respond(404, '');
		};

		if (!socket) {
			onerror();
			return;
		}

		request.on('close', function() {
			socket.destroy();
		});

		socket.read(common.fork(onerror, function(data) {
			respond(200, data);
		}));
	});
Ejemplo n.º 18
0
exports.login = function(user, password, callback) {
	curly.post('https://se.diasend.com/diasend/login.php')
		.headers({
			Host:'se.diasend.com',
			Origin:'http://diasend.com',
			Referer:'http://diasend.com/site/index.php?lang=sv',
			'content-type':'application/x-www-form-urlencoded',
			'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2'
		})
		.follow(false)
		.allow(302)
		.head(true)
		.send(querify({
			user:user,
			passwd:password,
			submit:'Logga in',
			lang:'swedish'
		}), common.fork(callback, function(headers) {
			if (!headers['set-cookie']) {
				callback(new Error('set-cookie header missing'));
			}
			callback(null, headers['set-cookie'][0]);
		}));
};
Ejemplo n.º 19
0
			var onbodyrequest = function(request, response) {
				buffoon.string(request, common.fork(noop, function(data) {
					querify(request);
					invoke(request, data, false, response);
				}));
			};
Ejemplo n.º 20
0
var onmain = function(callback) {
	return common.fork(callback, function(main) {
		callback(null, main.compiled);
	});
};
Ejemplo n.º 21
0
		var send = self._send = function(message) {
			self._send = pusher;
			writer.post('/write?id='+id+'&t='+tick(), message+'\n', common.fork(onerror, flush));
		};					
Ejemplo n.º 22
0
		var send = function() {
			var next = body.length <= (i+1)*1000 ? callback : common.fork(callback, send);
			var post = encodeURIComponent(body.substr(1000 * i++, 1000));

			self._destroy = curl.jsonp(host+'post='+post+'&callback=?', next);
		};
Ejemplo n.º 23
0
	return function(request, response) {
		var url = common.format(location, request.params);

		var onnotfound = function() {
			response.writeHead(404);
			response.end();
		};

		var onerror = function(err) {
			response.writeHead(500);
			//console.log(err);
			response.end(err);
		};

		if (/\/\.\.\//.test(url)) { // security check
			onnotfound();
			return;
		}
		
		if(mime.lookup(url) == 'text/css') {
			fs.readFile(url,'ascii', common.fork(onnotfound, function(data) {
				try {
					console.log('try');
	   			less.render(data, function(err, text) {
	   				console.log('done', err);
						response.writeHead(200, {'content-type':'text/css'});
						response.end(err ? data : text);
					});
				} catch (e) {
					console.log('catch');
				  response.writeHead(200, {'content-type':'text/css'});
					response.end(data);
				}
			}));
			return;
		}

		if(mime.lookup(url).indexOf('image/') != -1) {
			fs.readFile(url, function(err, data){
		    response.writeHead(200, {"Content-Type": "image/png"});
		    response.write(data, "binary");
		    response.end();
			});			
			return;
		}
		fs.stat(url, common.fork(onnotfound, function(stat) {
			var headers = {
				'content-type':mime.lookup(url),
				'content-length':stat.size,
				'date':new Date().toUTCString(),
				'last-modified':stat.mtime.toUTCString()
			};
			
			if (options.cacheMaxAge !== undefined) {
				headers['cache-control'] = 'public, max-age=' + options.cacheMaxAge;
			}
			
			response.writeHead(options.status, headers);
			fs.createReadStream(url).pipe(response);
		}));
	};
Ejemplo n.º 24
0
server.get('/api/{method}', function(request, response) {
	var url = parse(request.url,true);

    var onerror = function(message) {
		response.writeHead(200, {'Content-Type': 'application/javascript'});
		response.write(JSON.stringify({error:message}));
		response.end();
	}
	
	var write = common.fork(onerror,function(data) {
		response.writeHead(200, {'Content-Type': 'application/javascript'});
		response.write(JSON.stringify(data));
		response.end();
	}); 
	
	switch(request.params.method) {
		case 'auth':
		chat.isValidUser(url.query.name,url.query.password,common.fork(onerror,function(valid) {
		    response.writeHead(200, {'Content-Type': 'text/html','Set-Cookie':cookie.stringify(url.query.name)});
		    response.end(JSON.stringify(valid && url.query.name));
		}));
		break;
	
		case 'create':
		if (!url.query.name || url.query.name.replace(/\s/g,"") == "") {
			onerror('Choose a username');
			return;
		}
		if (!url.query.password || url.query.password.replace(/\s/g,"") == "") {
			onerror('Set a password');
			return;
		}
		
		common.step([
			function(next) {
				chat.exists(url.query.name, next);
			},
			function(exists) {
				if (exists) {
					onerror('Username is taken');
					return;
				}
				chat.createUser(url.query.name,url.query.password,write);
			}
		],function(err) {
			onerror();
		});
		break;
		
		case 'users':
		chat.getUsers(write);
		break;
		
		case 'conversation':
		chat.getUser(url.query.name, common.fork(write, function(user) {
		    user.conversation(url.query.to,write);
		}));
		break;
				
		case 'status':
		chat.getUser(url.query.name,common.fork(write, function(user) {
		   	user.status(url.query.status,write);
		}));
		break;
		
		case 'chat':
		chat.getUser(url.query.name,common.fork(write, function(user) {
		   	user.chat(url.query.to,url.query.message,write);
			pubsub.publish({
			    origin: 'server',
			    from: name,
			    to:url.query.to,
			    message: url.query.message
			});
		}));
		break;
	}
});
Ejemplo n.º 25
0
}, function(doc) {
	chat.getUser(doc.from, common.fork(noop,function(user) {
		user.chat(doc.to, doc.message);
    }));
});
Ejemplo n.º 26
0
server.get('/user/{user}/book', function(request, response) {
	if (!request.query.date) {
		respond(response, {err:'no date'}, 500);
	}
	db.booking.findOne({bookingId: request.query.date}, common.fork(function(err) {
		respond(response, {err:'no date'}, 500);
	}, function(booking) {
		if (booking) {
			respond(response, {taken:1}, 200);
			return;
		}
		db.booking.save({bookingId: request.query.date, notes: request.query.notes,user: users[request.params.user]}, common.fork(function(err) {
			respond(response, {err:'no date'}, 500);
		}, function(data) {
			respond(response, {}, 200);
		}));
	}));
});
Ejemplo n.º 27
0
var createLongPoll = function(host) {
	var mania = require('crossmania').create(host);
	var that = common.createEmitter();
	var writer;
	var reader;

	var onerror = function(err) {
		that.destroy();
	};

	writer = mania.post('/sockets', common.fork(onerror, function(id) {
		var buffer = '';

		var empty = function() {
			var b = buffer.substring(0, mania.type === 'jsonp' ? 1000 : buffer.length);
			
			buffer = buffer.substring(b.length);
			return b;	
		};
		var flush = function() {
			if (!buffer) {
				writer = null;
				that.send = send;
				return;
			}
			that.send = sendBuffer;
			writer = mania.put('/sockets/'+id).send(empty(), common.fork(onerror, flush));
		};
		var sendBuffer = function(message) {
			buffer += message+'\n';
		};
		var send = function(message) {
			buffer += message+'\n';
			flush();
		};
		var read = function(message) {
			if (message === '') {
				onerror(new Error('empty message'));
				return;
			}
			if (message) {
				message = message.split('\n');

				for (var i = 0; i < message.length; i++) {
					if (message[i]) {
						that.emit('message', message[i]);
					}
				}
			}
			reader = mania.get('/sockets/'+id, common.fork(onerror, read));	
		};

		read();

		that.send = send;
		that.emit('open');
	}));

	that.type = 'long-poll-'+mania.type;
	that.send = noop;
	that.destroy = function() {
		that.destroy = noop;

		if (writer) {
			writer.destroy();
		}
		if (reader) {
			reader.destroy();
		}
		that.emit('close');
	};

	return that;
};
Ejemplo n.º 28
0
	}, function(booking) {
		if (booking) {
			respond(response, {taken:1}, 200);
			return;
		}
		db.booking.save({bookingId: request.query.date, notes: request.query.notes,user: users[request.params.user]}, common.fork(function(err) {
			respond(response, {err:'no date'}, 500);
		}, function(data) {
			respond(response, {}, 200);
		}));
	}));
Ejemplo n.º 29
0
var LongPoll = common.emitter(function(host) {
	this.reader = createRequest(host);
	this.writer = createRequest(host);
	
	var self = this;
	var reader = this.reader;
	var writer = this.writer;
	var cnt = 0;

	this.type = 'longpoll-'+reader.type;
	this.destroyed = false;
	this._ping = null;

	var onerror = function() {
		self.destroy();
	};
	var oncreate = function(id) {
		var buffer = [];

		var read = function(data) {
			if (data) {
				data = data.split('\n');
				
				for (var i = 0; i < data.length; i++) {
					if (!data[i] || data[i] === 'pong') {
						continue;
					}
					self.emit('message', JSON.parse(data[i]));								
				}
			}
			if (self.destroyed) {
				return;
			}
					
			reader.get('/read?id='+id+'&t='+tick(), common.fork(onerror, read));
		};
		var flush = function() {
			if (buffer.length) {
				var data = buffer.join('\n');
				
				buffer = [];
				send(data);						
			} else {
				self._send = send;							
			}
		};
		var pusher = function(data) {
			buffer.push(data);
		};
		var send = self._send = function(message) {
			self._send = pusher;
			writer.post('/write?id='+id+'&t='+tick(), message+'\n', common.fork(onerror, flush));
		};					
		
		self._ping = setInterval(function() {
			self._send('ping');
		}, PING_INTERVAL);
		
		read();
		self.emit('open');					
	};
	
	reader.get('/create?t='+tick(), common.fork(onerror, oncreate));
});
Ejemplo n.º 30
0
Request.prototype.resume = function() {
	this._response(common.fork(noop, function(response) {
		response.resume();
	}));
};