1
0
mirror of synced 2025-02-21 17:39:29 +01:00
shadowtenpo/index.js
2022-02-21 16:31:55 -08:00

61 lines
1.5 KiB
JavaScript

const cfg = require('./config');
const fs = require('fs');
const CCRelay = require('./ccrelay');
const CCHub = require('./cchub');
var hub = new CCHub('ws://' + cfg.server + ':' + cfg.server_port);
var relays = {};
var suffix = 0;
var subnet = "";
hub.ready.then(() => {
console.log('Connecting to CCM Hub ' + cfg.server + '...');
hub.hello(cfg.login || {});
});
hub.onPartyJoin = function(mysubnet, mysuffix) {
suffix = mysuffix;
subnet = mysubnet;
console.log('Join successful. Game IP should be ' + subnet+suffix);
console.log('Please wait until all match members have joined before starting game');
if (cfg.write_override_ini) {
var override =
'[netenv]\n' +
'enable=1\n' +
'forcebind=1\n' +
'addrSuffix=' + suffix + '\n' +
'[keychip]\n' +
'subnet=' + subnet + '0\n';
fs.writeFileSync(cfg.write_override_ini, override);
}
}
hub.onPartyUpdate = function(members) {
members.forEach(dst => {
console.log(subnet+dst + ' joined virtual party.');
var relay = new CCRelay(subnet+dst);
relay.bindUDP(50200);
relay.listenTCP(50200);
relay.onReceive = function(sport, dport, type, msg) {
hub.sendNetForward(suffix, dst, sport, dport, type, msg);
}
relays[dst] = relay;
});
}
hub.onNetForward = function(src, dst, sport, dport, type, msg) {
var relay = relays[src];
if (!relay) {
console.warn('Received fwd from unknown host ' + src);
return;
}
if (type == 'tcp') {
relay.sendTCP(subnet+dst, sport, dport, msg)
} else if (type == 'udp') {
relay.sendUDP(subnet+dst, sport, dport, msg);
}
};