44 lines
1.7 KiB
JavaScript
44 lines
1.7 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const dhtOnlineBase_js_1 = __importDefault(require("./dhtOnlineBase.js"));
|
|
const dht_flood_1 = __importDefault(require("@lumeweb/dht-flood"));
|
|
const DISCONNECT_SMOOTH = 500;
|
|
class DHTOnline extends dhtOnlineBase_js_1.default {
|
|
flood;
|
|
swarm;
|
|
constructor(swarm, { id = swarm.keyPair.publicKey, data = {}, protocol, ...opts } = {
|
|
protocol: undefined,
|
|
}) {
|
|
super(id, opts);
|
|
this.flood = new dht_flood_1.default({ id, swarm, protocol, ...opts });
|
|
this.swarm = swarm;
|
|
this.flood.on("peer-open", (peer) => this.handlePeerAdd(peer));
|
|
this.flood.on("peer-remove", (peer) => this.handlePeerRemove(peer));
|
|
this.flood.on("message", (message, id) => this.onGetBroadcast(message, id));
|
|
this.swarm.on("connection", (peer) => this.flood.send(peer, Buffer.from("hello"), 0));
|
|
this.data = data;
|
|
[...this.swarm.peers.values()].forEach(this.handlePeerAdd.bind(this));
|
|
}
|
|
handlePeerAdd(peer) {
|
|
const id = peer.remotePublicKey;
|
|
this.onAddPeer(id);
|
|
}
|
|
handlePeerRemove(peer) {
|
|
const id = peer.remotePublicKey;
|
|
// Wait for a bit and check if we're still disconnected before removing the peer
|
|
setTimeout(() => {
|
|
if (this.swarm._allConnections.has(id)) {
|
|
return;
|
|
}
|
|
this.onRemovePeer(id);
|
|
}, DISCONNECT_SMOOTH);
|
|
}
|
|
broadcast(message, ttl) {
|
|
this.flood.broadcast(message, ttl);
|
|
}
|
|
}
|
|
exports.default = DHTOnline;
|