2014-10-28 1 views
1

현재 CLI Libtorrent 래퍼 인 Ragnar으로 작업하고 있습니다.개인 토런트를 Libtorrent save_state()로 저장 하시겠습니까?

나는 벽돌 벽에 부딪쳤다. 아마도 내가 사용하고있는 래퍼의 구현 결함이거나 Libtorrent API 설명서를 잘못 이해 한 것일 수 있지만 현재 세션 상태 데이터를 올바르게 저장 /로드하는 방법을 알 수는 없습니다.

내 현재 목표는 모두 torrent_handles을 현재 세션에 저장하므로 내가 다음 토렌트 클라이언트를 실행할 때 시작할 때 자동으로로드하고 다운로드/씨 뿌리기.

세션 상태를 저장하여이 작업을 수행해야하는지 확실하지 않습니다. API documentation's 문법에 따라 :

save_state에 전달 된 플래그 인수를 사용하여 저장할 세션 상태 부분을 필터링 할 수 있습니다. 기본적으로 모든 상태가 저장됩니다 (개별 급류 제외).

하지만 individual torrents에 관한 더 플래그 볼 수 있습니다 :

enum save_state_flags_t 
{ 
     save_settings =  0x001, 
     save_dht_settings = 0x002, 
     save_dht_state = 0x004, 
     save_proxy =  0x008, 
     save_i2p_proxy = 0x010, 
     save_encryption_settings = 0x020, 
     save_as_map =  0x040, 
     save_feeds =  0x080 
}; 

또한, 래퍼는 현재 하드에 동의하지로 코딩 이러한 플래그 :

cli::array<byte>^ Session::SaveState() 
{ 
    libtorrent::entry entry; 
    this->_session->save_state(entry); 

    return Utils::GetByteArrayFromLibtorrentEntry(entry); 
} 

것은이 쉽게되어야한다 고침,하지만 뭔가 빠졌어? 잘못된 메커니즘을 통해 저장하려고합니까?

답변

4

토런트 목록을 저장하는 메커니즘은 libtorrent에서 제공하지 않습니다. 당신 (클라이언트)이 .torrent 파일을 디스크에 저장하고 (다시 불변이므로), 다시 시작할 때 가장 먼저 할 일을 다시 추가 할 것을 기대합니다.

자석 링크를 추가하는 경우를 제외하고는 torrent_handle을 실제 .torrent 파일로 변환 할 수 있어야합니다.

boost::intrusive_ptr<torrent_info const> ti = h.torrent_file(); 
create_torrent new_torrent(*ti); 
std::vector<char> out; 
bencode(std::back_inserter(out), new_torrent.generate()); 
save_file("mytorrent.torrent", out); 

그러나, 아마도 더 나은 옵션이 재개 데이터의 일부로서 토런트 파일 (또는 정보-DICT)를 저장하는 것입니다 : 여기에 있다고 할 수있는 단편이다. save_resume_data()을 호출 할 때 save_info_dict 플래그를 전달하면 토런트를 다시 시작하는 데 필요한 모든 것이 이력서 데이터에 포함됩니다. 즉, 토런트 파일의 실제 사본은 이력서 파일 내에 저장 될 것이다.

libtorrent와 함께 제공되는 예제는 .torrent 파일을 디렉토리에 보관하고 시작시 (그리고 정기적으로) 디렉토리를 스캔하므로 파일 시스템에 토렌트 목록이 저장됩니다. 보다 효율적인 방법은 실제 .torrent 파일을 이력서 데이터와 함께 데이터베이스 (예 : sqlite)에 저장하는 것입니다.

다음은 sqlite 데이터베이스 내에 .torrent 파일과 함께 번들로 제공되는 이력서 데이터를 저장하는 예입니다. 그들 모두를로드 할 때 데이터베이스를보다 효율적으로 시작,있게 save_resume.hpp

save_resume.cpp . 토런트와 함께 이력서 데이터를 묶어두면 토런트 당 하나의 디스크 찾기가 저장됩니다.