summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2015-03-05 11:39:05 +0100
committerLoic Blot <loic.blot@unix-experience.fr>2015-03-05 11:40:04 +0100
commitaa474e4501f460ba853dc70ff4d97cbd061e6704 (patch)
tree0e643cc958f04f4a8274e2e4ca41ef05a1908f7a
parent82482ecd9d45036da38335f7dd96232450338a28 (diff)
downloadminetest-aa474e4501f460ba853dc70ff4d97cbd061e6704.tar.gz
minetest-aa474e4501f460ba853dc70ff4d97cbd061e6704.tar.bz2
minetest-aa474e4501f460ba853dc70ff4d97cbd061e6704.zip
Server.cpp Use std::list instead of std::vector for playSound, fillMediaCache, sendRequestedMedia, sendMediaAnnouncement and related functions
-rw-r--r--src/network/packethandlers/server.cpp2
-rw-r--r--src/server.cpp84
-rw-r--r--src/server.h2
3 files changed, 42 insertions, 46 deletions
diff --git a/src/network/packethandlers/server.cpp b/src/network/packethandlers/server.cpp
index 62ce7eb55..a11e8dc2f 100644
--- a/src/network/packethandlers/server.cpp
+++ b/src/network/packethandlers/server.cpp
@@ -419,7 +419,7 @@ void Server::handleCommand_Init2(NetworkPacket* pkt)
void Server::handleCommand_RequestMedia(NetworkPacket* pkt)
{
- std::list<std::string> tosend;
+ std::vector<std::string> tosend;
u16 numfiles;
*pkt >> numfiles;
diff --git a/src/server.cpp b/src/server.cpp
index 51832181a..09884f1bc 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -1913,7 +1913,7 @@ s32 Server::playSound(const SimpleSoundSpec &spec,
return -1;
// Filter destination clients
- std::list<u16> dst_clients;
+ std::vector<u16> dst_clients;
if(params.to_player != "")
{
Player *player = m_env->getPlayer(params.to_player.c_str());
@@ -1929,8 +1929,7 @@ s32 Server::playSound(const SimpleSoundSpec &spec,
}
dst_clients.push_back(player->peer_id);
}
- else
- {
+ else {
std::vector<u16> clients = m_clients.getClientIDs();
for(std::vector<u16>::iterator
@@ -1957,16 +1956,14 @@ s32 Server::playSound(const SimpleSoundSpec &spec,
m_playing_sounds[id] = ServerPlayingSound();
ServerPlayingSound &psound = m_playing_sounds[id];
psound.params = params;
- for(std::list<u16>::iterator i = dst_clients.begin();
- i != dst_clients.end(); i++)
- psound.clients.insert(*i);
NetworkPacket* pkt = new NetworkPacket(TOCLIENT_PLAY_SOUND, 0);
*pkt << id << spec.name << (float) (spec.gain * params.gain)
<< (u8) params.type << pos << params.object << params.loop;
- for(std::list<u16>::iterator i = dst_clients.begin();
+
+ for(std::vector<u16>::iterator i = dst_clients.begin();
i != dst_clients.end(); i++) {
- // Send as reliable
+ psound.clients.insert(*i);
m_clients.send(*i, 0, pkt, true, false);
}
delete pkt;
@@ -2183,9 +2180,9 @@ void Server::fillMediaCache()
infostream<<"Server: Calculating media file checksums"<<std::endl;
// Collect all media file paths
- std::list<std::string> paths;
+ std::vector<std::string> paths;
for(std::vector<ModSpec>::iterator i = m_mods.begin();
- i != m_mods.end(); i++){
+ i != m_mods.end(); i++) {
const ModSpec &mod = *i;
paths.push_back(mod.path + DIR_DELIM + "textures");
paths.push_back(mod.path + DIR_DELIM + "sounds");
@@ -2195,19 +2192,18 @@ void Server::fillMediaCache()
paths.push_back(porting::path_user + DIR_DELIM + "textures" + DIR_DELIM + "server");
// Collect media file information from paths into cache
- for(std::list<std::string>::iterator i = paths.begin();
- i != paths.end(); i++)
- {
+ for(std::vector<std::string>::iterator i = paths.begin();
+ i != paths.end(); i++) {
std::string mediapath = *i;
std::vector<fs::DirListNode> dirlist = fs::GetDirListing(mediapath);
- for(u32 j=0; j<dirlist.size(); j++){
- if(dirlist[j].dir) // Ignode dirs
+ for (u32 j = 0; j < dirlist.size(); j++) {
+ if (dirlist[j].dir) // Ignode dirs
continue;
std::string filename = dirlist[j].name;
// If name contains illegal characters, ignore the file
- if(!string_allowed(filename, TEXTURENAME_ALLOWED_CHARS)){
+ if (!string_allowed(filename, TEXTURENAME_ALLOWED_CHARS)) {
infostream<<"Server: ignoring illegal file name: \""
- <<filename<<"\""<<std::endl;
+ << filename << "\"" << std::endl;
continue;
}
// If name is not in a supported format, ignore it
@@ -2218,42 +2214,42 @@ void Server::fillMediaCache()
".x", ".b3d", ".md2", ".obj",
NULL
};
- if(removeStringEnd(filename, supported_ext) == ""){
- infostream<<"Server: ignoring unsupported file extension: \""
- <<filename<<"\""<<std::endl;
+ if (removeStringEnd(filename, supported_ext) == ""){
+ infostream << "Server: ignoring unsupported file extension: \""
+ << filename << "\"" << std::endl;
continue;
}
// Ok, attempt to load the file and add to cache
std::string filepath = mediapath + DIR_DELIM + filename;
// Read data
std::ifstream fis(filepath.c_str(), std::ios_base::binary);
- if(fis.good() == false){
- errorstream<<"Server::fillMediaCache(): Could not open \""
- <<filename<<"\" for reading"<<std::endl;
+ if (!fis.good()) {
+ errorstream << "Server::fillMediaCache(): Could not open \""
+ << filename << "\" for reading" << std::endl;
continue;
}
std::ostringstream tmp_os(std::ios_base::binary);
bool bad = false;
- for(;;){
+ for(;;) {
char buf[1024];
fis.read(buf, 1024);
std::streamsize len = fis.gcount();
tmp_os.write(buf, len);
- if(fis.eof())
+ if (fis.eof())
break;
- if(!fis.good()){
+ if (!fis.good()) {
bad = true;
break;
}
}
- if(bad){
+ if(bad) {
errorstream<<"Server::fillMediaCache(): Failed to read \""
- <<filename<<"\""<<std::endl;
+ << filename << "\"" << std::endl;
continue;
}
- if(tmp_os.str().length() == 0){
- errorstream<<"Server::fillMediaCache(): Empty file \""
- <<filepath<<"\""<<std::endl;
+ if(tmp_os.str().length() == 0) {
+ errorstream << "Server::fillMediaCache(): Empty file \""
+ << filepath << "\"" << std::endl;
continue;
}
@@ -2266,8 +2262,9 @@ void Server::fillMediaCache()
free(digest);
// Put in list
- this->m_media[filename] = MediaInfo(filepath, sha1_base64);
- verbosestream<<"Server: "<<sha1_hex<<" is "<<filename<<std::endl;
+ m_media[filename] = MediaInfo(filepath, sha1_base64);
+ verbosestream << "Server: " << sha1_hex << " is " << filename
+ << std::endl;
}
}
}
@@ -2291,9 +2288,9 @@ void Server::sendMediaAnnouncement(u16 peer_id)
verbosestream<<"Server: Announcing files to id("<<peer_id<<")"
<<std::endl;
- std::list<SendableMediaAnnouncement> file_announcements;
+ std::vector<SendableMediaAnnouncement> file_announcements;
- for(std::map<std::string, MediaInfo>::iterator i = m_media.begin();
+ for (std::map<std::string, MediaInfo>::iterator i = m_media.begin();
i != m_media.end(); i++){
// Put in list
file_announcements.push_back(
@@ -2316,7 +2313,7 @@ void Server::sendMediaAnnouncement(u16 peer_id)
NetworkPacket* pkt = new NetworkPacket(TOCLIENT_ANNOUNCE_MEDIA, 0, peer_id);
*pkt << (u16) file_announcements.size();
- for(std::list<SendableMediaAnnouncement>::iterator
+ for (std::vector<SendableMediaAnnouncement>::iterator
j = file_announcements.begin();
j != file_announcements.end(); ++j) {
*pkt << j->name << j->sha1_digest;
@@ -2341,7 +2338,7 @@ struct SendableMedia
};
void Server::sendRequestedMedia(u16 peer_id,
- const std::list<std::string> &tosend)
+ const std::vector<std::string> &tosend)
{
DSTACK(__FUNCTION_NAME);
@@ -2353,14 +2350,13 @@ void Server::sendRequestedMedia(u16 peer_id,
// Put 5kB in one bunch (this is not accurate)
u32 bytes_per_bunch = 5000;
- std::vector< std::list<SendableMedia> > file_bunches;
- file_bunches.push_back(std::list<SendableMedia>());
+ std::vector< std::vector<SendableMedia> > file_bunches;
+ file_bunches.push_back(std::vector<SendableMedia>());
u32 file_size_bunch_total = 0;
- for(std::list<std::string>::const_iterator i = tosend.begin();
- i != tosend.end(); ++i)
- {
+ for(std::vector<std::string>::const_iterator i = tosend.begin();
+ i != tosend.end(); ++i) {
const std::string &name = *i;
if(m_media.find(name) == m_media.end()) {
@@ -2407,7 +2403,7 @@ void Server::sendRequestedMedia(u16 peer_id,
// Start next bunch if got enough data
if(file_size_bunch_total >= bytes_per_bunch) {
- file_bunches.push_back(std::list<SendableMedia>());
+ file_bunches.push_back(std::vector<SendableMedia>());
file_size_bunch_total = 0;
}
@@ -2433,7 +2429,7 @@ void Server::sendRequestedMedia(u16 peer_id,
NetworkPacket* pkt = new NetworkPacket(TOCLIENT_MEDIA, 0, peer_id);
*pkt << num_bunches << i << (u32) file_bunches[i].size();
- for(std::list<SendableMedia>::iterator
+ for(std::vector<SendableMedia>::iterator
j = file_bunches[i].begin();
j != file_bunches[i].end(); ++j) {
*pkt << j->name;
diff --git a/src/server.h b/src/server.h
index eefac0be6..ba6c37faa 100644
--- a/src/server.h
+++ b/src/server.h
@@ -437,7 +437,7 @@ private:
void fillMediaCache();
void sendMediaAnnouncement(u16 peer_id);
void sendRequestedMedia(u16 peer_id,
- const std::list<std::string> &tosend);
+ const std::vector<std::string> &tosend);
void sendDetachedInventory(const std::string &name, u16 peer_id);
void sendDetachedInventories(u16 peer_id);