From f801e16b787f033cea4e473d69b54fe65248a439 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 25 Mar 2012 11:50:29 +0300 Subject: Texture cache -> Media cache WIP --- src/client.cpp | 129 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 69 insertions(+), 60 deletions(-) (limited to 'src/client.cpp') diff --git a/src/client.cpp b/src/client.cpp index 3a08b25c2..56555804e 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -41,16 +41,16 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "filecache.h" #include "sound.h" -static std::string getTextureCacheDir() +static std::string getMediaCacheDir() { - return porting::path_user + DIR_DELIM + "cache" + DIR_DELIM + "textures"; + return porting::path_user + DIR_DELIM + "cache" + DIR_DELIM + "media"; } -struct TextureRequest +struct MediaRequest { std::string name; - TextureRequest(const std::string &name_=""): + MediaRequest(const std::string &name_=""): name(name_) {} }; @@ -256,9 +256,9 @@ Client::Client( m_map_seed(0), m_password(password), m_access_denied(false), - m_texture_cache(getTextureCacheDir()), - m_texture_receive_progress(0), - m_textures_received(false), + m_media_cache(getMediaCacheDir()), + m_media_receive_progress(0), + m_media_received(false), m_itemdef_received(false), m_nodedef_received(false), m_time_of_day_set(false), @@ -1391,7 +1391,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) event.deathscreen.camera_point_target_z = camera_point_target.Z; m_client_event_queue.push_back(event); } - else if(command == TOCLIENT_ANNOUNCE_TEXTURES) + else if(command == TOCLIENT_ANNOUNCE_MEDIA) { io::IFileSystem *irrfs = m_device->getFileSystem(); video::IVideoDriver *vdrv = m_device->getVideoDriver(); @@ -1403,33 +1403,36 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) // updating content definitions assert(!m_mesh_update_thread.IsRunning()); - int num_textures = readU16(is); + int num_files = readU16(is); + + verbosestream<<"Client received TOCLIENT_ANNOUNCE_MEDIA (" + < texture_requests; + core::list file_requests; - for(int i=0; i data_rw(tmp_os.str().c_str(), tmp_os.str().size()); @@ -1449,7 +1452,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) video::IImage *img = vdrv->createImageFromFile(rfile); if(!img){ infostream<<"Client: Cannot create image from data of " - <<"received texture \""<drop(); } else { @@ -1457,22 +1460,22 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) img->drop(); rfile->drop(); - texture_found = true; + file_found = true; } } else { - infostream<<"Client::Texture cached sha1 hash not matching server hash: " - <"< "<"< "<::Iterator i = texture_requests.begin(); - i != texture_requests.end(); i++) { + for(core::list::Iterator i = file_requests.begin(); + i != file_requests.end(); i++) { os<name); } @@ -1513,10 +1516,13 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) SharedBuffer data((u8*)s.c_str(), s.size()); // Send as reliable Send(0, data, true); - infostream<<"Client: Sending request list to server " <getFileSystem(); video::IVideoDriver *vdrv = m_device->getVideoDriver(); @@ -1529,10 +1535,10 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) /* u16 command - u16 total number of texture bunches + u16 total number of file bunches u16 index of this bunch - u32 number of textures in this bunch - for each texture { + u32 number of files in this bunch + for each file { u16 length of name string name u32 length of data @@ -1541,20 +1547,20 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) */ int num_bunches = readU16(is); int bunch_i = readU16(is); - m_texture_receive_progress = (float)bunch_i / (float)(num_bunches - 1); + m_media_receive_progress = (float)bunch_i / (float)(num_bunches - 1); if(bunch_i == num_bunches - 1) - m_textures_received = true; - int num_textures = readU32(is); - infostream<<"Client: Received textures: bunch "<createImageFromFile(rfile); if(!img){ errorstream<<"Client: Cannot create image from data of " - <<"received texture \""<drop(); continue; } - fs::CreateAllDirs(getTextureCacheDir()); + bool did = fs::CreateAllDirs(getMediaCacheDir()); + if(!did){ + errorstream<<"Could not create media cache directory" + <::Node *n; - n = m_texture_name_sha1_map.find(name); + n = m_media_name_sha1_map.find(name); if(n == NULL) - errorstream<<"The server sent a texture that has not been announced." - <getValue()); + m_media_cache.updateByChecksum(n->getValue(), data); } m_tsrc->insertSourceImage(name, img); @@ -2358,11 +2367,11 @@ void Client::afterContentReceived() { assert(m_itemdef_received); assert(m_nodedef_received); - assert(m_textures_received); + assert(m_media_received); // remove the information about which checksum each texture // ought to have - m_texture_name_sha1_map.clear(); + m_media_name_sha1_map.clear(); // Rebuild inherited images and recreate textures m_tsrc->rebuildImagesAndTextures(); -- cgit v1.2.3