summaryrefslogtreecommitdiff
path: root/src/server.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2010-12-20 14:04:31 +0200
committerPerttu Ahola <celeron55@gmail.com>2010-12-20 14:04:31 +0200
commit5a36956f75959887f75fda90c39d56181cd1f196 (patch)
tree7532418d0f0343bde620932e226446bb75408f86 /src/server.cpp
parentab7477c4c3e2a3647dc4fb65c71567946d33b0e3 (diff)
downloadminetest-5a36956f75959887f75fda90c39d56181cd1f196.tar.gz
minetest-5a36956f75959887f75fda90c39d56181cd1f196.tar.bz2
minetest-5a36956f75959887f75fda90c39d56181cd1f196.zip
working time-of-day sending from server to client
Diffstat (limited to 'src/server.cpp')
-rw-r--r--src/server.cpp59
1 files changed, 55 insertions, 4 deletions
diff --git a/src/server.cpp b/src/server.cpp
index a2dfc8269..7260e21d3 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -31,6 +31,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "constants.h"
#include "voxel.h"
+#define BLOCK_EMERGE_FLAG_FROMDISK (1<<0)
+
void * ServerThread::Thread()
{
ThreadStarted();
@@ -121,7 +123,7 @@ void * EmergeThread::Thread()
// Check flags
u8 flags = i.getNode()->getValue();
- if((flags & TOSERVER_GETBLOCK_FLAG_OPTIONAL) == false)
+ if((flags & BLOCK_EMERGE_FLAG_FROMDISK) == false)
optional = false;
}
@@ -541,7 +543,7 @@ void RemoteClient::GetNextBlocks(Server *server, float dtime,
u8 flags = 0;
if(generate == false)
- flags |= TOSERVER_GETBLOCK_FLAG_OPTIONAL;
+ flags |= BLOCK_EMERGE_FLAG_FROMDISK;
server->m_emerge_queue.addBlock(peer_id, p, flags);
server->m_emergethread.trigger();
@@ -757,7 +759,7 @@ void RemoteClient::SendObjectData(
m_num_blocks_in_emerge_queue.m_value++;*/
// Add to queue as an anonymous fetch from disk
- u8 flags = TOSERVER_GETBLOCK_FLAG_OPTIONAL;
+ u8 flags = BLOCK_EMERGE_FLAG_FROMDISK;
server->m_emerge_queue.addBlock(0, p, flags);
server->m_emergethread.trigger();
}
@@ -926,7 +928,10 @@ Server::Server(
m_env(new ServerMap(mapsavedir, hm_params, map_params), dout_server),
m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, this),
m_thread(this),
- m_emergethread(this)
+ m_emergethread(this),
+ m_time_of_day(12000),
+ m_time_counter(0),
+ m_time_of_day_send_timer(0)
{
m_flowwater_timer = 0.0;
m_print_info_timer = 0.0;
@@ -1025,6 +1030,45 @@ void Server::AsyncRunStep()
JMutexAutoLock lock1(m_step_dtime_mutex);
m_step_dtime -= dtime;
}
+
+ /*
+ Update m_time_of_day
+ */
+ {
+ m_time_counter += dtime;
+ f32 speed = g_settings.getFloat("time_speed") * 24000./(24.*3600);
+ u32 units = (u32)(m_time_counter*speed);
+ m_time_counter -= (f32)units / speed;
+ m_time_of_day.set((m_time_of_day.get() + units) % 24000);
+
+ //dstream<<"Server: m_time_of_day = "<<m_time_of_day.get()<<std::endl;
+
+ /*
+ Send to clients at constant intervals
+ */
+
+ m_time_of_day_send_timer -= dtime;
+ if(m_time_of_day_send_timer < 0.0)
+ {
+ m_time_of_day_send_timer = g_settings.getFloat("time_send_interval");
+
+ //JMutexAutoLock envlock(m_env_mutex);
+ JMutexAutoLock conlock(m_con_mutex);
+
+ for(core::map<u16, RemoteClient*>::Iterator
+ i = m_clients.getIterator();
+ i.atEnd() == false; i++)
+ {
+ RemoteClient *client = i.getNode()->getValue();
+ //Player *player = m_env.getPlayer(client->peer_id);
+
+ SharedBuffer<u8> data = makePacket_TOCLIENT_TIME_OF_DAY(
+ m_time_of_day.get());
+ // Send as reliable
+ m_con.Send(client->peer_id, 0, data, true);
+ }
+ }
+ }
//dstream<<"Server steps "<<dtime<<std::endl;
@@ -1434,6 +1478,13 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
// Send inventory to player
SendInventory(peer->id);
+
+ // Send time of day
+ {
+ SharedBuffer<u8> data = makePacket_TOCLIENT_TIME_OF_DAY(
+ m_time_of_day.get());
+ m_con.Send(peer->id, 0, data, true);
+ }
return;
}