forked from Novage/wt-tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathannounce.ts
More file actions
122 lines (106 loc) · 3.45 KB
/
announce.ts
File metadata and controls
122 lines (106 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/**
* Copyright 2019 Novage LLC.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { FastTracker } from "../../lib/fast-tracker";
import { Tracker } from "../../lib/tracker";
// tslint:disable:no-console
function sendMessage() {}
const peersCount = 100000;
const offersCount = 10;
const peers: any[] = [];
const message = {
action: "announce",
event: "started",
info_hash: "hashhashhashhashhash",
peer_id: "",
offers: new Array<any>(),
numwant: offersCount,
};
for (let i = 0; i < offersCount; i++) {
message.offers.push({
offer: {
sdp: "x",
value: 1,
},
offer_id: "t",
});
}
function addingPeersToSwarm(tracker: Tracker) {
peers.length = 0;
for (let i = 0; i < peersCount; i++) {
peers.push({
sendMessage: sendMessage,
_peerId: i.toPrecision(19),
});
}
console.time(`adding peers to a swarm ${tracker.constructor.name}`);
for (let i = 0; i < peersCount; i++) {
const peer = peers[i];
message.peer_id = peer._peerId;
tracker.processMessage(message, peer);
}
console.timeEnd(`adding peers to a swarm ${tracker.constructor.name}`);
}
// tslint:disable-next-line:cognitive-complexity
function addingPeersToSwarmReference() {
peers.length = 0;
for (let i = 0; i < peersCount; i++) {
peers.push({
id: i.toPrecision(19),
});
}
const swarm = new Map<string, any>();
const peersOrdered: any[] = [];
let counter = 0;
console.time("adding peers to a swarm reference");
for (let p = 0; p < peersCount; p++) {
const peer = peers[p];
swarm.set(peer.id, peer);
peersOrdered.push(peer);
message.peer_id = peer._peerId;
const offers = message.offers;
const countOffersToSend = Math.min(swarm.size - 1, offers.length, 20);
if (countOffersToSend === swarm.size - 1) {
const offersIterator = offers.values();
for (const toPeer of swarm.values()) {
if (toPeer !== peer) {
counter += offersIterator.next().value.offer.value;
}
}
} else {
let peerIndex = Math.floor(Math.random() * swarm.size);
// send offers to random peers
for (let i = 0; i < countOffersToSend; i++) {
const toPeer = peersOrdered[peerIndex];
peerIndex++;
if (peerIndex === swarm.size) {
peerIndex = 0;
}
if (toPeer === peer) {
i--; // do one more iteration
} else {
counter += offers[i].offer.value;
}
}
}
}
console.timeEnd("adding peers to a swarm reference");
console.log(counter);
}
for (let i = 0; i < 10; i++) {
addingPeersToSwarm(new FastTracker({}));
addingPeersToSwarmReference();
console.log("---------");
}