61 lines
1.5 KiB
JavaScript
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);
|
|
}
|
|
};
|