diff options
author | Perttu Ahola <celeron55@gmail.com> | 2011-12-01 23:55:57 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2011-12-01 23:55:57 +0200 |
commit | 08a10b8a6a77eb729d609979ee822134d5d7a645 (patch) | |
tree | 8ea920f595acd2800bf55beeb9341c8af7d675ff | |
parent | af322405454191846507b91251d655c2b0aa864b (diff) | |
download | minetest-08a10b8a6a77eb729d609979ee822134d5d7a645.tar.gz minetest-08a10b8a6a77eb729d609979ee822134d5d7a645.tar.bz2 minetest-08a10b8a6a77eb729d609979ee822134d5d7a645.zip |
Remove stuff made obsolete by making players more ActiveObject-like and raise protocol version number by one (because it is not compatible at all anymore)
-rw-r--r-- | minetest.conf.example | 2 | ||||
-rw-r--r-- | src/client.cpp | 283 | ||||
-rw-r--r-- | src/clientserver.h | 8 | ||||
-rw-r--r-- | src/defaultsettings.cpp | 1 | ||||
-rw-r--r-- | src/server.cpp | 180 | ||||
-rw-r--r-- | src/server.h | 13 |
6 files changed, 7 insertions, 480 deletions
diff --git a/minetest.conf.example b/minetest.conf.example index e0c43d728..e936e05fc 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -135,8 +135,6 @@ # Profiler data print interval. #0 = disable. #profiler_print_interval = 0 #enable_mapgen_debug_info = false -# Player and object positions are sent at intervals specified by this -#objectdata_interval = 0.2 #active_object_send_range_blocks = 3 #active_block_range = 2 #max_simultaneous_block_sends_per_client = 2 diff --git a/src/client.cpp b/src/client.cpp index a165627e5..d264713e2 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -940,222 +940,6 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) //infostream<<"Adding mesh update task for received block"<<std::endl; addUpdateMeshTaskWithEdge(p, true); } - else if(command == TOCLIENT_PLAYERPOS) - { - infostream<<"Received deprecated TOCLIENT_PLAYERPOS" - <<std::endl; - /*u16 our_peer_id; - { - //JMutexAutoLock lock(m_con_mutex); //bulk comment-out - our_peer_id = m_con.GetPeerID(); - } - // Cancel if we don't have a peer id - if(our_peer_id == PEER_ID_INEXISTENT){ - infostream<<"TOCLIENT_PLAYERPOS cancelled: " - "we have no peer id" - <<std::endl; - return; - }*/ - - { //envlock - //JMutexAutoLock envlock(m_env_mutex); //bulk comment-out - - u32 player_size = 2+12+12+4+4; - - u32 player_count = (datasize-2) / player_size; - u32 start = 2; - for(u32 i=0; i<player_count; i++) - { - u16 peer_id = readU16(&data[start]); - - Player *player = m_env.getPlayer(peer_id); - - // Skip if player doesn't exist - if(player == NULL) - { - start += player_size; - continue; - } - - // Skip if player is local player - if(player->isLocal()) - { - start += player_size; - continue; - } - - v3s32 ps = readV3S32(&data[start+2]); - v3s32 ss = readV3S32(&data[start+2+12]); - s32 pitch_i = readS32(&data[start+2+12+12]); - s32 yaw_i = readS32(&data[start+2+12+12+4]); - /*infostream<<"Client: got " - <<"pitch_i="<<pitch_i - <<" yaw_i="<<yaw_i<<std::endl;*/ - f32 pitch = (f32)pitch_i / 100.0; - f32 yaw = (f32)yaw_i / 100.0; - v3f position((f32)ps.X/100., (f32)ps.Y/100., (f32)ps.Z/100.); - v3f speed((f32)ss.X/100., (f32)ss.Y/100., (f32)ss.Z/100.); - player->setPosition(position); - player->setSpeed(speed); - player->setPitch(pitch); - player->setYaw(yaw); - - /*infostream<<"Client: player "<<peer_id - <<" pitch="<<pitch - <<" yaw="<<yaw<<std::endl;*/ - - start += player_size; - } - } //envlock - } - else if(command == TOCLIENT_PLAYERINFO) - { - infostream<<"Client received DEPRECATED TOCLIENT_PLAYERINFO"<<std::endl; -#if 0 - u16 our_peer_id; - { - //JMutexAutoLock lock(m_con_mutex); //bulk comment-out - our_peer_id = m_con.GetPeerID(); - } - // Cancel if we don't have a peer id - if(our_peer_id == PEER_ID_INEXISTENT){ - infostream<<"TOCLIENT_PLAYERINFO cancelled: " - "we have no peer id" - <<std::endl; - return; - } - - //infostream<<"Client: Server reports players:"<<std::endl; - - { //envlock - //JMutexAutoLock envlock(m_env_mutex); //bulk comment-out - - u32 item_size = 2+PLAYERNAME_SIZE; - u32 player_count = (datasize-2) / item_size; - u32 start = 2; - // peer_ids - core::list<u16> players_alive; - for(u32 i=0; i<player_count; i++) - { - // Make sure the name ends in '\0' - data[start+2+20-1] = 0; - - u16 peer_id = readU16(&data[start]); - - players_alive.push_back(peer_id); - - /*infostream<<"peer_id="<<peer_id - <<" name="<<((char*)&data[start+2])<<std::endl;*/ - - // Don't update the info of the local player - if(peer_id == our_peer_id) - { - start += item_size; - continue; - } - - Player *player = m_env.getPlayer(peer_id); - - // Create a player if it doesn't exist - if(player == NULL) - { - player = new RemotePlayer(this, - m_device->getSceneManager()->getRootSceneNode(), - m_device, - -1); - player->peer_id = peer_id; - m_env.addPlayer(player); - infostream<<"Client: Adding new player " - <<peer_id<<std::endl; - } - - player->updateName((char*)&data[start+2]); - - start += item_size; - } - - /* - Remove those players from the environment that - weren't listed by the server. - */ - //infostream<<"Removing dead players"<<std::endl; - core::list<Player*> players = m_env.getPlayers(); - core::list<Player*>::Iterator ip; - for(ip=players.begin(); ip!=players.end(); ip++) - { - // Ingore local player - if((*ip)->isLocal()) - continue; - - // Warn about a special case - if((*ip)->peer_id == 0) - { - infostream<<"Client: Removing " - "dead player with id=0"<<std::endl; - } - - bool is_alive = false; - core::list<u16>::Iterator i; - for(i=players_alive.begin(); i!=players_alive.end(); i++) - { - if((*ip)->peer_id == *i) - { - is_alive = true; - break; - } - } - /*infostream<<"peer_id="<<((*ip)->peer_id) - <<" is_alive="<<is_alive<<std::endl;*/ - if(is_alive) - continue; - infostream<<"Removing dead player "<<(*ip)->peer_id - <<std::endl; - m_env.removePlayer((*ip)->peer_id); - } - } //envlock -#endif - } - else if(command == TOCLIENT_SECTORMETA) - { - infostream<<"Client received DEPRECATED TOCLIENT_SECTORMETA"<<std::endl; -#if 0 - /* - [0] u16 command - [2] u8 sector count - [3...] v2s16 pos + sector metadata - */ - if(datasize < 3) - return; - - //infostream<<"Client received TOCLIENT_SECTORMETA"<<std::endl; - - { //envlock - //JMutexAutoLock envlock(m_env_mutex); //bulk comment-out - - std::string datastring((char*)&data[2], datasize-2); - std::istringstream is(datastring, std::ios_base::binary); - - u8 buf[4]; - - is.read((char*)buf, 1); - u16 sector_count = readU8(buf); - - //infostream<<"sector_count="<<sector_count<<std::endl; - - for(u16 i=0; i<sector_count; i++) - { - // Read position - is.read((char*)buf, 4); - v2s16 pos = readV2S16(buf); - /*infostream<<"Client: deserializing sector at " - <<"("<<pos.X<<","<<pos.Y<<")"<<std::endl;*/ - // Create sector - assert(m_env.getMap().mapType() == MAPTYPE_CLIENT); - ((ClientMap&)m_env.getMap()).deSerializeSector(pos, is); - } - } //envlock -#endif - } else if(command == TOCLIENT_INVENTORY) { if(datasize < 3) @@ -1190,73 +974,6 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) //player->inventory.print(infostream); } } - //DEBUG - else if(command == TOCLIENT_OBJECTDATA) - { - // Strip command word and create a stringstream - std::string datastring((char*)&data[2], datasize-2); - std::istringstream is(datastring, std::ios_base::binary); - - u8 buf[12]; - - /* - Read players - */ - - is.read((char*)buf, 2); - u16 playercount = readU16(buf); - - for(u16 i=0; i<playercount; i++) - { - is.read((char*)buf, 2); - u16 peer_id = readU16(buf); - is.read((char*)buf, 12); - v3s32 p_i = readV3S32(buf); - is.read((char*)buf, 12); - v3s32 s_i = readV3S32(buf); - is.read((char*)buf, 4); - s32 pitch_i = readS32(buf); - is.read((char*)buf, 4); - s32 yaw_i = readS32(buf); - - Player *player = m_env.getPlayer(peer_id); - - // Skip if player doesn't exist - if(player == NULL) - { - continue; - } - - // Skip if player is local player - if(player->isLocal()) - { - continue; - } - - f32 pitch = (f32)pitch_i / 100.0; - f32 yaw = (f32)yaw_i / 100.0; - v3f position((f32)p_i.X/100., (f32)p_i.Y/100., (f32)p_i.Z/100.); - v3f speed((f32)s_i.X/100., (f32)s_i.Y/100., (f32)s_i.Z/100.); - - player->setPosition(position); - player->setSpeed(speed); - player->setPitch(pitch); - player->setYaw(yaw); - } - - /* - Read block objects - NOTE: Deprecated stuff - */ - - // Read active block count - u16 blockcount = readU16(is); - if(blockcount != 0){ - infostream<<"TOCLIENT_OBJECTDATA: blockcount != 0 " - "not supported"<<std::endl; - return; - } - } else if(command == TOCLIENT_TIME_OF_DAY) { if(datasize < 4) diff --git a/src/clientserver.h b/src/clientserver.h index ff9fc31f9..4d6cd716d 100644 --- a/src/clientserver.h +++ b/src/clientserver.h @@ -35,9 +35,11 @@ with this program; if not, write to the Free Software Foundation, Inc., Add TOSERVER_INTERACT Obsolete TOSERVER_CLICK_ACTIVEOBJECT Obsolete TOSERVER_GROUND_ACTION + PROTOCOL_VERSION 5: + Make players to be handled mostly as ActiveObjects */ -#define PROTOCOL_VERSION 4 +#define PROTOCOL_VERSION 5 #define PROTOCOL_ID 0x4f457403 @@ -76,7 +78,7 @@ enum ToClientCommand [N+2+12+12+4] s32 yaw*100 */ - TOCLIENT_PLAYERINFO = 0x24, + TOCLIENT_PLAYERINFO = 0x24, // Obsolete /* [0] u16 command // Followed by an arbitary number of these: @@ -100,7 +102,7 @@ enum ToClientCommand [2] serialized inventory */ - TOCLIENT_OBJECTDATA = 0x28, + TOCLIENT_OBJECTDATA = 0x28, // Obsolete /* Sent as unreliable. diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index a1e3ff998..0c1e8e63c 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -96,7 +96,6 @@ void set_default_settings(Settings *settings) settings->setDefault("profiler_print_interval", "0"); settings->setDefault("enable_mapgen_debug_info", "false"); - settings->setDefault("objectdata_interval", "0.2"); settings->setDefault("active_object_send_range_blocks", "3"); settings->setDefault("active_block_range", "2"); //settings->setDefault("max_simultaneous_block_sends_per_client", "1"); diff --git a/src/server.cpp b/src/server.cpp index 2dceb805b..a461c95e8 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -750,105 +750,6 @@ queue_full_break: infostream<<"GetNextBlocks duration: "<<timer_result<<" (!=0)"<<std::endl;*/ } -void RemoteClient::SendObjectData( - Server *server, - float dtime, - core::map<v3s16, bool> &stepped_blocks - ) -{ - DSTACK(__FUNCTION_NAME); - - // Can't send anything without knowing version - if(serialization_version == SER_FMT_VER_INVALID) - { - infostream<<"RemoteClient::SendObjectData(): Not sending, no version." - <<std::endl; - return; - } - - /* - Send a TOCLIENT_OBJECTDATA packet. - Sent as unreliable. - - u16 command - u16 number of player positions - for each player: - u16 peer_id - v3s32 position*100 - v3s32 speed*100 - s32 pitch*100 - s32 yaw*100 - u16 count of blocks - for each block: - block objects - */ - - std::ostringstream os(std::ios_base::binary); - u8 buf[12]; - - // Write command - writeU16(buf, TOCLIENT_OBJECTDATA); - os.write((char*)buf, 2); - - /* - Get and write player data - */ - - // Get connected players - core::list<Player*> players = server->m_env->getPlayers(true); - - // Write player count - u16 playercount = players.size(); - writeU16(buf, playercount); - os.write((char*)buf, 2); - - core::list<Player*>::Iterator i; - for(i = players.begin(); - i != players.end(); i++) - { - Player *player = *i; - - v3f pf = player->getPosition(); - v3f sf = player->getSpeed(); - - v3s32 position_i(pf.X*100, pf.Y*100, pf.Z*100); - v3s32 speed_i (sf.X*100, sf.Y*100, sf.Z*100); - s32 pitch_i (player->getPitch() * 100); - s32 yaw_i (player->getYaw() * 100); - - writeU16(buf, player->peer_id); - os.write((char*)buf, 2); - writeV3S32(buf, position_i); - os.write((char*)buf, 12); - writeV3S32(buf, speed_i); - os.write((char*)buf, 12); - writeS32(buf, pitch_i); - os.write((char*)buf, 4); - writeS32(buf, yaw_i); - os.write((char*)buf, 4); - } - - /* - Get and write object data (dummy, for compatibility) - */ - - // Write block count - writeU16(buf, 0); - os.write((char*)buf, 2); - - /* - Send data - */ - - //infostream<<"Server: Sending object data to "<<peer_id<<std::endl; - - // Make data buffer - std::string s = os.str(); - SharedBuffer<u8> data((u8*)s.c_str(), s.size()); - // Send as unreliable - server->m_con.Send(peer_id, 0, data, false); -} - void RemoteClient::GotBlock(v3s16 p) { if(m_blocks_sending.find(p) != NULL) @@ -1915,25 +1816,6 @@ void Server::AsyncRunStep() } /* - Send object positions - */ - { - float &counter = m_objectdata_timer; - counter += dtime; - if(counter >= g_settings->getFloat("objectdata_interval")) - { - JMutexAutoLock lock1(m_env_mutex); - JMutexAutoLock lock2(m_con_mutex); - - //ScopeProfiler sp(g_profiler, "Server: sending player positions"); - - SendObjectData(counter); - - counter = 0.0; - } - } - - /* Trigger emergethread (it somehow gets to a non-triggered but bysy state sometimes) */ @@ -2286,7 +2168,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) SendTextures(peer_id); // Send player info to all players - SendPlayerInfos(); + //SendPlayerInfos(); // Send inventory to player UpdateCrafting(peer_id); @@ -3953,64 +3835,6 @@ void Server::SendCraftItemDef(con::Connection &con, u16 peer_id, Non-static send methods */ -void Server::SendObjectData(float dtime) -{ - DSTACK(__FUNCTION_NAME); - - core::map<v3s16, bool> stepped_blocks; - - for(core::map<u16, RemoteClient*>::Iterator - i = m_clients.getIterator(); - i.atEnd() == false; i++) - { - u16 peer_id = i.getNode()->getKey(); - RemoteClient *client = i.getNode()->getValue(); - assert(client->peer_id == peer_id); - - if(client->serialization_version == SER_FMT_VER_INVALID) - continue; - - client->SendObjectData(this, dtime, stepped_blocks); - } -} - -void Server::SendPlayerInfos() -{ - DSTACK(__FUNCTION_NAME); - - //JMutexAutoLock envlock(m_env_mutex); - - // Get connected players - core::list<Player*> players = m_env->getPlayers(true); - - u32 player_count = players.getSize(); - u32 datasize = 2+(2+PLAYERNAME_SIZE)*player_count; - - SharedBuffer<u8> data(datasize); - writeU16(&data[0], TOCLIENT_PLAYERINFO); - - u32 start = 2; - core::list<Player*>::Iterator i; - for(i = players.begin(); - i != players.end(); i++) - { - Player *player = *i; - - /*infostream<<"Server sending player info for player with " - "peer_id="<<player->peer_id<<std::endl;*/ - - writeU16(&data[start], player->peer_id); - memset((char*)&data[start+2], 0, PLAYERNAME_SIZE); - snprintf((char*)&data[start+2], PLAYERNAME_SIZE, "%s", player->getName()); - start += 2+PLAYERNAME_SIZE; - } - - //JMutexAutoLock conlock(m_con_mutex); - - // Send as reliable - m_con.SendToAll(0, data, true); -} - void Server::SendInventory(u16 peer_id) { DSTACK(__FUNCTION_NAME); @@ -5042,7 +4866,7 @@ void Server::handlePeerChange(PeerChange &c) m_clients.remove(c.peer_id); // Send player info to all remaining clients - SendPlayerInfos(); + //SendPlayerInfos(); // Send leave chat message to all remaining clients BroadcastChatMessage(message); diff --git a/src/server.h b/src/server.h index 7568463b2..0fe1979b7 100644 --- a/src/server.h +++ b/src/server.h @@ -273,17 +273,6 @@ public: void GetNextBlocks(Server *server, float dtime, core::array<PrioritySortedBlockTransfer> &dest); - /* - Connection and environment should be locked when this is called. - steps() objects of blocks not found in active_blocks, then - adds those blocks to active_blocks - */ - void SendObjectData( - Server *server, - float dtime, - core::map<v3s16, bool> &stepped_blocks - ); - void GotBlock(v3s16 p); void SentBlock(v3s16 p); @@ -541,8 +530,6 @@ private: */ // Envlock and conlock should be locked when calling these - void SendObjectData(float dtime); - void SendPlayerInfos(); void SendInventory(u16 peer_id); // send wielded item info about player to all void SendWieldedItem(const Player *player); |