Make m_media_fetch_threads to contain MediaFetchThread* instead of MediaFetchThread

master
Ilya Zhuravlev 2012-12-17 20:56:59 +04:00
parent e301bc2d77
commit e9006f904c
2 changed files with 21 additions and 19 deletions

View File

@ -332,6 +332,9 @@ Client::Client(
m_env.addPlayer(player); m_env.addPlayer(player);
} }
for (size_t i = 0; i < g_settings->getU16("media_fetch_threads"); ++i)
m_media_fetch_threads.push_back(new MediaFetchThread(this));
} }
Client::~Client() Client::~Client()
@ -355,6 +358,10 @@ Client::~Client()
delete i->second; delete i->second;
} }
} }
for (core::list<MediaFetchThread*>::Iterator i = m_media_fetch_threads.begin();
i != m_media_fetch_threads.end(); i++)
delete *i;
} }
void Client::connect(Address address) void Client::connect(Address address)
@ -771,11 +778,11 @@ void Client::step(float dtime)
*/ */
if (m_media_receive_started) { if (m_media_receive_started) {
bool all_stopped = true; bool all_stopped = true;
for (core::list<MediaFetchThread>::Iterator thread = m_media_fetch_threads.begin(); for (core::list<MediaFetchThread*>::Iterator thread = m_media_fetch_threads.begin();
thread != m_media_fetch_threads.end(); thread++) { thread != m_media_fetch_threads.end(); thread++) {
all_stopped &= !thread->IsRunning(); all_stopped &= !(*thread)->IsRunning();
while (thread->m_file_data.size() > 0) { while ((*thread)->m_file_data.size() > 0) {
std::pair <std::string, std::string> out = thread->m_file_data.pop_front(); std::pair <std::string, std::string> out = (*thread)->m_file_data.pop_front();
++m_media_received_count; ++m_media_received_count;
bool success = loadMedia(out.second, out.first); bool success = loadMedia(out.second, out.first);
@ -807,19 +814,18 @@ void Client::step(float dtime)
} }
if (all_stopped) { if (all_stopped) {
core::list<MediaRequest> fetch_failed; core::list<MediaRequest> fetch_failed;
for (core::list<MediaFetchThread>::Iterator thread = m_media_fetch_threads.begin(); for (core::list<MediaFetchThread*>::Iterator thread = m_media_fetch_threads.begin();
thread != m_media_fetch_threads.end(); thread++) { thread != m_media_fetch_threads.end(); thread++) {
for (core::list<MediaRequest>::Iterator request = thread->m_failed.begin(); for (core::list<MediaRequest>::Iterator request = (*thread)->m_failed.begin();
request != thread->m_failed.end(); request++) request != (*thread)->m_failed.end(); request++)
fetch_failed.push_back(*request); fetch_failed.push_back(*request);
thread->m_failed.clear(); (*thread)->m_failed.clear();
} }
if (fetch_failed.size() > 0) { if (fetch_failed.size() > 0) {
infostream << "Failed to remote-fetch " << fetch_failed.size() << " files. " infostream << "Failed to remote-fetch " << fetch_failed.size() << " files. "
<< "Requesting them the usual way." << std::endl; << "Requesting them the usual way." << std::endl;
request_media(fetch_failed); request_media(fetch_failed);
} }
m_media_fetch_threads.clear();
} }
} }
@ -1650,22 +1656,18 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
request_media(file_requests); request_media(file_requests);
} else { } else {
#if USE_CURL #if USE_CURL
for (size_t i = 0; i < g_settings->getU16("media_fetch_threads"); ++i) { core::list<MediaFetchThread*>::Iterator cur = m_media_fetch_threads.begin();
m_media_fetch_threads.push_back(MediaFetchThread(this));
}
core::list<MediaFetchThread>::Iterator cur = m_media_fetch_threads.begin();
for(core::list<MediaRequest>::Iterator i = file_requests.begin(); for(core::list<MediaRequest>::Iterator i = file_requests.begin();
i != file_requests.end(); i++) { i != file_requests.end(); i++) {
cur->m_file_requests.push_back(*i); (*cur)->m_file_requests.push_back(*i);
cur++; cur++;
if (cur == m_media_fetch_threads.end()) if (cur == m_media_fetch_threads.end())
cur = m_media_fetch_threads.begin(); cur = m_media_fetch_threads.begin();
} }
for (core::list<MediaFetchThread>::Iterator i = m_media_fetch_threads.begin(); for (core::list<MediaFetchThread*>::Iterator i = m_media_fetch_threads.begin();
i != m_media_fetch_threads.end(); i++) { i != m_media_fetch_threads.end(); i++) {
i->m_remote_url = remote_media; (*i)->m_remote_url = remote_media;
i->Start(); (*i)->Start();
} }
#endif #endif

View File

@ -371,7 +371,7 @@ private:
MtEventManager *m_event; MtEventManager *m_event;
MeshUpdateThread m_mesh_update_thread; MeshUpdateThread m_mesh_update_thread;
core::list<MediaFetchThread> m_media_fetch_threads; core::list<MediaFetchThread*> m_media_fetch_threads;
ClientEnvironment m_env; ClientEnvironment m_env;
con::Connection m_con; con::Connection m_con;
IrrlichtDevice *m_device; IrrlichtDevice *m_device;