#include <IFileSystem.h>
#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"
#include "minimap.h"
#include "mods.h"
#include "profiler.h"
+#include "shader.h"
#include "gettext.h"
#include "clientmap.h"
#include "clientmedia.h"
#include "script/scripting_client.h"
#include "game.h"
#include "chatmessage.h"
+#include "translation.h"
extern gui::IGUIEnvironment* guienv;
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)),
Client::~Client()
{
m_shutdown = true;
- m_con.Disconnect();
+ m_con->Disconnect();
m_mesh_update_thread.stop();
m_mesh_update_thread.wait();
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;
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);
}
}
return true;
}
- errorstream<<"Client: Don't know how to load file \""
- <<filename<<"\""<<std::endl;
+ const char *translate_ext[] = {
+ ".tr", NULL
+ };
+ name = removeStringEnd(filename, translate_ext);
+ if (!name.empty()) {
+ verbosestream << "Client: Loading translation: "
+ << "\"" << filename << "\"" << std::endl;
+ g_translations->loadTranslation(data);
+ return true;
+ }
+
+ errorstream << "Client: Don't know how to load file \""
+ << filename << "\"" << std::endl;
return false;
}
void Client::ReceiveAll()
{
- DSTACK(FUNCTION_NAME);
u64 start_ms = porting::getTimeMs();
for(;;)
{
void Client::Receive()
{
- DSTACK(FUNCTION_NAME);
NetworkPacket pkt;
- m_con.Receive(&pkt);
+ m_con->Receive(&pkt);
ProcessData(&pkt);
}
*/
void Client::ProcessData(NetworkPacket *pkt)
{
- DSTACK(FUNCTION_NAME);
-
ToClientCommand command = (ToClientCommand) pkt->getCommand();
u32 sender_peer_id = pkt->getPeerId();
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);
void Client::sendDamage(u8 damage)
{
- DSTACK(FUNCTION_NAME);
-
NetworkPacket pkt(TOSERVER_DAMAGE, sizeof(u8));
pkt << damage;
Send(&pkt);
void Client::sendBreath(u16 breath)
{
- DSTACK(FUNCTION_NAME);
-
// Protocol v29 make this obsolete
if (m_proto_ver >= 29)
return;
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));
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
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)
}
}
-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)
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()
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;