globalFilter.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. 'use strict';
  2. var C = require('./share/constant');
  3. var Filter = function (app) {
  4. this.app = app;
  5. this.status = {};
  6. };
  7. Filter.prototype.before = function (msg, session, next) {
  8. do {
  9. if (!session.uid) break;
  10. let route = msg.route;
  11. let pos = route.lastIndexOf('.');
  12. if (pos === -1) break;
  13. let method = route.substr(pos + 1);
  14. if (method !== 'createTable' && method !== 'joinTable') break;
  15. if (this.status[session.uid]) {
  16. let err = new Error(C.GAME_REQ_HANDLING);
  17. return next(err, { code: C.FAILD, msg: C.GAME_REQ_HANDLING });
  18. }
  19. this.status[session.uid] = true;
  20. } while (0);
  21. return next();
  22. };
  23. Filter.prototype.after = function (err, msg, session, resp, next) {
  24. do {
  25. if (err && err.message == C.GAME_REQ_HANDLING) { err = null; break; }
  26. if (!session.uid) break;
  27. let route = msg.route;
  28. let pos = route.lastIndexOf('.');
  29. if (pos === -1) break;
  30. let method = route.substr(pos + 1);
  31. if (method !== 'createTable' && method !== 'joinTable') break;
  32. if (this.status[session.uid]) this.status[session.uid] = false;
  33. } while (0);
  34. return next(err);
  35. };
  36. module.exports = function (app) {
  37. return new Filter(app);
  38. };