working on replies
This commit is contained in:
@@ -6,7 +6,6 @@
|
||||
|
||||
import { generateID } from "IDUtils";
|
||||
import { log, logID } from "log";
|
||||
// import { App } from "./App";
|
||||
|
||||
// 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
|
||||
@@ -22,7 +21,6 @@ export class PeerManager {
|
||||
routingTable: Map<string, string>;
|
||||
|
||||
peers: Map<string, PeerConnection>;
|
||||
// private signaler: Signaler;
|
||||
searchQueryFunctions: Map<string, Function> = new Map();
|
||||
RPC_remote: Map<string, Function> = new Map();
|
||||
rpc: { [key: string]: Function } = {};
|
||||
@@ -46,14 +44,6 @@ export class PeerManager {
|
||||
reconnectTimer: number | null = null;
|
||||
peerStateSuperlog: boolean = true;
|
||||
|
||||
// async watchdog() {
|
||||
// // Check that we're connected to at least N peers. If not, reconnect to the bootstrap server.
|
||||
|
||||
// if (this.peers.size === 0) {
|
||||
// await this.sendHello2();
|
||||
// }
|
||||
// }
|
||||
|
||||
animals = ['shrew', 'jerboa', 'lemur', 'weasel', 'possum', 'possum', 'marmoset', 'planigale', 'mole', 'narwhal'];
|
||||
adjectives = ['snazzy', 'whimsical', 'jazzy', 'bonkers', 'wobbly', 'spiffy', 'chirpy', 'zesty', 'bubbly', 'perky', 'sassy'];
|
||||
snakes = ['mamba', 'cobra', 'python', 'viper', 'krait', 'sidewinder', 'constrictor', 'boa', 'asp', 'anaconda', 'krait']
|
||||
@@ -108,6 +98,18 @@ export class PeerManager {
|
||||
}
|
||||
|
||||
|
||||
onPeerMessageFromPeer(remotePeerID: string, messageJSON: any) {
|
||||
let targetPeer = this.peers.get(messageJSON.to);
|
||||
|
||||
if (!targetPeer) {
|
||||
console.log.apply(null, log("[PeerManager] Coulnd't find peer for onPeerMessageFromPeer:", messageJSON.to));
|
||||
return;
|
||||
}
|
||||
|
||||
targetPeer.send(messageJSON);
|
||||
}
|
||||
|
||||
|
||||
onWebsocketMessage(event: MessageEvent) {
|
||||
let messageJSON = event.data;
|
||||
let message: any = null;
|
||||
@@ -149,10 +151,11 @@ export class PeerManager {
|
||||
if (!peerConnection) {
|
||||
let remotePeerID = message.from;
|
||||
let newPeer = new PeerConnection(this, remotePeerID, this.websocketSendPeerMessage.bind(this));
|
||||
if (this._isBootstrapPeer) {
|
||||
newPeer.setPolite(false);
|
||||
}
|
||||
|
||||
newPeer.setPoliteFromID(remotePeerID, true);
|
||||
|
||||
peerConnection = newPeer;
|
||||
|
||||
this.peers.set(newPeer.remotePeerID, newPeer);
|
||||
|
||||
this.onConnectRequest(newPeer);
|
||||
@@ -580,6 +583,12 @@ class PeerConnection {
|
||||
this.polite = polite;
|
||||
}
|
||||
|
||||
setPoliteFromID(peerID: PeerID, remote = false) {
|
||||
let polite = (parseInt(peerID.charAt(peerID.length-1), 16) % 2 == 0) && !remote;
|
||||
|
||||
this.setPolite(polite);
|
||||
}
|
||||
|
||||
setupDataChannel() {
|
||||
if (!this.dataChannel) {
|
||||
throw new Error();
|
||||
@@ -713,6 +722,7 @@ class PeerConnection {
|
||||
|
||||
try {
|
||||
this.makingOffer = true;
|
||||
this.setPoliteFromID(this.peerManager.peerID);
|
||||
await this.rtcPeer.setLocalDescription();
|
||||
|
||||
if (!this.rtcPeer.localDescription) {
|
||||
@@ -801,12 +811,6 @@ class PeerConnection {
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
// };
|
||||
// */
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
@@ -884,15 +888,12 @@ class PeerConnection {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
call(functionName: string, args: any) {
|
||||
let transactionID = generateID(); // make this faster as we will only ever have a small number of in-flight queries on a peer
|
||||
// Think about a timeout here to auto reject it after a while.
|
||||
let promise = new Promise((resolve, reject) => {
|
||||
this.pendingRPCs.set(transactionID, { resolve, reject, functionName });
|
||||
setTimeout(() => reject(`function:${functionName}[${transactionID}] failed to resolve after 10 seconds.`), 10_000);
|
||||
let timeoutSeconds = 10;
|
||||
setTimeout(() => reject(`function:${functionName}[${transactionID}] failed to resolve after ${timeoutSeconds} seconds.`), timeoutSeconds * 1000);
|
||||
});
|
||||
|
||||
let message = {
|
||||
|
||||
Reference in New Issue
Block a user