| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- '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;
- };
|