This commit is contained in:
aozhiwei 2022-09-21 10:29:21 +08:00
parent bfb9d35d6a
commit 4c2b34f678
14 changed files with 359 additions and 0 deletions

View File

@ -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();

View File

View File

@ -0,0 +1,4 @@
function init() {
}
exports.init = init;

View File

@ -0,0 +1,8 @@
const utils = require('j7/utils');
const basewrap = require('./basewrap');
class Config extends basewrap.BaseWrap {
}
module.exports = Config;

View File

@ -0,0 +1,8 @@
const utils = require('j7/utils');
const basewrap = require('./basewrap');
class GameDb2006 extends basewrap.BaseWrap {
}
module.exports = GameDb2006;

View File

@ -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;

View File

@ -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;

View File

@ -0,0 +1,5 @@
function init() {
}
exports.init = init;

View File

@ -0,0 +1,5 @@
function init() {
}
exports.init = init;

49
server/game2006service/package-lock.json generated Normal file
View File

@ -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"
}
}
}
}

View File

@ -0,0 +1,10 @@
{
"name": "game2006admin",
"version": "1.0.0",
"description": "",
"private": true,
"scripts": {},
"dependencies": {
"j7": "file:../../../third_party/j7"
}
}

View File

@ -0,0 +1,5 @@
function init() {
}
exports.init = init;

View File

@ -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;

View File

@ -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;