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