The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

004-resume.pl - Demonstration of Net::BitTorrent::Torrent's Resume System

Description

This is a basic example of how the Resume System built into Net::BitTorrent::Torrent is to be used.

Synopsis

 004-resume.pl

Lowdown

This section only makes sense when you view the source.

Line 7

Loads our .torrent file and sets the filename for the related resume data.

Line 10

Sets a per-torrent callback which, when triggered, saves our resume data.

Line 12-14

Here, at the end of the process, we store resume data for every torrent in the client. Yes, yes, I know... this little script only loads a single torrent. Consider it a bonus for folks writing your own your own clients. A small and obvious bonus, sure, but a bonus all the same.

This is probably the most important place to save resume data because on restore, the last modified times of each file is compared with the times stored in the resume data. If any of them fail to match, all of the resume data is considered invalid.

Line 20

Let's keep a backup of the original metadata file just in case Net::BitTorrent::Torrent makes a mistake and ruins everything.

Line 22

Writes the new resume data to the file. Now, the next time Net::BitTorrent::Torrent loads this file, it will see the resume data and if it looks okay, your progress will be restored.

Notes

In this script, we store resume data after each piece validates and at the end of the script. In practice, you may want to store this on a more regular basis or on a schedule (every half hour). I do not suggest saving resume data every time a block is written to disk; true, this would keep resume data as up to date as possible, but there are certain internal steps taken while resume data is gathered that would, in the long run, slow everything down to a crawl. For more, see save_resume_data ( ) in Net::BitTorrent::Torrent and the sections 'Resume API' and 'How do I quick Resume a .torrent Session Between Client Sessions?' in Net::BitTorrent::Notes.

Author

Sanko Robinson <sanko@cpan.org> - http://sankorobinson.com/

CPAN ID: SANKO

License and Legal

Copyright (C) 2008 by Sanko Robinson <sanko@cpan.org>

This program is free software; you can redistribute it and/or modify it under the terms of The Artistic License 2.0. See the LICENSE file included with this distribution or http://www.perlfoundation.org/artistic_license_2_0. For clarification, see http://www.perlfoundation.org/artistic_2_0_notes.

When separated from the distribution, all POD documentation is covered by the Creative Commons Attribution-Share Alike 3.0 License. See http://creativecommons.org/licenses/by-sa/3.0/us/legalcode. For clarification, see http://creativecommons.org/licenses/by-sa/3.0/us/.

Neither this module nor the Author is affiliated with BitTorrent, Inc.