diff options
author | sfan5 <sfan5@live.de> | 2021-09-09 16:51:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-09 16:51:35 +0200 |
commit | bbfae0cc673d3abdc21224c53e09b209ee4688a2 (patch) | |
tree | e1afb8f64570b212d3db53a975b59fff5af67ad8 /src/network/serverpackethandler.cpp | |
parent | bcb65654836caffa670a611ff7c79b0705a40c3c (diff) | |
download | hax-minetest-server-bbfae0cc673d3abdc21224c53e09b209ee4688a2.tar.gz hax-minetest-server-bbfae0cc673d3abdc21224c53e09b209ee4688a2.zip |
Dynamic_Add_Media v2 (#11550)
Diffstat (limited to '')
-rw-r--r-- | src/network/serverpackethandler.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 77fde2a66..4c609644f 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -362,16 +362,15 @@ void Server::handleCommand_RequestMedia(NetworkPacket* pkt) session_t peer_id = pkt->getPeerId(); infostream << "Sending " << numfiles << " files to " << getPlayerName(peer_id) << std::endl; - verbosestream << "TOSERVER_REQUEST_MEDIA: " << std::endl; + verbosestream << "TOSERVER_REQUEST_MEDIA: requested file(s)" << std::endl; for (u16 i = 0; i < numfiles; i++) { std::string name; *pkt >> name; - tosend.push_back(name); - verbosestream << "TOSERVER_REQUEST_MEDIA: requested file " - << name << std::endl; + tosend.emplace_back(name); + verbosestream << " " << name << std::endl; } sendRequestedMedia(peer_id, tosend); @@ -1801,3 +1800,30 @@ void Server::handleCommand_ModChannelMsg(NetworkPacket *pkt) broadcastModChannelMessage(channel_name, channel_msg, peer_id); } + +void Server::handleCommand_HaveMedia(NetworkPacket *pkt) +{ + std::vector<u32> tokens; + u8 numtokens; + + *pkt >> numtokens; + for (u16 i = 0; i < numtokens; i++) { + u32 n; + *pkt >> n; + tokens.emplace_back(n); + } + + const session_t peer_id = pkt->getPeerId(); + auto player = m_env->getPlayer(peer_id); + + for (const u32 token : tokens) { + auto it = m_pending_dyn_media.find(token); + if (it == m_pending_dyn_media.end()) + continue; + if (it->second.waiting_players.count(peer_id)) { + it->second.waiting_players.erase(peer_id); + if (player) + getScriptIface()->on_dynamic_media_added(token, player->getName()); + } + } +} |