84 lines
1.8 KiB
TypeScript
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,
|
|
});
|
|
}
|
|
} |