UNPKG

thinknode

Version:

A fast, flexible and all-in-one web framework for node.js.

150 lines (121 loc) 5.03 kB
'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;