X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclient.cpp;h=09ac5196d8e9c94c7ffa8ef2b7bc4d09b334258c;hb=1105a14bccefb48a0e264fe19190c39629259338;hp=dc8e0d4e2cc38de7f0ed8ce1318190c7b2a3be69;hpb=85511a642f851100d0d856f4ecbe7fea7a7bb049;p=minetest.git diff --git a/src/client.cpp b/src/client.cpp index dc8e0d4e2..09ac5196d 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -24,8 +24,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "client.h" #include "network/clientopcodes.h" +#include "network/connection.h" #include "network/networkpacket.h" #include "threading/mutex_auto_lock.h" +#include "client/clientevent.h" #include "client/renderingengine.h" #include "util/auth.h" #include "util/directiontables.h" @@ -39,6 +41,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "minimap.h" #include "mods.h" #include "profiler.h" +#include "shader.h" #include "gettext.h" #include "clientmap.h" #include "clientmedia.h" @@ -49,6 +52,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "script/scripting_client.h" #include "game.h" #include "chatmessage.h" +#include "translation.h" extern gui::IGUIEnvironment* guienv; @@ -82,7 +86,7 @@ Client::Client( tsrc, this ), m_particle_manager(&m_env), - m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this), + m_con(new con::Connection(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this)), m_address_name(address_name), m_server_ser_ver(SER_FMT_VER_INVALID), m_last_chat_message_sent(time(NULL)), @@ -218,7 +222,7 @@ bool Client::isShutdown() Client::~Client() { m_shutdown = true; - m_con.Disconnect(); + m_con->Disconnect(); m_mesh_update_thread.stop(); m_mesh_update_thread.wait(); @@ -248,18 +252,14 @@ Client::~Client() void Client::connect(Address address, bool is_local_server) { - DSTACK(FUNCTION_NAME); - initLocalMapSaving(address, m_address_name, is_local_server); - m_con.SetTimeoutMs(0); - m_con.Connect(address); + m_con->SetTimeoutMs(0); + m_con->Connect(address); } void Client::step(float dtime) { - DSTACK(FUNCTION_NAME); - // Limit a bit if(dtime > 2.0) dtime = 2.0; @@ -422,9 +422,9 @@ void Client::step(float dtime) sendDamage(damage); // Add to ClientEvent queue - ClientEvent event; - event.type = CE_PLAYER_DAMAGE; - event.player_damage.amount = damage; + ClientEvent *event = new ClientEvent(); + event->type = CE_PLAYER_DAMAGE; + event->player_damage.amount = damage; m_client_event_queue.push(event); } } @@ -682,8 +682,19 @@ bool Client::loadMedia(const std::string &data, const std::string &filename) return true; } - errorstream<<"Client: Don't know how to load file \"" - <loadTranslation(data); + return true; + } + + errorstream << "Client: Don't know how to load file \"" + << filename << "\"" << std::endl; return false; } @@ -758,7 +769,6 @@ void Client::initLocalMapSaving(const Address &address, void Client::ReceiveAll() { - DSTACK(FUNCTION_NAME); u64 start_ms = porting::getTimeMs(); for(;;) { @@ -784,9 +794,8 @@ void Client::ReceiveAll() void Client::Receive() { - DSTACK(FUNCTION_NAME); NetworkPacket pkt; - m_con.Receive(&pkt); + m_con->Receive(&pkt); ProcessData(&pkt); } @@ -801,8 +810,6 @@ inline void Client::handleCommand(NetworkPacket* pkt) */ void Client::ProcessData(NetworkPacket *pkt) { - DSTACK(FUNCTION_NAME); - ToClientCommand command = (ToClientCommand) pkt->getCommand(); u32 sender_peer_id = pkt->getPeerId(); @@ -853,7 +860,7 @@ void Client::ProcessData(NetworkPacket *pkt) void Client::Send(NetworkPacket* pkt) { - m_con.Send(PEER_ID_SERVER, + m_con->Send(PEER_ID_SERVER, serverCommandFactoryTable[pkt->getCommand()].channel, pkt, serverCommandFactoryTable[pkt->getCommand()].reliable); @@ -1220,8 +1227,6 @@ void Client::sendChangePassword(const std::string &oldpassword, void Client::sendDamage(u8 damage) { - DSTACK(FUNCTION_NAME); - NetworkPacket pkt(TOSERVER_DAMAGE, sizeof(u8)); pkt << damage; Send(&pkt); @@ -1229,8 +1234,6 @@ void Client::sendDamage(u8 damage) void Client::sendBreath(u16 breath) { - DSTACK(FUNCTION_NAME); - // Protocol v29 make this obsolete if (m_proto_ver >= 29) return; @@ -1242,16 +1245,12 @@ void Client::sendBreath(u16 breath) void Client::sendRespawn() { - DSTACK(FUNCTION_NAME); - NetworkPacket pkt(TOSERVER_RESPAWN, 0); Send(&pkt); } void Client::sendReady() { - DSTACK(FUNCTION_NAME); - NetworkPacket pkt(TOSERVER_CLIENT_READY, 1 + 1 + 1 + 1 + 2 + sizeof(char) * strlen(g_version_hash)); @@ -1296,7 +1295,7 @@ void Client::sendPlayerPos() u16 our_peer_id; { //MutexAutoLock lock(m_con_mutex); //bulk comment-out - our_peer_id = m_con.GetPeerID(); + our_peer_id = m_con->GetPeerID(); } // Set peer id if not set already @@ -1318,7 +1317,7 @@ void Client::sendPlayerItem(u16 item) if(myplayer == NULL) return; - u16 our_peer_id = m_con.GetPeerID(); + u16 our_peer_id = m_con->GetPeerID(); // Set peer id if not set already if(myplayer->peer_id == PEER_ID_INEXISTENT) @@ -1647,16 +1646,26 @@ void Client::addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server, bool ur } } -ClientEvent Client::getClientEvent() +ClientEvent *Client::getClientEvent() { FATAL_ERROR_IF(m_client_event_queue.empty(), "Cannot getClientEvent, queue is empty."); - ClientEvent event = m_client_event_queue.front(); + ClientEvent *event = m_client_event_queue.front(); m_client_event_queue.pop(); return event; } +bool Client::connectedToServer() +{ + return m_con->Connected(); +} + +const Address Client::getServerAddress() +{ + return m_con->GetPeerAddress(PEER_ID_SERVER); +} + float Client::mediaReceiveProgress() { if (m_media_downloader) @@ -1767,13 +1776,13 @@ void Client::afterContentReceived() float Client::getRTT() { - return m_con.getPeerStat(PEER_ID_SERVER,con::AVG_RTT); + return m_con->getPeerStat(PEER_ID_SERVER,con::AVG_RTT); } float Client::getCurRate() { - return (m_con.getLocalStat(con::CUR_INC_RATE) + - m_con.getLocalStat(con::CUR_DL_RATE)); + return (m_con->getLocalStat(con::CUR_INC_RATE) + + m_con->getLocalStat(con::CUR_DL_RATE)); } void Client::makeScreenshot() @@ -1841,6 +1850,11 @@ bool Client::shouldShowMinimap() const return !m_minimap_disabled_by_server; } +void Client::pushToEventQueue(ClientEvent *event) +{ + m_client_event_queue.push(event); +} + void Client::showGameChat(const bool show) { m_game_ui_flags->show_chat = show;