1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- var fs = require('fs');
- var path = require('path');
- var utils = require('../util/utils');
- var Loader = require('pomelo-loader');
- var pathUtil = require('../util/pathUtil');
- var crypto = require('crypto');
- module.exports = function(app, opts) {
- return new Component(app, opts);
- };
- var Component = function(app, opts) {
- this.app = app;
- this.dict = {};
- this.abbrs = {};
- this.userDicPath = null;
- this.version = "";
- //Set userstate dictionary
- var p = path.join(app.getBase(), '/config/dictionary.json');
- if(!!opts && !!opts.dict) {
- p = opts.dict;
- }
- if(fs.existsSync(p)) {
- this.userDicPath = p;
- }
- };
- var pro = Component.prototype;
- pro.name = '__dictionary__';
- pro.start = function(cb) {
- var servers = this.app.get('servers');
- var routes = [];
- //Load all the handler files
- for(var serverType in servers) {
- var p = pathUtil.getHandlerPath(this.app.getBase(), serverType);
- if(!p) {
- continue;
- }
- var handlers = Loader.load(p, this.app);
- for(var name in handlers) {
- var handler = handlers[name];
- for(var key in handler) {
- if(typeof(handler[key]) === 'function') {
- routes.push(serverType + '.' + name + '.' + key);
- }
- }
- }
- }
- //Sort the route to make sure all the routers abbr are the same in all the servers
- routes.sort();
- var abbr;
- var i;
- for(i = 0; i < routes.length; i++) {
- abbr = i + 1;
- this.abbrs[abbr] = routes[i];
- this.dict[routes[i]] = abbr;
- }
- //Load userstate dictionary
- if(!!this.userDicPath) {
- var userDic = require(this.userDicPath);
- abbr = routes.length + 1;
- for(i = 0; i < userDic.length; i++) {
- var route = userDic[i];
- this.abbrs[abbr] = route;
- this.dict[route] = abbr;
- abbr++;
- }
- }
-
- this.version = crypto.createHash('md5').update(JSON.stringify(this.dict)).digest('base64');
- utils.invokeCallback(cb);
- };
- pro.getDict = function() {
- return this.dict;
- };
- pro.getAbbrs = function() {
- return this.abbrs;
- };
- pro.getVersion = function() {
- return this.version;
- };
|