pomelo.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /*!
  2. * Pomelo
  3. * Copyright(c) 2012 xiechengchao <xiecc@163.com>
  4. * MIT Licensed
  5. */
  6. /**
  7. * Module dependencies.
  8. */
  9. var fs = require('fs');
  10. var path = require('path');
  11. var application = require('./application');
  12. var Package = require('../package');
  13. /**
  14. * Expose `createApplication()`.
  15. *
  16. * @module
  17. */
  18. var Pomelo = module.exports = {};
  19. /**
  20. * Framework version.
  21. */
  22. Pomelo.version = Package.version;
  23. /**
  24. * Event definitions that would be emitted by app.event
  25. */
  26. Pomelo.events = require('./util/events');
  27. /**
  28. * auto loaded components
  29. */
  30. Pomelo.components = {};
  31. /**
  32. * auto loaded filters
  33. */
  34. Pomelo.filters = {};
  35. /**
  36. * auto loaded rpc filters
  37. */
  38. Pomelo.rpcFilters = {};
  39. /**
  40. * connectors
  41. */
  42. Pomelo.connectors = {};
  43. Pomelo.connectors.__defineGetter__('sioconnector', load.bind(null, './connectors/sioconnector'));
  44. Pomelo.connectors.__defineGetter__('hybridconnector', load.bind(null, './connectors/hybridconnector'));
  45. Pomelo.connectors.__defineGetter__('udpconnector', load.bind(null, './connectors/udpconnector'));
  46. Pomelo.connectors.__defineGetter__('mqttconnector', load.bind(null, './connectors/mqttconnector'));
  47. /**
  48. * pushSchedulers
  49. */
  50. Pomelo.pushSchedulers = {};
  51. Pomelo.pushSchedulers.__defineGetter__('direct', load.bind(null, './pushSchedulers/direct'));
  52. Pomelo.pushSchedulers.__defineGetter__('buffer', load.bind(null, './pushSchedulers/buffer'));
  53. var self = this;
  54. /**
  55. * Create an pomelo application.
  56. *
  57. * @return {Application}
  58. * @memberOf Pomelo
  59. * @api public
  60. */
  61. Pomelo.createApp = function (opts) {
  62. var app = application;
  63. app.init(opts);
  64. self.app = app;
  65. return app;
  66. };
  67. /**
  68. * Get application
  69. */
  70. Object.defineProperty(Pomelo, 'app', {
  71. get:function () {
  72. return self.app;
  73. }
  74. });
  75. /**
  76. * Auto-load bundled components with getters.
  77. */
  78. fs.readdirSync(__dirname + '/components').forEach(function (filename) {
  79. if (!/\.js$/.test(filename)) {
  80. return;
  81. }
  82. var name = path.basename(filename, '.js');
  83. var _load = load.bind(null, './components/', name);
  84. Pomelo.components.__defineGetter__(name, _load);
  85. Pomelo.__defineGetter__(name, _load);
  86. });
  87. fs.readdirSync(__dirname + '/filters/handler').forEach(function (filename) {
  88. if (!/\.js$/.test(filename)) {
  89. return;
  90. }
  91. var name = path.basename(filename, '.js');
  92. var _load = load.bind(null, './filters/handler/', name);
  93. Pomelo.filters.__defineGetter__(name, _load);
  94. Pomelo.__defineGetter__(name, _load);
  95. });
  96. fs.readdirSync(__dirname + '/filters/rpc').forEach(function (filename) {
  97. if (!/\.js$/.test(filename)) {
  98. return;
  99. }
  100. var name = path.basename(filename, '.js');
  101. var _load = load.bind(null, './filters/rpc/', name);
  102. Pomelo.rpcFilters.__defineGetter__(name, _load);
  103. });
  104. function load(path, name) {
  105. if (name) {
  106. return require(path + name);
  107. }
  108. return require(path);
  109. }