Add events to peer manager
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user