UNPKG

andrade-soulseek-downloader

Version:

Simple, safe Soulseek download library with built-in rate limiting to prevent bans

73 lines 2.89 kB
"use strict"; 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