andrade-soulseek-downloader
Version:
Simple, safe Soulseek download library with built-in rate limiting to prevent bans
73 lines • 2.89 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DistributedPeer = void 0;
const peer_1 = require("./peer");
const messages_1 = require("../messages");
const message_factory_1 = require("../message-factory");
const stack_1 = __importDefault(require("../stack"));
const debug = (msg) => {
if (process.env.DEBUG?.includes('slsk:peer:distributed')) {
console.log(`[slsk:peer:distributed] ${msg}`);
}
};
class DistributedPeer extends peer_1.Peer {
constructor(socket, peer) {
super(socket, peer);
this.conn.on('connect', () => {
if (peer.token) {
this.conn.write(message_factory_1.MessageFactory
.to.peer
.peerInit(peer.user, peer.type, peer.token)
.getBuff());
const buf = Buffer.from('05000000' + '00' + peer.token, 'hex');
this.conn.write(buf);
}
});
const msgs = new messages_1.Messages();
this.conn.on('data', data => {
msgs.write(data);
});
msgs.on('message', (msg) => {
const size = msg.int32();
if (size <= 4)
return;
const code = msg.int8();
switch (code) {
case 3: {
msg.int32();
const user = msg.str();
const ticket = msg.rawHexStr(4);
const query = msg.str();
const searchKey = `${user}_${ticket}_${query}`;
if (!stack_1.default.peerSearchRequests) {
stack_1.default.peerSearchRequests = [];
}
if (stack_1.default.peerSearchRequests.indexOf(searchKey) === -1) {
stack_1.default.peerSearchRequests.push(searchKey);
debug(`${peer.user} Search Request from ${user}, ticket ${ticket}. query: ${query}`);
this.emit('search', { user, ticket, query });
}
break;
}
case 4: {
const branchLevel = msg.int32();
debug(`${peer.user} Branch Level ${branchLevel}`);
break;
}
case 5: {
const branchRoot = msg.str();
debug(`${peer.user} Branch Root ${branchRoot}`);
break;
}
default: {
debug(`${peer.user} unknown distributed message code ${code}`);
}
}
});
}
}
exports.DistributedPeer = DistributedPeer;
//# sourceMappingURL=distributed-peer.js.map