forwarder-node
Version:
121 lines (105 loc) • 3.05 kB
JavaScript
let forwarder = require('./build/bin/forwarder.node');
let fwd = new forwarder.Forwarder();
//fwd.setupLogger();
//fwd.setDebug(true);
//fwd.setLogLevel(1);
console.log("pid", process.pid);
const serverId = 1;
fwd.initServers([{
"id": serverId,
"desc": "client_ws",
"netType": "ws",
"port": 30501,
"peers": 1,
"encrypt": false,
"encryptkey": "1234567812345678",
"base64": false,
"compress": false,
// "address": "121.42.224.141",
"address": "qd2.makebestgame.cn",
timeoutMin: 1 * 60 * 1000,
timeoutMax: 2 * 60 * 1000,
"isClient": true,
"reconnect": true
}]);
// fwd.setServerDebug(serverId, true);
//fwd.setServerDebug(serverId, true);
fwd.setProtocolRule(serverId, 2, "Process");
fwd.reconnect(serverId);
let login = false;
let tested = false;
let token = null;
const dLoginData = {
channel_id: 'test',
uuid: 'A18EF4E7-D920-434A-8BA0-CEBA48542308',
};
const dTestData = {
itemID: 'c9003',
};
function getPacketData(cmd, data) {
data.token = token;
return {
header: {
_cmd: cmd,
},
data,
_cmd: cmd
};
}
function test() {
const cID = 0; // 0: broadcast
const isBroadcast = true;
const isForceRaw = false;
const isBatchMode = false;
let dPacketData = null;
if (!login) {
dPacketData = getPacketData('player.login', dLoginData);
} else if (!tested) {
tested = true;
dPacketData = getPacketData('chest.buy', dTestData);
} else {
process.exit();
}
const data = JSON.stringify(dPacketData);
// data = new Buffer(data);
fwd.forwardText(serverId, 0, data, 0, 0, isBroadcast, isForceRaw, isBatchMode);
// fwd.sendText(serverId, cID, data);
// fwd.sendBinary(serverId, cID, new Buffer(data));
}
function onCmd(dData, dHeader) {
const cmd = dHeader._cmd;
console.log("onCmd", cmd, dData);
if (cmd === "player.login") {
login = true;
token = dData.token;
}
}
setInterval(() => {
do {
fwd.pollOnce(serverId, 5);
const evt = fwd.getCurEvent();
if (evt <= 0) {
break;
}
let sID = fwd.getCurProcessServerID();
let cID = fwd.getCurProcessClientID();
console.log("evt", evt, "sID", sID, "cID", cID);
switch (evt) {
case 1: // connected
setInterval(test, 2000);
//fwd.setTimeout(serverId, 0, 1000, 2000);
//fwd.setPingInterval(serverId, 1000);
break;
case 2: // disconnected
// console.log("stat", fwd.stat());
break;
case 3: // message
let packet = fwd.getCurProcessPacket();
//console.log("header clientID", fwd.getCurHeaderClientID());
//console.log("header ip", fwd.getCurHeaderIP());
packet = JSON.parse(packet);
onCmd(packet.data, packet.header);
break;
}
} while (true);
}, 0.01);