Add events to peer manager

This commit is contained in:
2025-04-27 22:38:42 -07:00
parent 63d7b276db
commit 0005f06b2b
3 changed files with 115 additions and 202 deletions

View File

@@ -10,6 +10,13 @@ import { log, logID } from "log";
// Use a broadcast channel to only have one peer manager for multiple tabs,
// then we won't need to have a session ID as all queries for a peerID will be coming from the same peer manager
type PeerID = string;
export enum PeerEventTypes {
PEER_CONNECTED,
PEER_DISCONNECTED,
}
export class PeerManager {
routingTable: Map<string, string>;
@@ -22,7 +29,7 @@ export class PeerManager {
bootstrapPeerConnection: PeerConnection | null = null;
sessionID = generateID();
userID: string;
peerID: string;
peerID: PeerID;
websocket: WebSocket | null = null;
bootstrapPeerID: string | null = null;
@@ -30,6 +37,7 @@ export class PeerManager {
pingPeers: RTCPeerConnection[] = [];
watchdogPeriodSeconds: number = 10;
eventListeners: Map<PeerEventTypes, Function[]> = new Map();
// async watchdog() {
// // Check that we're connected to at least N peers. If not, reconnect to the bootstrap server.
@@ -261,10 +269,35 @@ export class PeerManager {
let peerConnection = new PeerConnection(this, remotePeerID, this.websocketSendPeerMessage.bind(this));
this.peers.set(remotePeerID, peerConnection);
await peerConnection.connect();
this.onPeerConnected(this.peerID);
return peerConnection;
}
onPeerDisconnected(remotePeerID: string) {
onPeerConnected(peerID: PeerID) {
this.dispatchEvent(PeerEventTypes.PEER_CONNECTED, {peerID:peerID});
}
dispatchEvent(event:PeerEventTypes, parameters:any) {
let listeners = this.eventListeners.get(event);
if (!listeners) {
return;
}
for (let listener of listeners) {
listener(parameters);
}
}
addEventListener(eventName:PeerEventTypes, func:Function) {
let listeners = this.eventListeners.get(eventName);
if (!listeners) {
this.eventListeners.set(eventName, [func]);
}
}
onPeerDisconnected(remotePeerID: PeerID) {
let deleted = this.peers.delete(remotePeerID);
if (!deleted) {