Add bootstrap files

This commit is contained in:
2025-06-10 20:44:24 -07:00
parent d0fd041f7e
commit 234c45059f
7 changed files with 281 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
import { PeerManager } from "../src/PeerManager.ts";
import { generateID } from "IDUtils";
import nodeDataChannel from 'npm:node-datachannel';
import nodeDatachannelPolyfill from 'npm:node-datachannel/polyfill';
nodeDataChannel.initLogger('Info');
// import {RTCPeerConnection} from 'npm:node-datachannel/polyfill';
// deno install --allow-scripts=npm:node-datachannel --entrypoint ddln_bootstrap.ts
// constructor(userID: string, peerID: string, isBootstrapPeer: boolean) {
declare type ID = string;
interface Config {
userID:ID
peerID:ID
}
let configJSON;
let config:Config;
let configFilename = 'ddln_bootstrap_config.json';
try {
configJSON = Deno.readTextFileSync(configFilename);
config = JSON.parse(configJSON) as Config;
console.log("Loaded config file: ", config);
} catch (e) {
console.log("Config file not found, creating...");
const initialConfig = {
userID: generateID(),
peerID: generateID()
};
console.log(initialConfig);
Deno.writeTextFileSync(configFilename, JSON.stringify(initialConfig));
config = initialConfig;
}
// Polyfill RTCPeerConnection and friends
const global = (globalThis as any);
for (const [functionName, func] of Object.entries(nodeDatachannelPolyfill)) {
global[functionName] = func;
}
console.log("ddln bootstrap peer starting...");
// console.log(nodeDatachannelPolyfill);
const isBootstrapPeer = true;
const peerManager = new PeerManager(config.userID, config.peerID, isBootstrapPeer);
peerManager.registerRPC('announceUsers', (sendingPeerID: string, userIDs: string[]) => {
console.log(`Got announceUsers from ${sendingPeerID} ${userIDs}`);
});
peerManager.connect();