This repository has been archived on 2023-11-14. You can view files and clone it, but cannot push or open issues/pull-requests.
valnet/relay/index.js

78 lines
1.6 KiB
JavaScript

(async () => {
const { title } = require('../lib/title');
const net = require('net');
const log = require('signale').scope('relay');
const { config } = require('../package.json');
const { Identity } = require('../lib/Identity');
const stp = require('../lib/STP');
title('relay', false);
const identity = await new Identity('relay', 'default');
const clients = [];
// ==================================== [STP CLIENT]
let client = null;
(function tryConnect() {
client = stp.connect(identity, config.ports.relay, config.addresses.relay);
client.on('ready', () => {
log.success(`connected to ${config.addresses.relay}`);
})
client.on('error', () => {
log.error(`connection error on ${config.addresses.relay}`)
client = null;
setTimeout(tryConnect, 1000);
});
client.on('data', (data) => {
log.debug(data.toString());
})
})();
// ==================================== [STP SERVER]
const server = stp.createServer(identity, (client) => {
log.info(`incomming connection from ${client.remoteAddress}
${client.remoteIdentity}`);
clients.push(client);
client.on('close', pruneClients);
});
server.listen(config.ports.relay);
log.success(`STP server listening on ${config.ports.relay}`);
function pruneClients() {
clients = clients.filter(client => client.open);
}
// ==================================== [EXPRESS]
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.end(`
<table style="width: 100%">
${clients.map(client => `
<tr>
<td><pre>${client.remoteAddress}</pre></td>
<td><pre>${client.remoteIdentity}</pre></td>
</tr>
`)}
</table>
`);
})
app.listen(9999);
})();