Removed many unnecessary copies of TransportAddress.

This commit is contained in:
hiker 2015-10-16 23:55:54 +11:00
parent 9b5e4e9201
commit aeec90fa0d
14 changed files with 40 additions and 29 deletions

View File

@ -86,7 +86,7 @@ void NetworkManager::abort()
//-----------------------------------------------------------------------------
bool NetworkManager::connect(TransportAddress peer)
bool NetworkManager::connect(const TransportAddress& peer)
{
if (peerExists(peer))
return isConnectedTo(peer);
@ -193,9 +193,9 @@ void NetworkManager::setLogin(std::string username, std::string password)
//-----------------------------------------------------------------------------
void NetworkManager::setPublicAddress(TransportAddress addr)
void NetworkManager::setPublicAddress(const TransportAddress& addr)
{
m_public_address = addr;
m_public_address.copy(addr);
}
//-----------------------------------------------------------------------------
@ -233,14 +233,14 @@ void NetworkManager::removePeer(STKPeer* peer)
//-----------------------------------------------------------------------------
bool NetworkManager::peerExists(TransportAddress peer)
bool NetworkManager::peerExists(const TransportAddress& peer)
{
return m_localhost->peerExists(peer);
}
//-----------------------------------------------------------------------------
bool NetworkManager::isConnectedTo(TransportAddress peer)
bool NetworkManager::isConnectedTo(const TransportAddress& peer)
{
return m_localhost->isConnectedTo(peer);
}

View File

@ -64,7 +64,7 @@ class NetworkManager : public AbstractSingleton<NetworkManager>
* \param peer : The transport address which you want to connect to.
* \return True if we're successfully connected. False elseway.
*/
virtual bool connect(TransportAddress peer);
virtual bool connect(const TransportAddress& peer);
/** \brief Changes the socket working mode.
* Sockets can be in two modes : The ENet mode and a mode we will call
* the 'Raw' mode. In the ENet mode, the socket will be read as
@ -90,12 +90,12 @@ class NetworkManager : public AbstractSingleton<NetworkManager>
// raw data management
void setLogin(std::string username, std::string password);
void setPublicAddress(TransportAddress addr);
void setPublicAddress(const TransportAddress& addr);
void removePeer(STKPeer* peer);
// getters
virtual bool peerExists(TransportAddress peer);
virtual bool isConnectedTo(TransportAddress peer);
virtual bool peerExists(const TransportAddress& peer);
virtual bool isConnectedTo(const TransportAddress& peer);
virtual bool isServer() = 0;
inline bool isClient() { return !isServer(); }
@ -103,7 +103,7 @@ class NetworkManager : public AbstractSingleton<NetworkManager>
STKHost* getHost() { return m_localhost; }
std::vector<STKPeer*> getPeers() { return m_peers; }
unsigned int getPeerCount() { return (int)m_peers.size(); }
TransportAddress getPublicAddress() { return m_public_address; }
const TransportAddress& getPublicAddress() { return m_public_address; }
GameSetup* getGameSetup() { return m_game_setup; }
protected:

View File

@ -31,7 +31,7 @@
ClientLobbyRoomProtocol::ClientLobbyRoomProtocol(const TransportAddress& server_address)
: LobbyRoomProtocol(NULL)
{
m_server_address = server_address;
m_server_address.copy(server_address);
m_server = NULL;
} // ClientLobbyRoomProtocol

View File

@ -233,7 +233,7 @@ void ConnectToServer::asynchronousUpdate()
delete[] table;
#endif
m_server_address = sender;
m_server_address.copy(sender);
m_state = CONNECTING;
}
}

View File

@ -182,7 +182,7 @@ std::string GetPublicAddress::parseStunResponse()
Log::debug("GetPublicAddress", "The public address has been found: %s",
address.toString().c_str());
TransportAddress* addr = static_cast<TransportAddress*>(m_callback_object);
*addr = address;
addr->copy(address);
// The address and the port are known, so the connection can be closed
m_state = EXITING;

View File

@ -21,9 +21,10 @@
#include "network/network_manager.hpp"
#include "utils/time.hpp"
PingProtocol::PingProtocol(const TransportAddress& ping_dst, double delay_between_pings) : Protocol(NULL, PROTOCOL_SILENT)
PingProtocol::PingProtocol(const TransportAddress& ping_dst, double delay_between_pings)
: Protocol(NULL, PROTOCOL_SILENT)
{
m_ping_dst = ping_dst;
m_ping_dst.copy(ping_dst);
m_delay_between_pings = delay_between_pings;
}

View File

@ -42,7 +42,7 @@ void QuickJoinProtocol::asynchronousUpdate()
{
if (m_state == NONE)
{
TransportAddress addr = NetworkManager::getInstance()->getPublicAddress();
const TransportAddress& addr = NetworkManager::getInstance()->getPublicAddress();
m_request = new Online::XMLRequest();
PlayerManager::setUserDetails(m_request, "quick-join", Online::API::SERVER_PATH);

View File

@ -180,7 +180,7 @@ void ServerLobbyRoomProtocol::checkIncomingConnectionRequests()
if (StkTime::getRealTime() > last_poll_time+10.0)
{
last_poll_time = StkTime::getRealTime();
TransportAddress addr = NetworkManager::getInstance()->getPublicAddress();
const TransportAddress &addr = NetworkManager::getInstance()->getPublicAddress();
Online::XMLRequest* request = new Online::XMLRequest();
PlayerManager::setUserDetails(request, "poll-connection-requests", Online::API::SERVER_PATH);

View File

@ -41,7 +41,7 @@ void ShowPublicAddress::asynchronousUpdate()
{
if (m_state == NONE)
{
TransportAddress addr = NetworkManager::getInstance()->getPublicAddress();
const TransportAddress& addr = NetworkManager::getInstance()->getPublicAddress();
m_request = new Online::XMLRequest();
PlayerManager::setUserDetails(m_request, "set", Online::API::SERVER_PATH);

View File

@ -40,7 +40,7 @@ void StartServer::asynchronousUpdate()
{
if (m_state == NONE)
{
TransportAddress addr = NetworkManager::getInstance()->getPublicAddress();
const TransportAddress& addr = NetworkManager::getInstance()->getPublicAddress();
m_request = new Online::XMLRequest();
PlayerManager::setUserDetails(m_request, "start", Online::API::SERVER_PATH);

View File

@ -45,7 +45,7 @@ void StopServer::asynchronousUpdate()
{
if (m_state == NONE)
{
TransportAddress addr = NetworkManager::getInstance()->getPublicAddress();
const TransportAddress& addr = NetworkManager::getInstance()->getPublicAddress();
m_request = new Online::XMLRequest();
PlayerManager::setUserDetails(m_request, "stop", Online::API::SERVER_PATH);

View File

@ -201,7 +201,7 @@ void STKHost::stopListening()
// ----------------------------------------------------------------------------
void STKHost::sendRawPacket(uint8_t* data, int length, TransportAddress dst)
void STKHost::sendRawPacket(uint8_t* data, int length, const TransportAddress& dst)
{
struct sockaddr_in to;
int to_len = sizeof(to);
@ -278,7 +278,7 @@ uint8_t* STKHost::receiveRawPacket(TransportAddress* sender)
// ----------------------------------------------------------------------------
uint8_t* STKHost::receiveRawPacket(TransportAddress sender, int max_tries)
uint8_t* STKHost::receiveRawPacket(const TransportAddress& sender, int max_tries)
{
uint8_t* buffer; // max size needed normally (only used for stun)
buffer = (uint8_t*)(malloc(sizeof(uint8_t)*2048));
@ -333,7 +333,7 @@ void STKHost::broadcastPacket(const NetworkString& data, bool reliable)
// ----------------------------------------------------------------------------
bool STKHost::peerExists(TransportAddress peer)
bool STKHost::peerExists(const TransportAddress& peer)
{
for (unsigned int i = 0; i < m_host->peerCount; i++)
{
@ -348,7 +348,7 @@ bool STKHost::peerExists(TransportAddress peer)
// ----------------------------------------------------------------------------
bool STKHost::isConnectedTo(TransportAddress peer)
bool STKHost::isConnectedTo(const TransportAddress& peer)
{
for (unsigned int i = 0; i < m_host->peerCount; i++)
{

View File

@ -118,7 +118,7 @@ class STKHost
* \param dst : Destination of the packet.
*/
void sendRawPacket(uint8_t* data, int length,
TransportAddress dst);
const TransportAddress& dst);
/*! \brief Receives a packet directly from the network interface.
* Receive a packet whithout ENet processing it.
* \return A string containing the data of the received packet.
@ -138,7 +138,7 @@ class STKHost
* \return A string containing the data of the received packet
* matching the sender's ip address.
*/
uint8_t* receiveRawPacket(TransportAddress sender, int max_tries = -1);
uint8_t* receiveRawPacket(const TransportAddress& sender, int max_tries = -1);
/*! \brief Broadcasts a packet to all peers.
* \param data : Data to send.
*/
@ -147,11 +147,11 @@ class STKHost
/*! \brief Tells if a peer is known.
* \return True if the peer is known, false elseway.
*/
bool peerExists(TransportAddress peer_address);
bool peerExists(const TransportAddress& peer_address);
/*! \brief Tells if a peer is known and connected.
* \return True if the peer is known and connected, false elseway.
*/
bool isConnectedTo(TransportAddress peer_address);
bool isConnectedTo(const TransportAddress& peer_address);
/*! \brief Returns true when the thread should stop listening. */
int mustStopListening();

View File

@ -22,6 +22,7 @@
#ifndef TYPES_HPP
#define TYPES_HPP
#include "utils/no_copy.hpp"
#include "utils/string_utils.hpp"
#include "utils/types.hpp"
@ -46,7 +47,7 @@ class CallbackObject
* \brief Describes a transport-layer address.
* For IP networks, a transport address is the couple ip:port.
*/
class TransportAddress : public CallbackObject
class TransportAddress : public CallbackObject, public NoCopy
{
private:
uint32_t m_ip; //!< The IPv4 address
@ -70,6 +71,15 @@ public:
// ------------------------------------------------------------------------
~TransportAddress() {}
// ------------------------------------------------------------------------
/** A copy function (to replace the copy constructor which is disabled
* using NoCopy). */
void copy(const TransportAddress &other)
{
m_ip = other.m_ip;
m_port = other.m_port;
} // copy
// ------------------------------------------------------------------------
/** Resets ip and port to 0. */
void clear()