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, }); } }