diff --git a/server/bin/game2006service/config/config.json b/server/bin/game2006service/config/config.json new file mode 100644 index 00000000..0db3279e --- /dev/null +++ b/server/bin/game2006service/config/config.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/server/bin/game2006service/config/gamedb2006.json b/server/bin/game2006service/config/gamedb2006.json new file mode 100644 index 00000000..0db3279e --- /dev/null +++ b/server/bin/game2006service/config/gamedb2006.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/server/bin/game2006service/game2006service b/server/bin/game2006service/game2006service new file mode 100755 index 00000000..60c7b232 --- /dev/null +++ b/server/bin/game2006service/game2006service @@ -0,0 +1,3 @@ +#!/bin/bash + +node ../../game2006service/app.js diff --git a/server/bin/game2006service/gm b/server/bin/game2006service/gm new file mode 100755 index 00000000..e80963f2 --- /dev/null +++ b/server/bin/game2006service/gm @@ -0,0 +1,8 @@ +#!/bin/bash + +while true +do + read -p '> ' cmd + curl "http://127.0.0.1:7691/webapp/index.php?c=GM&a=execCmd&cmd=${cmd}" |jq . + echo "" +done diff --git a/server/game2006service/app.js b/server/game2006service/app.js new file mode 100644 index 00000000..4423ac85 --- /dev/null +++ b/server/game2006service/app.js @@ -0,0 +1,16 @@ +const app = require('j7/app'); +const event = require('j7/event'); +const config = require('j7/config'); + +event.addListener(event.APP_INITIALIZED_EVENT, async () => { + require('./metadata/factory').init(); + require('./middlewares/factory').init(); + require('./controllers/factory').init(); + require('./models/factory').init(); + require('./services/factory').init(); + require('./tasks/factory').init(); + app.injectionSession(require('./session')); + app.addStaticDirectory('/static', 'static'); + app.listen(config('listen_port')); +}); +app.init(); diff --git a/server/game2006service/constant.js b/server/game2006service/constant.js new file mode 100644 index 00000000..e69de29b diff --git a/server/game2006service/controllers/factory.js b/server/game2006service/controllers/factory.js new file mode 100644 index 00000000..538ced9a --- /dev/null +++ b/server/game2006service/controllers/factory.js @@ -0,0 +1,4 @@ +function init() { +} + +exports.init = init; diff --git a/server/game2006service/metadata/Config.js b/server/game2006service/metadata/Config.js new file mode 100644 index 00000000..14b21430 --- /dev/null +++ b/server/game2006service/metadata/Config.js @@ -0,0 +1,8 @@ +const utils = require('j7/utils'); +const basewrap = require('./basewrap'); + +class Config extends basewrap.BaseWrap { + +} + +module.exports = Config; diff --git a/server/game2006service/metadata/GameDb2006.js b/server/game2006service/metadata/GameDb2006.js new file mode 100644 index 00000000..ae6b51d6 --- /dev/null +++ b/server/game2006service/metadata/GameDb2006.js @@ -0,0 +1,8 @@ +const utils = require('j7/utils'); +const basewrap = require('./basewrap'); + +class GameDb2006 extends basewrap.BaseWrap { + +} + +module.exports = GameDb2006; diff --git a/server/game2006service/metadata/basewrap.js b/server/game2006service/metadata/basewrap.js new file mode 100644 index 00000000..39b5d251 --- /dev/null +++ b/server/game2006service/metadata/basewrap.js @@ -0,0 +1,57 @@ +const utils = require('j7/utils'); + +class BaseWrap { + + #writeLock = false; + + constructor(json, metaClass) { + this._json = json; + //this._metaClass = metaClass; + this._metaName = metaClass['wrapClassName']; + } + + lock() { + //this.#writeLock = true; + } + + _getHandler() { + return { + get: (obj, prop) => { + if (prop in obj._json) { + let val = obj._json[prop]; + if (utils.isArray(val)) { + return new Proxy(val, { + set: () => { + console.log(33333); + } + }); + } else if (utils.isObject(val)) { + return new Proxy(val, { + set: () => { + console.log(33333); + } + }); + } else { + return val; + } + } + return prop in obj ? obj[prop] : null; + }, + set: (obj, prop, val) => { + if (this.#writeLock) { + console.log(111111); + } else { + Reflect.set(obj, prop, val); + } + return true; + } + }; + } + + getMetaName() { + return this._metaName; + } + +} + +exports.BaseWrap = BaseWrap; diff --git a/server/game2006service/metadata/factory.js b/server/game2006service/metadata/factory.js new file mode 100644 index 00000000..2b7bd0f3 --- /dev/null +++ b/server/game2006service/metadata/factory.js @@ -0,0 +1,130 @@ +const app = require('j7/app'); +const utils = require('j7/utils'); +const log = require('j7/log'); + +const metaClassList = []; +const metaClasses = {}; + +function registerMetaClass(fileName, primKey, wrapClass) { + const metaClass = { + 'fileName' : fileName, + 'primKey' : primKey, + 'wrapClassName': wrapClass, + 'wrapClass': require('./' + wrapClass), + 'rawList' : [], + 'rawHash' : {}, + 'wrapList' : [], + 'wrapHash' : {}, + }; + metaClassList.push(metaClass); + metaClasses[wrapClass] = metaClass; +} + +function load() { + metaClassList.forEach((metaClass) => { + const json = utils.readJsonFromFile(metaClass['fileName']); + if (!json) { + throw new Error('读取配置' + metaClass['fileName'] + '失败'); + } + if (Array.isArray(json)) { + metaClass['rawList'] = json; + + } else { + metaClass['rawList'].push(json); + } + let idx = 0; + metaClass['rawList'].forEach(function (item) { + const wrapOjb = new metaClass['wrapClass'](item, metaClass); + const wrapProxy = new Proxy(wrapOjb, wrapOjb._getHandler()); + metaClass['wrapList'].push(wrapProxy); + if (metaClass['primKey'] == '') { + metaClass['rawHash'][idx] = item; + metaClass['wrapHash'][idx] = wrapProxy; + } else { + metaClass['rawHash'][item[metaClass['primKey']]] = item; + metaClass['wrapHash'][item[metaClass['primKey']]] = wrapProxy; + } + ++idx; + }); + //log.debug(utils.jsonEncode(metaClass)); + }); + { + for (let i = 0; i < 3; ++i) { + metaClassList.forEach((metaClass) => { + metaClass['wrapList'].forEach((item) => { + if (item['_init' + i]) { + item['_init' + i](exports); + } + }); + }); + } + metaClassList.forEach((metaClass) => { + metaClass['wrapList'].forEach((item) => { + item.lock(); + }); + }); + } +} + +function init() { + let configDir = './config/'; + if (utils.isOnlineEnv()) { + configDir = '../config/'; + } else if (utils.getArgv('env') == 'dev'){ + configDir = './config_dev/'; + } + console.log(configDir, utils.getArgv('env')); + + registerMetaClass(configDir + 'config.json', + '', + 'Config' + ); + + registerMetaClass(configDir + 'gamedb2006.json', + '', + 'GameDb2006' + ); + + load(); + { + traverseMetaList('GameDb2006', (dbConf, idx) => { + app.registerDb('GameDb2006' + idx, dbConf); + }); + } + } + +function getMetaClass(name) { + return utils.hasKey(metaClasses, name) ? metaClasses[name] : null; +} + +function getMetaByKey(name, key) { + const metaClass = getMetaClass(name); + return metaClass && key in metaClass['wrapHash'] ? metaClass['wrapHash'][key] : null; +} + +function getMetaList(name) { + const metaClass = getMetaClass(name); + return metaClass ? metaClass['wrapList'] : null; +} + +function callMetaStatic(name, method, ...args) { + const metaClass = getMetaClass(name); + return metaClass['wrapClass'][method](...args); +} + +function traverseMetaList(name, cb) { + const metaList = getMetaList(name); + if (metaList) { + for (let i = 0; i < metaList.length; ++i) { + if (!cb(metaList[i], i, metaList.length)) { + break; + } + } + } +} + +exports.init = init; + +exports.getMetaByKey = getMetaByKey; +exports.traverseMetaList = traverseMetaList; +exports.callMetaStatic = callMetaStatic; diff --git a/server/game2006service/middlewares/factory.js b/server/game2006service/middlewares/factory.js new file mode 100644 index 00000000..adf60be2 --- /dev/null +++ b/server/game2006service/middlewares/factory.js @@ -0,0 +1,5 @@ +function init() { + +} + +exports.init = init; diff --git a/server/game2006service/models/factory.js b/server/game2006service/models/factory.js new file mode 100644 index 00000000..adf60be2 --- /dev/null +++ b/server/game2006service/models/factory.js @@ -0,0 +1,5 @@ +function init() { + +} + +exports.init = init; diff --git a/server/game2006service/package-lock.json b/server/game2006service/package-lock.json new file mode 100644 index 00000000..a467ef99 --- /dev/null +++ b/server/game2006service/package-lock.json @@ -0,0 +1,66 @@ +{ + "name": "game2006admin", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "game2006admin", + "version": "1.0.0", + "dependencies": { + "j7": "file:../../third_party/j7" + } + }, + "../../../third_party/j7": { + "version": "1.0.0", + "extraneous": true, + "dependencies": { + "axios": "^0.26.1", + "body-parser": "^1.20.0", + "crc-32": "^1.2.1", + "express": "^4.17.2", + "minimist": "^1.2.6", + "mysql": "~2.18.1", + "node-xlsx": "^0.21.0", + "querystring": "^0.2.1", + "urlencode": "^1.1.0" + } + }, + "../../third_party/j7": { + "version": "1.0.0", + "dependencies": { + "axios": "^0.26.1", + "body-parser": "^1.20.0", + "crc-32": "^1.2.1", + "express": "^4.17.2", + "minimist": "^1.2.6", + "mysql": "~2.18.1", + "node-xlsx": "^0.21.0", + "querystring": "^0.2.1", + "redis": "^4.1.0", + "urlencode": "^1.1.0" + } + }, + "node_modules/j7": { + "resolved": "../../third_party/j7", + "link": true + } + }, + "dependencies": { + "j7": { + "version": "file:../../third_party/j7", + "requires": { + "axios": "^0.26.1", + "body-parser": "^1.20.0", + "crc-32": "^1.2.1", + "express": "^4.17.2", + "minimist": "^1.2.6", + "mysql": "~2.18.1", + "node-xlsx": "^0.21.0", + "querystring": "^0.2.1", + "redis": "^4.1.0", + "urlencode": "^1.1.0" + } + } + } +} diff --git a/server/game2006service/package.json b/server/game2006service/package.json new file mode 100644 index 00000000..1e0745b8 --- /dev/null +++ b/server/game2006service/package.json @@ -0,0 +1,10 @@ +{ + "name": "game2006admin", + "version": "1.0.0", + "description": "", + "private": true, + "scripts": {}, + "dependencies": { + "j7": "file:../../third_party/j7" + } +} diff --git a/server/game2006service/services/factory.js b/server/game2006service/services/factory.js new file mode 100644 index 00000000..adf60be2 --- /dev/null +++ b/server/game2006service/services/factory.js @@ -0,0 +1,5 @@ +function init() { + +} + +exports.init = init; diff --git a/server/game2006service/session.js b/server/game2006service/session.js new file mode 100644 index 00000000..6a1823ef --- /dev/null +++ b/server/game2006service/session.js @@ -0,0 +1,46 @@ +const utils = require('j7/utils'); +const app = require('j7/app'); +const error = require('j7/error'); +const modelsFactory = require('./models/factory'); +const serviceFactory = require('./services/factory'); +const metaFactory = require('./metadata/factory'); + +class Session { + + constructor(req, rsp) { + this.req = req; + this.rsp = rsp; + this.nowTime = utils.getUtcTime(); + this.useConns = {}; + } + + async destory() { + if (this.user) { + await this.user.destory(); + } + for (let key in this.useConns) { + this.useConns[key].release(); + } + //console.log(new Error().stack); + this.useConns = null; + } + + getMeta(name, key) { + return metaFactory.getMetaByKey(name, key); + } + + callMetaStatic(name, method, ...args) { + return metaFactory.callMetaStatic(name, method, this, ...args); + } + + traverseMetaList(name, cb) { + return metaFactory.traverseMetaList(name, cb); + } + + callMetaFactory(name, ...args) { + return metaFactory[name](this, ...args); + } + +} + +module.exports = Session; diff --git a/server/game2006service/tasks/factory.js b/server/game2006service/tasks/factory.js new file mode 100644 index 00000000..adf60be2 --- /dev/null +++ b/server/game2006service/tasks/factory.js @@ -0,0 +1,5 @@ +function init() { + +} + +exports.init = init; diff --git a/server/game2006service/user.js b/server/game2006service/user.js new file mode 100644 index 00000000..a10f6b28 --- /dev/null +++ b/server/game2006service/user.js @@ -0,0 +1,17 @@ +const utils = require('j7/utils'); +const app = require('j7/app'); +const db = require('j7/db'); +const log = require('j7/log'); + +class User { + + constructor(session) { + + } + + async destory() { + } + +} + +exports.User = User; diff --git a/webapp/controller/BattleController.class.php b/webapp/controller/BattleController.class.php index 800d650a..af22e6d1 100644 --- a/webapp/controller/BattleController.class.php +++ b/webapp/controller/BattleController.class.php @@ -38,11 +38,10 @@ class BattleController extends BaseAuthedController { 'modifytime' => $this->_getNowTime(), ) ); - $this->_rspData($battleDataService->getReward()); - } - - public function battleReportNew() - { + error_log(json_encode($battleDataService->getReward())); + $this->_rspData(array( + 'reward' => $battleDataService->getReward() + )); } public function getBattleData() diff --git a/webapp/services/BattleDataService.php b/webapp/services/BattleDataService.php index 103fd9f1..eebc8967 100644 --- a/webapp/services/BattleDataService.php +++ b/webapp/services/BattleDataService.php @@ -70,6 +70,7 @@ class BattleDataService extends BaseService { 'ceg_uplimit' => 0, 'obtain_ceg' => 0, ), + 'total_ceg' => 0, 'items' => array() ); private $rankActivityService = null; @@ -621,14 +622,17 @@ class BattleDataService extends BaseService { if ($heroPvpCeg > 0) { $heroPvpCeg = Hero::gainGoldPvp($this->heroDto, $heroPvpCeg); $this->reward['hero']['obtain_ceg'] = $this->heroDto['current_pvp_get_ceg'] + $heroPvpCeg; + $this->reward['total_ceg'] += $heroPvpCeg; } if ($weaponPvpCeg1 > 0) { $weaponPvpCeg1 = Gun::gainGoldPvp($this->weapon1Dto, $weaponPvpCeg1); $this->reward['weapon1']['obtain_ceg'] = $this->weapon1Dto['current_pvp_get_ceg'] + $weaponPvpCeg1; + $this->reward['total_ceg'] += $weaponPvpCeg1; } if ($weaponPvpCeg2 > 0) { $weaponPvpCeg2 = Gun::gainGoldPvp($this->weapon1Dto, $weaponPvpCeg2); $this->reward['weapon2']['obtain_ceg'] = $this->weapon2Dto['current_pvp_get_ceg'] + $weaponPvpCeg2; + $this->reward['total_ceg'] += $weaponPvpCeg2; } error_log(json_encode(array( 'new_heroPvpCeg' => $heroPvpCeg,