]> git.lizzy.rs Git - minetest.git/blobdiff - src/clientiface.cpp
Rename --do-unittests to --run-unittests as @Zeno- and @sfan5 requested
[minetest.git] / src / clientiface.cpp
index 2841b212f95877cd02133d84b9f6cf4b18004ba2..6180cf5da032a4f1280b21bef3a753b9cbe23d78 100644 (file)
@@ -20,19 +20,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <sstream>
 
 #include "clientiface.h"
+#include "util/numeric.h"
+#include "util/mathconstants.h"
 #include "player.h"
 #include "settings.h"
 #include "mapblock.h"
-#include "connection.h"
+#include "network/connection.h"
 #include "environment.h"
 #include "map.h"
 #include "emerge.h"
 #include "serverobject.h"              // TODO this is used for cleanup of only
-
-#include "util/numeric.h"
-#include "util/mathconstants.h"
-
 #include "main.h"                      // for g_settings
+#include "log.h"
 
 const char *ClientInterface::statenames[] = {
        "Invalid",
@@ -52,8 +51,15 @@ std::string ClientInterface::state2Name(ClientState state)
        return statenames[state];
 }
 
+void RemoteClient::ResendBlockIfOnWire(v3s16 p)
+{
+       // if this block is on wire, mark it for sending again as soon as possible
+       if (m_blocks_sending.find(p) != m_blocks_sending.end()) {
+               SetBlockNotSent(p);
+       }
+}
 
-void RemoteClient::GetNextBlocks(
+void RemoteClient::GetNextBlocks (
                ServerEnvironment *env,
                EmergeManager * emerge,
                float dtime,
@@ -173,21 +179,18 @@ void RemoteClient::GetNextBlocks(
        s32 nearest_emerged_d = -1;
        s32 nearest_emergefull_d = -1;
        s32 nearest_sent_d = -1;
-       bool queue_is_full = false;
+       //bool queue_is_full = false;
 
        s16 d;
-       for(d = d_start; d <= d_max; d++)
-       {
+       for(d = d_start; d <= d_max; d++) {
                /*
                        Get the border/face dot coordinates of a "d-radiused"
                        box
                */
-               std::list<v3s16> list;
-               getFacePositions(list, d);
+               std::vector<v3s16> list = FacePositionCache::getFacePositions(d);
 
-               std::list<v3s16>::iterator li;
-               for(li=list.begin(); li!=list.end(); ++li)
-               {
+               std::vector<v3s16>::iterator li;
+               for(li = list.begin(); li != list.end(); ++li) {
                        v3s16 p = *li + center;
 
                        /*
@@ -208,7 +211,7 @@ void RemoteClient::GetNextBlocks(
                        // Don't select too many blocks for sending
                        if(num_blocks_selected >= max_simul_dynamic)
                        {
-                               queue_is_full = true;
+                               //queue_is_full = true;
                                goto queue_full_break;
                        }
 
@@ -597,7 +600,7 @@ void ClientInterface::UpdatePlayerList()
                m_clients_names.clear();
 
 
-               if(clients.size() != 0)
+               if(!clients.empty())
                        infostream<<"Players:"<<std::endl;
                for(std::list<u16>::iterator
                        i = clients.begin();
@@ -619,27 +622,30 @@ void ClientInterface::UpdatePlayerList()
        }
 }
 
-void ClientInterface::send(u16 peer_id,u8 channelnum,
-               SharedBuffer<u8> data, bool reliable)
+void ClientInterface::send(u16 peer_id, u8 channelnum,
+               NetworkPacket* pkt, bool reliable, bool deletepkt)
 {
-       m_con->Send(peer_id, channelnum, data, reliable);
+       m_con->Send(peer_id, channelnum, pkt, reliable);
+
+       if (deletepkt)
+               delete pkt;
 }
 
 void ClientInterface::sendToAll(u16 channelnum,
-               SharedBuffer<u8> data, bool reliable)
+               NetworkPacket* pkt, bool reliable)
 {
        JMutexAutoLock clientslock(m_clients_mutex);
        for(std::map<u16, RemoteClient*>::iterator
                i = m_clients.begin();
-               i != m_clients.end(); ++i)
-       {
+               i != m_clients.end(); ++i) {
                RemoteClient *client = i->second;
 
-               if (client->net_proto_version != 0)
-               {
-                       m_con->Send(client->peer_id, channelnum, data, reliable);
+               if (client->net_proto_version != 0) {
+                       m_con->Send(client->peer_id, channelnum, pkt, reliable);
                }
        }
+
+       delete pkt;
 }
 
 RemoteClient* ClientInterface::getClientNoEx(u16 peer_id, ClientState state_min)