From bd85e5cdb4e229d261ba52406a2fce7d0215315f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 28 May 2022 10:06:10 +0800 Subject: [PATCH] 1 --- server/httpgate/server/controllers/gm.js | 50 ++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/server/httpgate/server/controllers/gm.js b/server/httpgate/server/controllers/gm.js index f2c274e..df47689 100644 --- a/server/httpgate/server/controllers/gm.js +++ b/server/httpgate/server/controllers/gm.js @@ -6,30 +6,72 @@ const cmdHash = {}; let seqId = 0; let conn = null; +let seqHash = {}; + +async function parsePackage(socket, data) { + const msg = utils.jsonDecode(data); + const context = seqHash[msg['seqId']]; + context['endTick'] = utils.getTickCount(); + console.log(context['endTick'] - context['beginTick']); + context['session'].rspData(msg['data']); +} async function test(session, params) { + const currSeqId = ++seqId; const msg = { - 'url': 'https://game2006api-z1-test.cebg.games/webapp/index.php', + 'url': 'https://login-z1-test.cebg.games/webapp/index.php', 'params': { 'c': 'Ops', 'a': 'selfChecking' }, - 'seqId': ++seqId, + 'seqId': currSeqId, 'payload': '' }; + seqHash[currSeqId] = { + 'seqId': currSeqId, + 'beginTick': utils.getTickCount(), + 'endTick': 0, + 'msg': msg, + 'session': session + }; const msgText = utils.jsonEncode(msg); const text = '#' + utils.pad(msgText.length, 7) + msgText; if (!conn) { - conn = await ws.connect('ws://127.0.0.1:8381'); + conn = await ws.connect('ws://relation-z1-test.cebg.games/httpgate/websocket'); conn.on('connect', () => { console.log('connect'); conn.sendText(text); }); + + let data = ''; + conn.on('text', (str) => { + //console.log(str); + data += str; + //#0000000 + while (data.length >= 8) { + if (data[0] != '#') { + conn.close('error package'); + break; + } + const pkgLen = parseInt(data.slice(1, 8), 10); + if (isNaN(pkgLen)) { + conn.close('error pkgLen'); + break; + } + //console.log(data, pkgLen, data.slice(1,8)); + if (data.length >= 8 + pkgLen) { + parsePackage(conn, data.slice(8, 8 + pkgLen)); + data = data.slice(8 + pkgLen); + console.log(data); + } + } + }); + } if (conn.readyState == conn.OPEN) { conn.sendText(text); } - session.rspOk(); + //session.rspOk(); } async function execCmd(session) {