forked from Mirrorlandia_minetest/minetest
Server.cpp Use std::list instead of std::vector for playSound, fillMediaCache, sendRequestedMedia, sendMediaAnnouncement and related functions
This commit is contained in:
parent
82482ecd9d
commit
aa474e4501
@ -419,7 +419,7 @@ void Server::handleCommand_Init2(NetworkPacket* pkt)
|
|||||||
|
|
||||||
void Server::handleCommand_RequestMedia(NetworkPacket* pkt)
|
void Server::handleCommand_RequestMedia(NetworkPacket* pkt)
|
||||||
{
|
{
|
||||||
std::list<std::string> tosend;
|
std::vector<std::string> tosend;
|
||||||
u16 numfiles;
|
u16 numfiles;
|
||||||
|
|
||||||
*pkt >> numfiles;
|
*pkt >> numfiles;
|
||||||
|
@ -1913,7 +1913,7 @@ s32 Server::playSound(const SimpleSoundSpec &spec,
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
// Filter destination clients
|
// Filter destination clients
|
||||||
std::list<u16> dst_clients;
|
std::vector<u16> dst_clients;
|
||||||
if(params.to_player != "")
|
if(params.to_player != "")
|
||||||
{
|
{
|
||||||
Player *player = m_env->getPlayer(params.to_player.c_str());
|
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);
|
dst_clients.push_back(player->peer_id);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
std::vector<u16> clients = m_clients.getClientIDs();
|
std::vector<u16> clients = m_clients.getClientIDs();
|
||||||
|
|
||||||
for(std::vector<u16>::iterator
|
for(std::vector<u16>::iterator
|
||||||
@ -1957,16 +1956,14 @@ s32 Server::playSound(const SimpleSoundSpec &spec,
|
|||||||
m_playing_sounds[id] = ServerPlayingSound();
|
m_playing_sounds[id] = ServerPlayingSound();
|
||||||
ServerPlayingSound &psound = m_playing_sounds[id];
|
ServerPlayingSound &psound = m_playing_sounds[id];
|
||||||
psound.params = params;
|
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);
|
NetworkPacket* pkt = new NetworkPacket(TOCLIENT_PLAY_SOUND, 0);
|
||||||
*pkt << id << spec.name << (float) (spec.gain * params.gain)
|
*pkt << id << spec.name << (float) (spec.gain * params.gain)
|
||||||
<< (u8) params.type << pos << params.object << params.loop;
|
<< (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++) {
|
i != dst_clients.end(); i++) {
|
||||||
// Send as reliable
|
psound.clients.insert(*i);
|
||||||
m_clients.send(*i, 0, pkt, true, false);
|
m_clients.send(*i, 0, pkt, true, false);
|
||||||
}
|
}
|
||||||
delete pkt;
|
delete pkt;
|
||||||
@ -2183,7 +2180,7 @@ void Server::fillMediaCache()
|
|||||||
infostream<<"Server: Calculating media file checksums"<<std::endl;
|
infostream<<"Server: Calculating media file checksums"<<std::endl;
|
||||||
|
|
||||||
// Collect all media file paths
|
// Collect all media file paths
|
||||||
std::list<std::string> paths;
|
std::vector<std::string> paths;
|
||||||
for(std::vector<ModSpec>::iterator i = m_mods.begin();
|
for(std::vector<ModSpec>::iterator i = m_mods.begin();
|
||||||
i != m_mods.end(); i++) {
|
i != m_mods.end(); i++) {
|
||||||
const ModSpec &mod = *i;
|
const ModSpec &mod = *i;
|
||||||
@ -2195,9 +2192,8 @@ void Server::fillMediaCache()
|
|||||||
paths.push_back(porting::path_user + DIR_DELIM + "textures" + DIR_DELIM + "server");
|
paths.push_back(porting::path_user + DIR_DELIM + "textures" + DIR_DELIM + "server");
|
||||||
|
|
||||||
// Collect media file information from paths into cache
|
// Collect media file information from paths into cache
|
||||||
for(std::list<std::string>::iterator i = paths.begin();
|
for(std::vector<std::string>::iterator i = paths.begin();
|
||||||
i != paths.end(); i++)
|
i != paths.end(); i++) {
|
||||||
{
|
|
||||||
std::string mediapath = *i;
|
std::string mediapath = *i;
|
||||||
std::vector<fs::DirListNode> dirlist = fs::GetDirListing(mediapath);
|
std::vector<fs::DirListNode> dirlist = fs::GetDirListing(mediapath);
|
||||||
for (u32 j = 0; j < dirlist.size(); j++) {
|
for (u32 j = 0; j < dirlist.size(); j++) {
|
||||||
@ -2227,7 +2223,7 @@ void Server::fillMediaCache()
|
|||||||
std::string filepath = mediapath + DIR_DELIM + filename;
|
std::string filepath = mediapath + DIR_DELIM + filename;
|
||||||
// Read data
|
// Read data
|
||||||
std::ifstream fis(filepath.c_str(), std::ios_base::binary);
|
std::ifstream fis(filepath.c_str(), std::ios_base::binary);
|
||||||
if(fis.good() == false){
|
if (!fis.good()) {
|
||||||
errorstream << "Server::fillMediaCache(): Could not open \""
|
errorstream << "Server::fillMediaCache(): Could not open \""
|
||||||
<< filename << "\" for reading" << std::endl;
|
<< filename << "\" for reading" << std::endl;
|
||||||
continue;
|
continue;
|
||||||
@ -2266,8 +2262,9 @@ void Server::fillMediaCache()
|
|||||||
free(digest);
|
free(digest);
|
||||||
|
|
||||||
// Put in list
|
// Put in list
|
||||||
this->m_media[filename] = MediaInfo(filepath, sha1_base64);
|
m_media[filename] = MediaInfo(filepath, sha1_base64);
|
||||||
verbosestream<<"Server: "<<sha1_hex<<" is "<<filename<<std::endl;
|
verbosestream << "Server: " << sha1_hex << " is " << filename
|
||||||
|
<< std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2291,7 +2288,7 @@ void Server::sendMediaAnnouncement(u16 peer_id)
|
|||||||
verbosestream<<"Server: Announcing files to id("<<peer_id<<")"
|
verbosestream<<"Server: Announcing files to id("<<peer_id<<")"
|
||||||
<<std::endl;
|
<<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++){
|
i != m_media.end(); i++){
|
||||||
@ -2316,7 +2313,7 @@ void Server::sendMediaAnnouncement(u16 peer_id)
|
|||||||
NetworkPacket* pkt = new NetworkPacket(TOCLIENT_ANNOUNCE_MEDIA, 0, peer_id);
|
NetworkPacket* pkt = new NetworkPacket(TOCLIENT_ANNOUNCE_MEDIA, 0, peer_id);
|
||||||
*pkt << (u16) file_announcements.size();
|
*pkt << (u16) file_announcements.size();
|
||||||
|
|
||||||
for(std::list<SendableMediaAnnouncement>::iterator
|
for (std::vector<SendableMediaAnnouncement>::iterator
|
||||||
j = file_announcements.begin();
|
j = file_announcements.begin();
|
||||||
j != file_announcements.end(); ++j) {
|
j != file_announcements.end(); ++j) {
|
||||||
*pkt << j->name << j->sha1_digest;
|
*pkt << j->name << j->sha1_digest;
|
||||||
@ -2341,7 +2338,7 @@ struct SendableMedia
|
|||||||
};
|
};
|
||||||
|
|
||||||
void Server::sendRequestedMedia(u16 peer_id,
|
void Server::sendRequestedMedia(u16 peer_id,
|
||||||
const std::list<std::string> &tosend)
|
const std::vector<std::string> &tosend)
|
||||||
{
|
{
|
||||||
DSTACK(__FUNCTION_NAME);
|
DSTACK(__FUNCTION_NAME);
|
||||||
|
|
||||||
@ -2353,14 +2350,13 @@ void Server::sendRequestedMedia(u16 peer_id,
|
|||||||
// Put 5kB in one bunch (this is not accurate)
|
// Put 5kB in one bunch (this is not accurate)
|
||||||
u32 bytes_per_bunch = 5000;
|
u32 bytes_per_bunch = 5000;
|
||||||
|
|
||||||
std::vector< std::list<SendableMedia> > file_bunches;
|
std::vector< std::vector<SendableMedia> > file_bunches;
|
||||||
file_bunches.push_back(std::list<SendableMedia>());
|
file_bunches.push_back(std::vector<SendableMedia>());
|
||||||
|
|
||||||
u32 file_size_bunch_total = 0;
|
u32 file_size_bunch_total = 0;
|
||||||
|
|
||||||
for(std::list<std::string>::const_iterator i = tosend.begin();
|
for(std::vector<std::string>::const_iterator i = tosend.begin();
|
||||||
i != tosend.end(); ++i)
|
i != tosend.end(); ++i) {
|
||||||
{
|
|
||||||
const std::string &name = *i;
|
const std::string &name = *i;
|
||||||
|
|
||||||
if(m_media.find(name) == m_media.end()) {
|
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
|
// Start next bunch if got enough data
|
||||||
if(file_size_bunch_total >= bytes_per_bunch) {
|
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;
|
file_size_bunch_total = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2433,7 +2429,7 @@ void Server::sendRequestedMedia(u16 peer_id,
|
|||||||
NetworkPacket* pkt = new NetworkPacket(TOCLIENT_MEDIA, 0, peer_id);
|
NetworkPacket* pkt = new NetworkPacket(TOCLIENT_MEDIA, 0, peer_id);
|
||||||
*pkt << num_bunches << i << (u32) file_bunches[i].size();
|
*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].begin();
|
||||||
j != file_bunches[i].end(); ++j) {
|
j != file_bunches[i].end(); ++j) {
|
||||||
*pkt << j->name;
|
*pkt << j->name;
|
||||||
|
@ -437,7 +437,7 @@ private:
|
|||||||
void fillMediaCache();
|
void fillMediaCache();
|
||||||
void sendMediaAnnouncement(u16 peer_id);
|
void sendMediaAnnouncement(u16 peer_id);
|
||||||
void sendRequestedMedia(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 sendDetachedInventory(const std::string &name, u16 peer_id);
|
||||||
void sendDetachedInventories(u16 peer_id);
|
void sendDetachedInventories(u16 peer_id);
|
||||||
|
Loading…
Reference in New Issue
Block a user