Select Git revision
-
Cédric Moreau authoredCédric Moreau authored
server.js 9.16 KiB
var stream = require('stream');
var async = require('async');
var util = require('util');
var _ = require('underscore');
var mongoose = require('mongoose');
var common = require('./app/lib/common');
var constants = require('./app/lib/constants');
var express = require('express');
var request = require('request');
var http = require('http');
var log4js = require('log4js');
var models = ['Identity', 'Certification', 'Amendment', 'Coin', 'Configuration', 'Forward', 'Key', 'Link', 'TrustedKey', 'Merkle', 'Peer', 'PublicKey', 'Wallet', 'Transaction', 'TxMemory', 'Membership', 'Block'];
var INNER_WRITE = true;
function Server (dbConf, overrideConf, interceptors, onInit) {
stream.Duplex.call(this, { objectMode : true });
var logger = require('./app/lib/logger')(dbConf.name);
var that = this;
that.conn = null;
that.conf = null;
var initFunctions = [
function (done) {
that.connect(function (err) {
that.emit('connected', err);
done(err);
});
},
function (done) {
that.initServices(function (err) {
that.emit('services', err);
done(err);
});
}
];
var todoOnInit = initFunctions.concat(onInit).concat([
]);
this._write = function (obj, enc, writeDone, isInnerWrite) {
that.submit(obj, isInnerWrite, function (err, res) {
if (isInnerWrite) {
writeDone(err, res);
} else {
writeDone();
}
});
};
this.submit = function (obj, isInnerWrite, done) {
async.waterfall([
function (next){
var i = 0;
var treatment = null;
while (i < interceptors.length && !treatment) {
if (interceptors[i].matches(obj)) {
treatment = interceptors[i].treatment;
}
i++;
}
if (typeof treatment == 'function') {
// Handle the incoming object
treatment(that, obj, next);
} else {
var err = 'Unknown document type ' + JSON.stringify(obj);
that.emit('error', Error(err));
next(err);