Changeset 474


Ignore:
Timestamp:
06/02/08 17:02:22 (12 years ago)
Author:
Eoin
Message:

Fixes to shutdown code.

Files:
10 edited

Legend:

Unmodified
Added
Removed
  • branch_0_3_1/sln/Halite/Halite.vcproj

    r455 r474  
    548548                        </File> 
    549549                        <File 
    550                                 RelativePath="..\..\src\HaliteWindow.cpp" 
    551                                 > 
    552                         </File> 
    553                         <File 
    554550                                RelativePath="..\..\src\halTorrent.cpp" 
    555551                                > 
     
    983979                        <File 
    984980                                RelativePath="..\..\src\HaliteUpdateLock.hpp" 
     981                                > 
     982                        </File> 
     983                        <File 
     984                                RelativePath="..\..\src\HaliteWindow.cpp" 
    985985                                > 
    986986                        </File> 
  • branch_0_3_1/src/HaliteWindow.cpp

    r460 r474  
    402402{ 
    403403        hal::bittorrent().closeAll(0); 
     404 
     405        hal::bittorrent().stopEventReceiver(); 
     406        Sleep(200); 
     407 
    404408        hal::bittorrent().shutDownSession(); 
    405409} 
     
    418422        halite().save(); 
    419423        hal::ini().save_data(); 
    420  
    421         hal::bittorrent().stopEventReceiver(); 
    422424         
    423425        if (halite().showMessage()) 
     
    434436                thread shutdown(bind(& HaliteWindow::ShutdownThread, this)); 
    435437                shutdown.join(); 
    436         }                
     438        } 
     439 
     440        hal::config().save(); 
     441        save(); 
     442        halite().save(); 
     443        hal::ini().save_data(); 
    437444                 
    438445        HAL_DEV_MSG(L"Posting Quit Message"); 
  • branch_0_3_1/src/SplashDialog.hpp

    r459 r474  
    9393        void OnForceClose(UINT, int, HWND hWnd) 
    9494        { 
     95                thread_ptr.reset(); 
     96                Sleep(200); 
     97 
    9598                GetWindowRect(rect_); 
    9699                Save(); 
  • branch_0_3_1/src/halTorrent.cpp

    r461 r474  
    278278        ~bit_impl() 
    279279        { 
    280                 keepChecking_ = false; 
    281                  
    282                 saveTorrentData(); 
     280                stopAlertHandler(); 
     281                 
     282                //saveTorrentData(); 
    283283                 
    284284                try 
     
    315315        }  
    316316        signals; 
     317 
     318        void stopAlertHandler() 
     319        { 
     320                mutex_t::scoped_lock l(mutex_); 
     321 
     322                keepChecking_ = false; 
     323        } 
    317324                 
    318325        void alertHandler() 
    319326        { 
     327                mutex_t::scoped_lock l(mutex_); 
     328 
    320329                if (keepChecking_) 
    321330                { 
     
    578587         
    579588        void saveTorrentData() 
    580         {       try 
     589        {        
     590                mutex_t::scoped_lock l(mutex_); 
     591                try 
    581592                { 
    582593                 
     
    779790        void removalThread(torrent_internal_ptr pIT, bool wipeFiles); 
    780791         
    781         libt::session theSession; 
     792        libt::session theSession;        
     793        mutable mutex_t mutex_; 
     794 
    782795        asio::io_service io_; 
    783796        asio::deadline_timer timer_; 
     
    14651478} 
    14661479 
    1467 void add_files(libt::torrent_info& t, fs::path const& p, fs::path const& l) 
    1468 { 
    1469 /*      fs::path f(p / l); 
    1470         if (fs::is_directory(f)) 
    1471         { 
    1472                 for (fs::directory_iterator i(f), end; i != end; ++i) 
    1473                         add_files(t, p, l / i->leaf()); 
    1474         } 
    1475         else 
    1476         { 
    1477         //      std::cerr << "adding \"" << l.string() << "\"\n"; 
    1478                 libt::file fi(f, libt::file::in); 
    1479                 fi.seek(0, libt::file::end); 
    1480                 libtorrent::size_type size = fi.tell(); 
    1481                 t.add_file(l, size); 
    1482         } 
    1483 */ 
    1484 } 
    1485  
    1486 void bit::newTorrent(wpath filename, wpath files) 
    1487 { 
    1488 /*      try 
    1489         { 
    1490          
    1491         libtorrent::torrent_info t; 
    1492         path full_path = pimpl->workingDirectory/"incoming"/files.leaf(); 
    1493          
    1494         ofstream out(filename, std::ios_base::binary); 
    1495          
    1496         int piece_size = 256 * 1024; 
    1497         char const* creator_str = "Halite v0.3 (libtorrent v0.11)"; 
    1498  
    1499         add_files(t, full_path.branch_path(), full_path.leaf()); 
    1500         t.set_piece_size(piece_size); 
    1501  
    1502         libt::storage st(t, full_path.branch_path()); 
    1503         t.add_tracker("http://www.nitcom.com.au/announce.php"); 
    1504         t.set_priv(false); 
    1505         t.add_node(make_pair("192.168.11.12", 6881)); 
    1506  
    1507         // calculate the hash for all pieces 
    1508         int num = t.num_pieces(); 
    1509         std::vector<char> buf(piece_size); 
    1510         for (int i = 0; i < num; ++i) 
    1511         { 
    1512                         st.read(&buf[0], i, 0, t.piece_size(i)); 
    1513                         libtorrent::hasher h(&buf[0], t.piece_size(i)); 
    1514                         t.set_hash(i, h.final()); 
    1515                 //      std::cerr << (i+1) << "/" << num << "\r"; 
    1516         } 
    1517  
    1518         t.set_creator(creator_str); 
    1519  
    1520         // create the torrent and print it to out 
    1521         libt::entry e = t.create_torrent(); 
    1522         libt::bencode(std::ostream_iterator<char>(out), e); 
    1523         } 
    1524         catch (std::exception& e) 
    1525         { 
    1526                 ::MessageBoxA(0, e.what(), "Create Torrent exception.", 0); 
    1527         } 
    1528 */ 
    1529 } 
    1530  
    15311480const TorrentDetails& bit::torrentDetails() 
    15321481{ 
     
    16251574void bit::closeAll(boost::optional<report_num_active> fn) 
    16261575{ 
    1627         try { 
    1628          
     1576        try  
     1577        {        
     1578        event().post(shared_ptr<EventDetail>(new EventInfo(L"Saving torrent data..."))); 
     1579 
     1580        pimpl->saveTorrentData(); 
     1581 
    16291582        event().post(shared_ptr<EventDetail>(new EventInfo(L"Stopping all torrents..."))); 
    16301583         
     
    16321585                i != e; ++i) 
    16331586        { 
    1634                 if ((*i).torrent->in_session()) 
    1635                 { 
    1636                 //      HAL_DEV_MSG(wformat(L"Internalling pausing writeData=%1%") % writeData); 
    1637                         (*i).torrent->handle().pause(); // Internal pause, not registered in Torrents.xml 
    1638                 } 
     1587                (*i).torrent->stop(); 
    16391588        } 
    16401589         
     
    16471596                                i != e; ++i) 
    16481597                { 
    1649                         // NB. this checks for an internal paused state. 
    1650                         if ((*i).torrent->in_session() && !(*i).torrent->handle().is_paused()) 
     1598                        if ((*i).torrent->state() != TorrentDetail::torrent_stopped) 
    16511599                                ++num_active; 
    16521600                } 
     
    16581606        } 
    16591607         
    1660         event().post(shared_ptr<EventDetail>(new EventInfo(L"All torrents stopped."))); 
    1661                  
    1662         for (TorrentManager::torrentByName::iterator i=pimpl->theTorrents.begin(), e=pimpl->theTorrents.end();  
    1663                 i != e; ++i) 
    1664         { 
    1665                 if ((*i).torrent->in_session()) 
    1666                         (*i).torrent->remove_from_session(true); 
    1667         } 
    1668          
     1608        event().post(shared_ptr<EventDetail>(new EventInfo(L"All torrents stopped.")));          
    16691609        event().post(shared_ptr<EventDetail>(new EventInfo(L"Fast-resume data written."))); 
    16701610         
     
    18471787        } HAL_GENERIC_TORRENT_EXCEPTION_CATCH(filename, "reannounceTorrent") 
    18481788} 
    1849 /* 
    1850 void bit::setTorrentLogin(const std::string& filename, std::wstring username, std::wstring password) 
    1851 { 
    1852         setTorrentLogin(hal::to_wstr_shim(filename), username, password); 
    1853 } 
    1854  
    1855 void bit::setTorrentLogin(const std::wstring& filename, std::wstring username, std::wstring password) 
    1856 { 
    1857         try { 
    1858          
    1859         pimpl->theTorrents.get(filename)->setTrackerLogin(username, password); 
    1860          
    1861         } HAL_GENERIC_TORRENT_EXCEPTION_CATCH(filename, "setTorrentLogin") 
    1862 } 
    1863  
    1864 std::pair<std::wstring, std::wstring> bit::getTorrentLogin(const std::string& filename) 
    1865 { 
    1866         return getTorrentLogin(hal::to_wstr_shim(filename)); 
    1867 } 
    1868  
    1869 std::pair<std::wstring, std::wstring> bit::getTorrentLogin(const std::wstring& filename) 
    1870 { 
    1871         try { 
    1872          
    1873         return pimpl->theTorrents.get(filename)->getTrackerLogin(); 
    1874          
    1875         } HAL_GENERIC_TORRENT_EXCEPTION_CATCH(filename, "getTorrentLogin") 
    1876          
    1877         return std::make_pair(L"", L""); 
    1878 } 
    1879 */ 
     1789 
    18801790void bit_impl::removalThread(torrent_internal_ptr pIT, bool wipeFiles) 
    18811791{ 
     
    22332143void bit::stopEventReceiver() 
    22342144{ 
    2235         pimpl->keepChecking_ = false; 
     2145        event().post(shared_ptr<EventDetail>(new EventMsg(L"Stopping event Handler."))); 
     2146 
     2147        pimpl->stopAlertHandler(); 
    22362148} 
    22372149 
  • branch_0_3_1/src/halTorrent.hpp

    r461 r474  
    608608 
    609609        void setTorrentDefaults(int maxConn, int maxUpload, float download, float upload);       
    610         void newTorrent(boost::filesystem::wpath filename, boost::filesystem::wpath files); 
    611610        void addTorrent(boost::filesystem::wpath file, boost::filesystem::wpath saveDirectory,  
    612611                bool startPaused=false, bool compactStorage=false,  
  • trunk/sln/Halite/Halite.vcproj

    r455 r474  
    548548                        </File> 
    549549                        <File 
    550                                 RelativePath="..\..\src\HaliteWindow.cpp" 
    551                                 > 
    552                         </File> 
    553                         <File 
    554550                                RelativePath="..\..\src\halTorrent.cpp" 
    555551                                > 
     
    983979                        <File 
    984980                                RelativePath="..\..\src\HaliteUpdateLock.hpp" 
     981                                > 
     982                        </File> 
     983                        <File 
     984                                RelativePath="..\..\src\HaliteWindow.cpp" 
    985985                                > 
    986986                        </File> 
  • trunk/src/HaliteWindow.cpp

    r460 r474  
    402402{ 
    403403        hal::bittorrent().closeAll(0); 
     404 
     405        hal::bittorrent().stopEventReceiver(); 
     406        Sleep(200); 
     407 
    404408        hal::bittorrent().shutDownSession(); 
    405409} 
     
    418422        halite().save(); 
    419423        hal::ini().save_data(); 
    420  
    421         hal::bittorrent().stopEventReceiver(); 
    422424         
    423425        if (halite().showMessage()) 
     
    434436                thread shutdown(bind(& HaliteWindow::ShutdownThread, this)); 
    435437                shutdown.join(); 
    436         }                
     438        } 
     439 
     440        hal::config().save(); 
     441        save(); 
     442        halite().save(); 
     443        hal::ini().save_data(); 
    437444                 
    438445        HAL_DEV_MSG(L"Posting Quit Message"); 
  • trunk/src/SplashDialog.hpp

    r459 r474  
    9393        void OnForceClose(UINT, int, HWND hWnd) 
    9494        { 
     95                thread_ptr.reset(); 
     96                Sleep(200); 
     97 
    9598                GetWindowRect(rect_); 
    9699                Save(); 
  • trunk/src/halTorrent.cpp

    r461 r474  
    278278        ~bit_impl() 
    279279        { 
    280                 keepChecking_ = false; 
    281                  
    282                 saveTorrentData(); 
     280                stopAlertHandler(); 
     281                 
     282                //saveTorrentData(); 
    283283                 
    284284                try 
     
    315315        }  
    316316        signals; 
     317 
     318        void stopAlertHandler() 
     319        { 
     320                mutex_t::scoped_lock l(mutex_); 
     321 
     322                keepChecking_ = false; 
     323        } 
    317324                 
    318325        void alertHandler() 
    319326        { 
     327                mutex_t::scoped_lock l(mutex_); 
     328 
    320329                if (keepChecking_) 
    321330                { 
     
    578587         
    579588        void saveTorrentData() 
    580         {       try 
     589        {        
     590                mutex_t::scoped_lock l(mutex_); 
     591                try 
    581592                { 
    582593                 
     
    779790        void removalThread(torrent_internal_ptr pIT, bool wipeFiles); 
    780791         
    781         libt::session theSession; 
     792        libt::session theSession;        
     793        mutable mutex_t mutex_; 
     794 
    782795        asio::io_service io_; 
    783796        asio::deadline_timer timer_; 
     
    14651478} 
    14661479 
    1467 void add_files(libt::torrent_info& t, fs::path const& p, fs::path const& l) 
    1468 { 
    1469 /*      fs::path f(p / l); 
    1470         if (fs::is_directory(f)) 
    1471         { 
    1472                 for (fs::directory_iterator i(f), end; i != end; ++i) 
    1473                         add_files(t, p, l / i->leaf()); 
    1474         } 
    1475         else 
    1476         { 
    1477         //      std::cerr << "adding \"" << l.string() << "\"\n"; 
    1478                 libt::file fi(f, libt::file::in); 
    1479                 fi.seek(0, libt::file::end); 
    1480                 libtorrent::size_type size = fi.tell(); 
    1481                 t.add_file(l, size); 
    1482         } 
    1483 */ 
    1484 } 
    1485  
    1486 void bit::newTorrent(wpath filename, wpath files) 
    1487 { 
    1488 /*      try 
    1489         { 
    1490          
    1491         libtorrent::torrent_info t; 
    1492         path full_path = pimpl->workingDirectory/"incoming"/files.leaf(); 
    1493          
    1494         ofstream out(filename, std::ios_base::binary); 
    1495          
    1496         int piece_size = 256 * 1024; 
    1497         char const* creator_str = "Halite v0.3 (libtorrent v0.11)"; 
    1498  
    1499         add_files(t, full_path.branch_path(), full_path.leaf()); 
    1500         t.set_piece_size(piece_size); 
    1501  
    1502         libt::storage st(t, full_path.branch_path()); 
    1503         t.add_tracker("http://www.nitcom.com.au/announce.php"); 
    1504         t.set_priv(false); 
    1505         t.add_node(make_pair("192.168.11.12", 6881)); 
    1506  
    1507         // calculate the hash for all pieces 
    1508         int num = t.num_pieces(); 
    1509         std::vector<char> buf(piece_size); 
    1510         for (int i = 0; i < num; ++i) 
    1511         { 
    1512                         st.read(&buf[0], i, 0, t.piece_size(i)); 
    1513                         libtorrent::hasher h(&buf[0], t.piece_size(i)); 
    1514                         t.set_hash(i, h.final()); 
    1515                 //      std::cerr << (i+1) << "/" << num << "\r"; 
    1516         } 
    1517  
    1518         t.set_creator(creator_str); 
    1519  
    1520         // create the torrent and print it to out 
    1521         libt::entry e = t.create_torrent(); 
    1522         libt::bencode(std::ostream_iterator<char>(out), e); 
    1523         } 
    1524         catch (std::exception& e) 
    1525         { 
    1526                 ::MessageBoxA(0, e.what(), "Create Torrent exception.", 0); 
    1527         } 
    1528 */ 
    1529 } 
    1530  
    15311480const TorrentDetails& bit::torrentDetails() 
    15321481{ 
     
    16251574void bit::closeAll(boost::optional<report_num_active> fn) 
    16261575{ 
    1627         try { 
    1628          
     1576        try  
     1577        {        
     1578        event().post(shared_ptr<EventDetail>(new EventInfo(L"Saving torrent data..."))); 
     1579 
     1580        pimpl->saveTorrentData(); 
     1581 
    16291582        event().post(shared_ptr<EventDetail>(new EventInfo(L"Stopping all torrents..."))); 
    16301583         
     
    16321585                i != e; ++i) 
    16331586        { 
    1634                 if ((*i).torrent->in_session()) 
    1635                 { 
    1636                 //      HAL_DEV_MSG(wformat(L"Internalling pausing writeData=%1%") % writeData); 
    1637                         (*i).torrent->handle().pause(); // Internal pause, not registered in Torrents.xml 
    1638                 } 
     1587                (*i).torrent->stop(); 
    16391588        } 
    16401589         
     
    16471596                                i != e; ++i) 
    16481597                { 
    1649                         // NB. this checks for an internal paused state. 
    1650                         if ((*i).torrent->in_session() && !(*i).torrent->handle().is_paused()) 
     1598                        if ((*i).torrent->state() != TorrentDetail::torrent_stopped) 
    16511599                                ++num_active; 
    16521600                } 
     
    16581606        } 
    16591607         
    1660         event().post(shared_ptr<EventDetail>(new EventInfo(L"All torrents stopped."))); 
    1661                  
    1662         for (TorrentManager::torrentByName::iterator i=pimpl->theTorrents.begin(), e=pimpl->theTorrents.end();  
    1663                 i != e; ++i) 
    1664         { 
    1665                 if ((*i).torrent->in_session()) 
    1666                         (*i).torrent->remove_from_session(true); 
    1667         } 
    1668          
     1608        event().post(shared_ptr<EventDetail>(new EventInfo(L"All torrents stopped.")));          
    16691609        event().post(shared_ptr<EventDetail>(new EventInfo(L"Fast-resume data written."))); 
    16701610         
     
    18471787        } HAL_GENERIC_TORRENT_EXCEPTION_CATCH(filename, "reannounceTorrent") 
    18481788} 
    1849 /* 
    1850 void bit::setTorrentLogin(const std::string& filename, std::wstring username, std::wstring password) 
    1851 { 
    1852         setTorrentLogin(hal::to_wstr_shim(filename), username, password); 
    1853 } 
    1854  
    1855 void bit::setTorrentLogin(const std::wstring& filename, std::wstring username, std::wstring password) 
    1856 { 
    1857         try { 
    1858          
    1859         pimpl->theTorrents.get(filename)->setTrackerLogin(username, password); 
    1860          
    1861         } HAL_GENERIC_TORRENT_EXCEPTION_CATCH(filename, "setTorrentLogin") 
    1862 } 
    1863  
    1864 std::pair<std::wstring, std::wstring> bit::getTorrentLogin(const std::string& filename) 
    1865 { 
    1866         return getTorrentLogin(hal::to_wstr_shim(filename)); 
    1867 } 
    1868  
    1869 std::pair<std::wstring, std::wstring> bit::getTorrentLogin(const std::wstring& filename) 
    1870 { 
    1871         try { 
    1872          
    1873         return pimpl->theTorrents.get(filename)->getTrackerLogin(); 
    1874          
    1875         } HAL_GENERIC_TORRENT_EXCEPTION_CATCH(filename, "getTorrentLogin") 
    1876          
    1877         return std::make_pair(L"", L""); 
    1878 } 
    1879 */ 
     1789 
    18801790void bit_impl::removalThread(torrent_internal_ptr pIT, bool wipeFiles) 
    18811791{ 
     
    22332143void bit::stopEventReceiver() 
    22342144{ 
    2235         pimpl->keepChecking_ = false; 
     2145        event().post(shared_ptr<EventDetail>(new EventMsg(L"Stopping event Handler."))); 
     2146 
     2147        pimpl->stopAlertHandler(); 
    22362148} 
    22372149 
  • trunk/src/halTorrent.hpp

    r461 r474  
    608608 
    609609        void setTorrentDefaults(int maxConn, int maxUpload, float download, float upload);       
    610         void newTorrent(boost::filesystem::wpath filename, boost::filesystem::wpath files); 
    611610        void addTorrent(boost::filesystem::wpath file, boost::filesystem::wpath saveDirectory,  
    612611                bool startPaused=false, bool compactStorage=false,  
Note: See TracChangeset for help on using the changeset viewer.