DragonNest/Client/DnLauncher2/Torrent/Source/MakeTorrent/Util.cpp

64 lines
2 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "stdafx.h"
#include "Util.h"
#include "WLibTorrent.h"
void TokenizeW( const std::wstring& str, std::vector<std::wstring>& tokens, const std::wstring& delimiters /* = L" "*/ )
{
// <20><> ù <20><><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
std::wstring::size_type lastPos = str.find_first_not_of( delimiters, 0 );
// <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20>ƴ<EFBFBD> ù <20><><EFBFBD>ڸ<EFBFBD> ã<>´<EFBFBD>
std::wstring::size_type pos = str.find_first_of( delimiters, lastPos );
while( std::wstring::npos != pos || std::wstring::npos != lastPos )
{
// token<65><6E> ã<><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vector<6F><72> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>
tokens.push_back( str.substr( lastPos, pos - lastPos ) );
// <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20>پ<EFBFBD><D9BE>Ѵ´<D1B4>. "not_of"<22><> <20><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>
lastPos = str.find_first_not_of( delimiters, pos );
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD>ڸ<EFBFBD> ã<>´<EFBFBD>
pos = str.find_first_of( delimiters, lastPos );
}
}
BOOL MakeTorrent( LPCWSTR strFullFilePath, LPCWSTR strWebSeeds, LPCWSTR strTrackers )
{
std::wstring strFullFileName = strFullFilePath;
std::wstring strFileName = strFullFileName;
int nSlashIndex = strFileName.rfind( L"\\" );
strFileName.erase( 0, nSlashIndex + 1 );
std::wstring strMakeFileName;
strMakeFileName = strFullFileName + L".torrent";
std::vector<std::wstring> vecWstrWebSeeds;
std::vector<std::wstring> vecWstrTrackers;
std::vector<std::wstring> tokens;
TokenizeW( strWebSeeds, tokens, L";" );
for( int i=0; i<static_cast<int>( tokens.size() ); i++ )
{
std::wstring strWebSeed;
strWebSeed = tokens[i];
nSlashIndex = strWebSeed.rfind( L"/" );
if( nSlashIndex != strWebSeed.length() - 1 )
strWebSeed += L"/";
strWebSeed += strFileName;
vecWstrWebSeeds.push_back( strWebSeed );
}
tokens.clear();
TokenizeW( strTrackers, tokens, L";" );
for( int i=0; i<static_cast<int>( tokens.size() ); i++ )
{
vecWstrTrackers.push_back( tokens[i] );
}
tokens.clear();
BOOL bMake = WLibTorrent::GetInstance()->MakeTorrent( strFullFileName.c_str(), vecWstrWebSeeds, vecWstrTrackers, strMakeFileName.c_str(), L"DN" );
vecWstrWebSeeds.clear();
vecWstrTrackers.clear();
WLibTorrent::DestroyInstance();
return bMake;
}