'use strict'; var quick = require('quick-pomelo'); var P = quick.Promise; var _ = require('lodash'); var url = require('url'); var md5 = require('md5'); var http = require('http'); var uuid = require('node-uuid'); var qs = require('querystring'); var conf = require('./conf.json'); var C = require('../share/constant'); var logger = quick.logger.getLogger('smallGame', __filename); // 构造方法 var Controller = function (app) { this.app = app; this.port = app.getCurServer().httpPort; this.server = http.createServer((req, res) => this.handleAsync(req, res)); this.server.listen(this.port); }; // 导出方法 module.exports = function (app) { return new Controller(app); }; // 原型对象 var proto = Controller.prototype; // 路由函数 proto.route = function (pathname) { switch (pathname) { case '/loginSmall.nd': return (query, method, res) => this.loginSmallAsync(query, method, res);//小游戏登陆 } }; // 写出数据 proto.writeOut = function (query, res) { if (typeof query != 'object') { return res.end(String(query)); } return res.end(JSON.stringify(query)); }; // 跨域选项 const ACCESS = { "Content-Type": "text/plain;charset=utf-8", "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "X-Requested-With", "Access-Control-Allow-Methods": "PUT,POST,GET,DELETE,OPTIONS" }; // 入口函数 proto.handleAsync = P.coroutine(function* (req, res) { var pathname = url.parse(req.url).pathname; var phandler = this.route(pathname); if (!phandler) { res.writeHead(404, ACCESS); return res.end('WARNING: Not Found!'); } else { res.writeHead(200, ACCESS); if (req.method.toLowerCase() == 'get') { let query = url.parse(req.url, true).query; return phandler(query, req.method, res); } else if (req.method.toLowerCase() == 'post') { let data = ''; req.on('data', (d) => { data += d; }); req.on('end', () => { let query = { __post__: data }; let regexp = /^\s*{(\s*?".*?":.*\s*)*}\s*$/; if (regexp.test(data)) try { query = JSON.parse(data); } catch (e) { } else if (data.indexOf('=') != -1) query = qs.parse(data); return phandler(query, req.method, res); }); } } }); //ts++ 小游戏登陆 proto.loginSmallAsync = P.coroutine(function* (query, method, res) { // var userId = Number(query.userid) || 0; // var playerId = query['playerId'] || ""; // console.warn("小游戏登陆-------------------playerId: "+playerId+" sign: ",sign); // if (!playerId) { // return this.writeOut('fail: playerId error!', res); // } // var sign = query['sign'] || ""; // if (!checkSign(sign)) { // return this.writeOut('fail: sign error!', res); // } // var self = this; // var app = this.app; // return app.memdb.goose.transactionAsync(P.coroutine(function* () { // var player = yield app.models.Player.findByIdAsync(playerId, 'account userId name diamond'); // if (player) { // player.diamond += 10; // yield player.saveAsync(); // let data ={ // playerId:playerId, // account:player.account, // userId:player.userId, // name:player.name, // diamond:player.diamond, // } // // console.warn("小游戏登陆-------------------playerId: "+data.toString()) // return self.writeOut(data, res); // } // return self.writeOut('not player', res); // }), app.getServerId()) // .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //ts++签名验证 function checkSign(sign) { var signKey = 'defe6d21422c8b770767f74fcea95'; if (sign!=signKey) return false; return true; };