xy-server/game/utils/DBForm.ts
2025-04-23 09:34:08 +08:00

84 lines
1.8 KiB
TypeScript

import { Socket } from 'dgram';
import GameConf from '../../conf/GameConf';
import GameUtil from '../core/GameUtil';
import SKLogger from '../gear/SKLogger';
import DB from './DB';
let socketio = require('socket.io-client');
export default class DBForm {
static shared = new DBForm();
sqlPool: any[];
socket: Socket;
sql_seed = 0;
constructor() {
this.sqlPool = [];
}
launch() {
if (this.socket) {
return;
}
let uri = `http://localhost:${GameConf.gate_db_port}`;
this.socket = socketio.connect(uri, {
reconnect: true
});
let self = this;
this.socket.on('connect', () => { //绑定连接上服务器之后触发的数据
self.reset();
});
this.socket.on("disconnection", () => {
SKLogger.info("连接:DBServ断开连接");
})
this.socket.on("sqled", (data: any) => {
let id = data.id;
let sqlInfo = this.sqlPool[id];
if (sqlInfo) {
try {
if (sqlInfo.func) {
sqlInfo.func(data.error, data.rows)
}
} catch (error) {
let info = DB.errorInfo(error);
SKLogger.warn(`SQL错误:[${sqlInfo.sql}][${info}]`);
}
}
delete self.sqlPool[id];
});
}
reset() {
this.socket.emit('reg', {
name: GameUtil.serverName,
});
for (let sql_seed_id in this.sqlPool) {
let sqlinfo = this.sqlPool[sql_seed_id];
this.socket.emit('sql', {
id: sql_seed_id,
sql: sqlinfo.sql,
});
}
}
// 查询
query(sql: string, callback: (error: any, rows: any[]) => void) {
SKLogger.info(sql)
if (!this.socket.connect) {
callback(new Error("未连接数据库服务"), null);
return;
}
this.sql_seed++;
if (this.sql_seed > 5000) {
this.sql_seed = 0;
}
this.sqlPool[this.sql_seed] = {
id: this.sql_seed,
sql: sql,
func: callback,
}
this.socket.emit("sql", {
id: this.sql_seed,
sql: sql,
});
}
}