*Send all items to the peer we bootstrapped from if we have their connection
*Send all items to the peer we connect to in addPeerHandler only if we are already bootstrapped *Extract item creation into private helpers
This commit is contained in:
parent
0603c456ae
commit
76755b4644
34
src/index.ts
34
src/index.ts
|
@ -113,11 +113,7 @@ export default class DHTCache extends EventEmitter {
|
||||||
this._addEntityConnection(this.id, item);
|
this._addEntityConnection(this.id, item);
|
||||||
|
|
||||||
const broadcast = () => {
|
const broadcast = () => {
|
||||||
this._broadcastMessage({
|
this._broadcastMessage(this._createAddItemRequest(item));
|
||||||
type: Type.ADD_ITEM,
|
|
||||||
data: b4a.from(item as string, "hex"),
|
|
||||||
signature: this._signItem(item),
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!this.bootstrapped) {
|
if (!this.bootstrapped) {
|
||||||
|
@ -201,6 +197,7 @@ export default class DHTCache extends EventEmitter {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.bootstrapped) {
|
if (this.bootstrapped) {
|
||||||
|
this._sendItemsToPeer(peer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,6 +313,11 @@ export default class DHTCache extends EventEmitter {
|
||||||
} else if (type === Type.BOOTSTRAP_RESPONSE) {
|
} else if (type === Type.BOOTSTRAP_RESPONSE) {
|
||||||
const { bootstrap } = decoded;
|
const { bootstrap } = decoded;
|
||||||
this._bootstrapFrom(bootstrap);
|
this._bootstrapFrom(bootstrap);
|
||||||
|
|
||||||
|
if (this.swarm._allConnections.has(id)) {
|
||||||
|
this._sendItemsToPeer(this.swarm._allConnections.get(id));
|
||||||
|
}
|
||||||
|
|
||||||
this.log.debug(`Bootstrap response received`);
|
this.log.debug(`Bootstrap response received`);
|
||||||
} else if (type === Type.HEARTBEAT) {
|
} else if (type === Type.HEARTBEAT) {
|
||||||
const { id: toId, signature, data: bufData } = decoded;
|
const { id: toId, signature, data: bufData } = decoded;
|
||||||
|
@ -590,4 +592,26 @@ export default class DHTCache extends EventEmitter {
|
||||||
this.send(peer, b4a.from("hello"));
|
this.send(peer, b4a.from("hello"));
|
||||||
this.swarm.leavePeer(peer.remotePublicKey);
|
this.swarm.leavePeer(peer.remotePublicKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _sendItemsToPeer(peer: any) {
|
||||||
|
for (let item of this.cache) {
|
||||||
|
item = this._maybeHexify(item);
|
||||||
|
this.send(peer, this._createAddItemRequestMessage(item));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private _createAddItemRequestMessage(item: string | Buffer): Uint8Array {
|
||||||
|
item = this._maybeHexify(item);
|
||||||
|
return Message.toBinary(Message.create(this._createAddItemRequest(item)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private _createAddItemRequest(
|
||||||
|
item: string | Buffer
|
||||||
|
): PartialMessage<Message> {
|
||||||
|
return {
|
||||||
|
type: Type.ADD_ITEM,
|
||||||
|
data: b4a.from(item as string, "hex"),
|
||||||
|
signature: this._signItem(item),
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue