อ่าน, ทำและแฮชตรวจสอบ torrents ด้วย node.js!
const nt = require ( 'nt' ) ;
nt . read ( 'path/to/file.torrent' , ( err , torrent ) => {
if ( err ) throw err ;
console . log ( 'Info hash:' , torrent . infoHash ( ) ) ;
} ) ;
let rs = nt . make ( 'http://myannounce.net/url' , __dirname + '/files' ) ;
rs . pipe ( fs . createWriteStream ( 'mytorrent.torrent' ) ) ;
// callback style
nt . makeWrite ( 'outputfile' , 'http://announce.me' , __dirname + '/files' ,
[ 'somefile.ext' , 'another.one' , 'inside/afolder.mkv' , 'afolder' ] ,
( err , torrent ) => {
if ( err ) throw err ;
console . log ( 'Finished writing torrent!' ) ;
} ) ;
let hasher = torrent . hashCheck ( file ) ;
let p ;
hasher . on ( 'match' , ( i , hash , percent ) => {
p = percent ;
} ) ;
hasher . on ( 'end' , ( ) => {
console . log ( 'Hash Check:' , p + '%' , 'matched' ) ;
} ) ;
อ่านไฟล์ท้องถิ่นหรือสตรีมที่อ่านได้ ส่งคืนสตรีมที่อ่านได้
สามารถส่งคืนข้อผิดพลาดได้หากมีการจัดรูปแบบ torrent อย่างไม่ถูกต้อง ไม่ได้ตรวจสอบว่า dictonaries มีการระบุตัวอักษรหรือไม่ อ้างถึงข้อกำหนด BitTorrent สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Torrent Metainfo
ทำให้เกิดฝนตกหนักใหม่ dir
เป็นไดเรกทอรีรากของฝนตกหนัก อาร์เรย์ files
จะอ่านไฟล์จากที่นั่น หากมีการละเว้นไฟล์จะเพิ่มไฟล์ทั้งหมดใน dir
ให้กับ Torrent โดยปริยายรวมถึงไฟล์ในไดเรกทอรีย่อย options
สามารถมีดังต่อไปนี้:
announceList
- อาร์เรย์ของ URL ประกาศเพิ่มเติมcomment
name
- สามารถใช้ได้เฉพาะในโหมดหลายไฟล์ หากไม่ได้รับค่าเริ่มต้นเป็นชื่อของไดเรกทอรีpieceLength
- วิธีการแยกชิ้นส่วน ต้องเป็นจำนวนเต็ม n
ที่ระบุว่าความยาวชิ้นจะเป็น 2^n
ค่าเริ่มต้นคือ 256kB หรือ 2^18private
- ตั้งค่าจริงถ้านี่เป็นฝนตกหนักส่วนตัวmoreInfo
- สิ่งเหล่านี้เข้าสู่พจนานุกรม info
ของ Torrent มีประโยชน์หากคุณต้องการสร้าง Torrent มีแฮชข้อมูลที่ไม่ซ้ำกันจากตัวติดตามที่แน่นอนmaxFiles
- ไฟล์สูงสุดที่จะเปิดในระหว่างการแฮชชิ้น ค่าเริ่มต้นถึง 250 callback
ถูกเรียกด้วย Error
ที่เป็นไปได้และวัตถุ Torrent
เมื่อแฮ็กเสร็จสิ้น
make
ส่งคืนวัตถุแฮชเชอร์ที่ปล่อยเหตุการณ์ data
แบบ bencoded ดิบ
ทางลัดที่ปั๊มสตรีมที่อ่านได้จาก make
ไปยังสตรีมที่เขียนได้ซึ่งชี้ไปที่ output
ไฟล์ ส่งคืนวัตถุแฮชเชอร์
ฟังก์ชั่น read
และ make
การโทรกลับทั้งหมดด้วยวัตถุฝนตกหนัก
มีข้อมูลเมตาของฝนตกหนัก ตัวอย่าง:
{
announce : 'udp://tracker.publicbt.com:80' ,
'announce-list' : [
[ 'udp://tracker.publicbt.com:80' ] ,
[ 'udp://tracker.ccc.de:80' ] ,
[ 'udp://tracker.openbittorrent.com:80' ] ,
[ 'http://tracker.thepiratebay.org/announce' ]
] ,
comment : 'Torrent downloaded from http://thepiratebay.org' ,
'creation date' : 1303979726 ,
info : { length : 718583808 ,
name : 'ubuntu-11.04-desktop-i386.iso' ,
'piece length' : 524288 ,
pieces : < Buffer e5 7 a . . . >
}
}
รับแฮชข้อมูลของ Torrent
สร้าง readableStream ที่ปล่อยข้อมูล bencoded ดิบสำหรับฝนตกหนักนี้ ส่งคืนสตรีมที่อ่านได้
ทางลัดที่ส่งกระแสสตรีมจาก Torrent#createReadStream()
ไปยังสตรีมไฟล์ที่เขียนได้ ส่งคืนสตรีมที่เขียนได้
แฮชตรวจสอบฝนตกหนักกับไฟล์ใน dir
ส่งคืนวัตถุแฮชเชอร์ options
แฮชสามารถมี maxFiles
ที่จะเปิดในระหว่างการแฮช ค่าเริ่มต้นถึง 250
ส่งคืนวัตถุแฮชเชอร์
วัตถุแฮชเชอร์จะถูกส่งคืนเมื่อมีการสร้าง torrent ด้วย make
และเมื่อเรียกว่า Torrent#hashCheck
มันสืบทอดมาจาก ReadableStream
หยุดการตรวจสอบแฮชชั่วคราว
ดำเนินการตรวจสอบแฮชต่อ
แฮชต่อไปหากหยุดหรือหยุดชั่วคราวหากไม่
หยุดแฮชอย่างสมบูรณ์ ปิดตัวอธิบายไฟล์และไม่ปล่อยเหตุการณ์อีกต่อไป
เสร็จสิ้นการตรวจสอบไฟล์ที่จะถูกแฮชและพร้อมที่จะเริ่มการแฮชเนื้อหาของพวกเขา
Buffer
- ข้อมูล ปล่อยข้อมูลฝนตกหนักแบบดิบเมื่อแฮชเชอร์ถูกส่งคืนจากฟังก์ชั่น make
number
- เปอร์เซ็นต์number
- ความเร็วnumber
- avgseed ปล่อยความคืบหน้าที่คำนวณโดยจำนวนไบต์ที่อ่านจากไฟล์ speed
และ avgSpeed
อยู่ในไบต์
number
- ดัชนีstring
- แฮชstring
- ไฟล์number
- ตำแหน่งnumber
- ความยาวปล่อยออกมาเมื่อชิ้นส่วนถูกแฮชพร้อมกับตำแหน่งแฮชและแหล่งที่มา
number
- ดัชนีstring
- แฮชnumber
- เปอร์เซ็นต์ที่จับคู่string
- ไฟล์number
- ตำแหน่งnumber
- ความยาว ปล่อยออกมาเมื่อชิ้นส่วนจับคู่กับ index
ชิ้นส่วนและเปอร์เซ็นต์ของชิ้นส่วนที่ตรงกันจนถึงตอนนี้
number
- ดัชนีstring
- ไฟล์number
- ตำแหน่งnumber
- ความยาวปล่อยออกมาเมื่อชิ้นส่วนไม่ตรงกัน
Error
- เอ่อข้อผิดพลาดการตรวจสอบแฮช
การตรวจสอบแฮชเสร็จสิ้นแล้ว
npm install nt
การทดสอบเขียนด้วยคำสาบาน
npm test