From 4c2b34f678aebb8ccc6059d1a309c5c8ebd58230 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 21 Sep 2022 10:29:21 +0800 Subject: [PATCH] 1 --- server/game2006service/app.js | 15 ++ server/game2006service/constant.js | 0 server/game2006service/controllers/factory.js | 4 + server/game2006service/metadata/Config.js | 8 ++ server/game2006service/metadata/GameDb2006.js | 8 ++ server/game2006service/metadata/basewrap.js | 57 ++++++++ server/game2006service/metadata/factory.js | 130 ++++++++++++++++++ server/game2006service/middlewares/factory.js | 5 + server/game2006service/models/factory.js | 5 + server/game2006service/package-lock.json | 49 +++++++ server/game2006service/package.json | 10 ++ server/game2006service/services/factory.js | 5 + server/game2006service/session.js | 46 +++++++ server/game2006service/user.js | 17 +++ 14 files changed, 359 insertions(+) create mode 100644 server/game2006service/app.js create mode 100644 server/game2006service/constant.js create mode 100644 server/game2006service/controllers/factory.js create mode 100644 server/game2006service/metadata/Config.js create mode 100644 server/game2006service/metadata/GameDb2006.js create mode 100644 server/game2006service/metadata/basewrap.js create mode 100644 server/game2006service/metadata/factory.js create mode 100644 server/game2006service/middlewares/factory.js create mode 100644 server/game2006service/models/factory.js create mode 100644 server/game2006service/package-lock.json create mode 100644 server/game2006service/package.json create mode 100644 server/game2006service/services/factory.js create mode 100644 server/game2006service/session.js create mode 100644 server/game2006service/user.js diff --git a/server/game2006service/app.js b/server/game2006service/app.js new file mode 100644 index 00000000..ad3714e7 --- /dev/null +++ b/server/game2006service/app.js @@ -0,0 +1,15 @@ +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(); + 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..bc6a1dba --- /dev/null +++ b/server/game2006service/package-lock.json @@ -0,0 +1,49 @@ +{ + "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", + "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" + } + }, + "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", + "urlencode": "^1.1.0" + } + } + } +} diff --git a/server/game2006service/package.json b/server/game2006service/package.json new file mode 100644 index 00000000..f622ebeb --- /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/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;