]> git.lizzy.rs Git - minetest.git/blobdiff - src/clientiface.cpp
Do not allow the m_transforming_liquid queue to increase until all RAM is consumed
[minetest.git] / src / clientiface.cpp
index 626e5da74270bbd8b13cc9338c2dc8550da56e00..1383d0b84a5f8b53e01986b928cb8efb4d797650 100644 (file)
@@ -20,6 +20,8 @@ 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"
@@ -28,11 +30,34 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "map.h"
 #include "emerge.h"
 #include "serverobject.h"              // TODO this is used for cleanup of only
+#include "main.h"                      // for g_settings
+#include "log.h"
 
-#include "util/numeric.h"
-#include "util/mathconstants.h"
+const char *ClientInterface::statenames[] = {
+       "Invalid",
+       "Disconnecting",
+       "Denied",
+       "Created",
+       "InitSent",
+       "InitDone",
+       "DefinitionsSent",
+       "Active"
+};
 
-#include "main.h"                      // for g_settings
+
+
+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(
                ServerEnvironment *env,
@@ -402,50 +427,42 @@ void RemoteClient::notifyEvent(ClientStateEvent event)
        std::ostringstream myerror;
        switch (m_state)
        {
-       case Invalid:
+       case CS_Invalid:
                //intentionally do nothing
                break;
-
-       case Created:
+       case CS_Created:
                switch(event)
                {
-               case Init:
-                       m_state = InitSent;
+               case CSE_Init:
+                       m_state = CS_InitSent;
                        break;
-
-               case Disconnect:
-                       m_state = Disconnecting;
+               case CSE_Disconnect:
+                       m_state = CS_Disconnecting;
                        break;
-
-               case SetDenied:
-                       m_state = Denied;
+               case CSE_SetDenied:
+                       m_state = CS_Denied;
                        break;
-
                /* GotInit2 SetDefinitionsSent SetMediaSent */
                default:
                        myerror << "Created: Invalid client state transition! " << event;
                        throw ClientStateError(myerror.str());
                }
                break;
-
-       case Denied:
+       case CS_Denied:
                /* don't do anything if in denied state */
                break;
-
-       case InitSent:
+       case CS_InitSent:
                switch(event)
                {
-               case GotInit2:
+               case CSE_GotInit2:
                        confirmSerializationVersion();
-                       m_state = InitDone;
+                       m_state = CS_InitDone;
                        break;
-
-               case Disconnect:
-                       m_state = Disconnecting;
+               case CSE_Disconnect:
+                       m_state = CS_Disconnecting;
                        break;
-
-               case SetDenied:
-                       m_state = Denied;
+               case CSE_SetDenied:
+                       m_state = CS_Denied;
                        break;
 
                /* Init SetDefinitionsSent SetMediaSent */
@@ -455,19 +472,17 @@ void RemoteClient::notifyEvent(ClientStateEvent event)
                }
                break;
 
-       case InitDone:
+       case CS_InitDone:
                switch(event)
                {
-               case SetDefinitionsSent:
-                       m_state = DefinitionsSent;
+               case CSE_SetDefinitionsSent:
+                       m_state = CS_DefinitionsSent;
                        break;
-
-               case Disconnect:
-                       m_state = Disconnecting;
+               case CSE_Disconnect:
+                       m_state = CS_Disconnecting;
                        break;
-
-               case SetDenied:
-                       m_state = Denied;
+               case CSE_SetDenied:
+                       m_state = CS_Denied;
                        break;
 
                /* Init GotInit2 SetMediaSent */
@@ -476,40 +491,33 @@ void RemoteClient::notifyEvent(ClientStateEvent event)
                        throw ClientStateError(myerror.str());
                }
                break;
-
-       case DefinitionsSent:
+       case CS_DefinitionsSent:
                switch(event)
                {
-               case SetClientReady:
-                       m_state = Active;
+               case CSE_SetClientReady:
+                       m_state = CS_Active;
                        break;
-
-               case Disconnect:
-                       m_state = Disconnecting;
+               case CSE_Disconnect:
+                       m_state = CS_Disconnecting;
                        break;
-
-               case SetDenied:
-                       m_state = Denied;
+               case CSE_SetDenied:
+                       m_state = CS_Denied;
                        break;
-
                /* Init GotInit2 SetDefinitionsSent */
                default:
                        myerror << "DefinitionsSent: Invalid client state transition! " << event;
                        throw ClientStateError(myerror.str());
                }
                break;
-
-       case Active:
+       case CS_Active:
                switch(event)
                {
-               case SetDenied:
-                       m_state = Denied;
+               case CSE_SetDenied:
+                       m_state = CS_Denied;
                        break;
-
-               case Disconnect:
-                       m_state = Disconnecting;
+               case CSE_Disconnect:
+                       m_state = CS_Disconnecting;
                        break;
-
                /* Init GotInit2 SetDefinitionsSent SetMediaSent SetDenied */
                default:
                        myerror << "Active: Invalid client state transition! " << event;
@@ -517,8 +525,7 @@ void RemoteClient::notifyEvent(ClientStateEvent event)
                        break;
                }
                break;
-
-       case Disconnecting:
+       case CS_Disconnecting:
                /* we are already disconnecting */
                break;
        }
@@ -596,7 +603,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();
@@ -680,7 +687,7 @@ ClientState ClientInterface::getClientState(u16 peer_id)
        // The client may not exist; clients are immediately removed if their
        // access is denied, and this event occurs later then.
        if(n == m_clients.end())
-               return Invalid;
+               return CS_Invalid;
 
        return n->second->getState();
 }
@@ -762,7 +769,9 @@ void ClientInterface::event(u16 peer_id, ClientStateEvent event)
                n->second->notifyEvent(event);
        }
 
-       if ((event == SetClientReady) || (event == Disconnect) || (event == SetDenied))
+       if ((event == CSE_SetClientReady) ||
+               (event == CSE_Disconnect)     ||
+               (event == CSE_SetDenied))
        {
                UpdatePlayerList();
        }