smallGame.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. 'use strict';
  2. var quick = require('quick-pomelo');
  3. var P = quick.Promise;
  4. var _ = require('lodash');
  5. var url = require('url');
  6. var md5 = require('md5');
  7. var http = require('http');
  8. var uuid = require('node-uuid');
  9. var qs = require('querystring');
  10. var conf = require('./conf.json');
  11. var C = require('../share/constant');
  12. var logger = quick.logger.getLogger('smallGame', __filename);
  13. // 构造方法
  14. var Controller = function (app) {
  15. this.app = app;
  16. this.port = app.getCurServer().httpPort;
  17. this.server = http.createServer((req, res) => this.handleAsync(req, res));
  18. this.server.listen(this.port);
  19. };
  20. // 导出方法
  21. module.exports = function (app) {
  22. return new Controller(app);
  23. };
  24. // 原型对象
  25. var proto = Controller.prototype;
  26. // 路由函数
  27. proto.route = function (pathname) {
  28. switch (pathname) {
  29. case '/loginSmall.nd': return (query, method, res) => this.loginSmallAsync(query, method, res);//小游戏登陆
  30. }
  31. };
  32. // 写出数据
  33. proto.writeOut = function (query, res) {
  34. if (typeof query != 'object') {
  35. return res.end(String(query));
  36. }
  37. return res.end(JSON.stringify(query));
  38. };
  39. // 跨域选项
  40. const ACCESS = {
  41. "Content-Type": "text/plain;charset=utf-8",
  42. "Access-Control-Allow-Origin": "*",
  43. "Access-Control-Allow-Headers": "X-Requested-With",
  44. "Access-Control-Allow-Methods": "PUT,POST,GET,DELETE,OPTIONS"
  45. };
  46. // 入口函数
  47. proto.handleAsync = P.coroutine(function* (req, res) {
  48. var pathname = url.parse(req.url).pathname;
  49. var phandler = this.route(pathname);
  50. if (!phandler) {
  51. res.writeHead(404, ACCESS);
  52. return res.end('WARNING: Not Found!');
  53. }
  54. else {
  55. res.writeHead(200, ACCESS);
  56. if (req.method.toLowerCase() == 'get') {
  57. let query = url.parse(req.url, true).query;
  58. return phandler(query, req.method, res);
  59. }
  60. else if (req.method.toLowerCase() == 'post') {
  61. let data = '';
  62. req.on('data', (d) => { data += d; });
  63. req.on('end', () => {
  64. let query = { __post__: data };
  65. let regexp = /^\s*{(\s*?".*?":.*\s*)*}\s*$/;
  66. if (regexp.test(data)) try { query = JSON.parse(data); } catch (e) { }
  67. else if (data.indexOf('=') != -1) query = qs.parse(data);
  68. return phandler(query, req.method, res);
  69. });
  70. }
  71. }
  72. });
  73. //ts++ 小游戏登陆
  74. proto.loginSmallAsync = P.coroutine(function* (query, method, res) {
  75. // var userId = Number(query.userid) || 0;
  76. // var playerId = query['playerId'] || "";
  77. // console.warn("小游戏登陆-------------------playerId: "+playerId+" sign: ",sign);
  78. // if (!playerId) {
  79. // return this.writeOut('fail: playerId error!', res);
  80. // }
  81. // var sign = query['sign'] || "";
  82. // if (!checkSign(sign)) {
  83. // return this.writeOut('fail: sign error!', res);
  84. // }
  85. // var self = this;
  86. // var app = this.app;
  87. // return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  88. // var player = yield app.models.Player.findByIdAsync(playerId, 'account userId name diamond');
  89. // if (player) {
  90. // player.diamond += 10;
  91. // yield player.saveAsync();
  92. // let data ={
  93. // playerId:playerId,
  94. // account:player.account,
  95. // userId:player.userId,
  96. // name:player.name,
  97. // diamond:player.diamond,
  98. // }
  99. // // console.warn("小游戏登陆-------------------playerId: "+data.toString())
  100. // return self.writeOut(data, res);
  101. // }
  102. // return self.writeOut('not player', res);
  103. // }), app.getServerId())
  104. // .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  105. });
  106. //ts++签名验证
  107. function checkSign(sign) {
  108. var signKey = 'defe6d21422c8b770767f74fcea95';
  109. if (sign!=signKey) return false;
  110. return true;
  111. };