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