#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",
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,
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;
/*
// 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;
}
m_clients_names.clear();
- if(clients.size() != 0)
+ if(!clients.empty())
infostream<<"Players:"<<std::endl;
for(std::list<u16>::iterator
i = clients.begin();
}
}
-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)