thinknode
Version:
A fast, flexible and all-in-one web framework for node.js.
150 lines (121 loc) • 5.03 kB
JavaScript
'use strict';
exports.__esModule = true;
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
*
* @author richen
* @copyright Copyright (c) 2015 - <richenlin(at)gmail.com>
* @license MIT
* @version 15/12/3
*/
var _class = function (_THINK$Base) {
(0, _inherits3.default)(_class, _THINK$Base);
function _class() {
(0, _classCallCheck3.default)(this, _class);
return (0, _possibleConstructorReturn3.default)(this, _THINK$Base.apply(this, arguments));
}
_class.prototype.init = function init() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
this.options = THINK.extend(false, {
memcache_host: THINK.config('memcache_host') || '127.0.0.1',
memcache_port: THINK.config('memcache_port') || 11211,
memcache_poolsize: THINK.config('memcache_poolsize') || 10, //memcache pool size
memcache_timeout: THINK.config('memcache_timeout') * 1000 || 10000 }, options);
this.handle = null;
this.deferred = null;
};
_class.prototype.connect = function connect() {
var _this2 = this;
if (this.handle) {
return this.deferred.promise;
}
var deferred = THINK.getDefer();
var memcached = require('memcached');
//[ '192.168.0.102:11211', '192.168.0.103:11211', '192.168.0.104:11211' ]
var connection = new memcached([this.options.memcache_host + ':' + this.options.memcache_port], {
poolSize: this.options.memcache_poolsize,
retry: this.options.memcache_timeout,
retries: 1
});
connection.on('issue', function () {
_this2.close();
deferred.reject('connection issue');
});
connection.on('failure', function (err) {
_this2.close();
deferred.reject(err);
});
this.handle = connection;
if (this.deferred) {
this.deferred.reject(new Error('connection closed'));
}
deferred.resolve();
this.deferred = deferred;
return this.deferred.promise;
};
_class.prototype.close = function close() {
if (this.handle) {
this.handle.end();
this.handle = null;
}
};
/**
*
* @param name
* @param data
* @returns {*}
*/
_class.prototype.wrap = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(name, data) {
var deferred;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
deferred = THINK.getDefer();
_context.next = 3;
return this.connect().catch(function (e) {
return deferred.reject(e);
});
case 3:
if (!THINK.isArray(data)) {
data = data === undefined ? [] : [data];
}
data.push(function (err, da) {
if (err) {
deferred.reject(err);
} else {
deferred.resolve(da);
}
});
if (this.handle) {
this.handle[name].apply(this.handle, data);
} else {
deferred.reject('connection end');
}
return _context.abrupt('return', deferred.promise);
case 7:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
function wrap(_x2, _x3) {
return _ref.apply(this, arguments);
}
return wrap;
}();
return _class;
}(THINK.Base);
exports.default = _class;