sync work

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/hilnius@13173 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
hilnius 2013-07-11 00:03:47 +00:00
parent b00bb5c050
commit 7665f30828
5 changed files with 28 additions and 25 deletions

View File

@ -76,6 +76,7 @@ Event::Event(ENetEvent* event)
Event::Event(const Event& event)
{
Log::verbose("Event", "Constructing a copy of the event.");
m_packet = NULL;
data = event.data;
// copy the peer

View File

@ -92,7 +92,7 @@ void NetworkManager::notifyEvent(Event* event)
if (event->type == EVENT_TYPE_CONNECTED)
{
Log::debug("NetworkManager", "A client has just connected. There are now %lu peers.", m_peers.size() + 1);
Log::info("NetworkManager", "A client has just connected. There are now %lu peers.", m_peers.size() + 1);
Log::verbose("NetworkManager", "Address of event->peer after connection : %ld", (long int)(event->peer));
// create the new peer:
m_peers.push_back(event->peer);
@ -119,14 +119,14 @@ void NetworkManager::notifyEvent(Event* event)
for (unsigned int i = 0; i < m_peers.size(); i++)
{
Log::error("NetworkManager", "Saved : %ld, Sender : %ld", (long int)(m_peers[i]), (long int)(event->peer));
if (m_peers[i] == event->peer && !removed) // remove only one
if (m_peers[i]->isSamePeer(event->peer) && !removed) // remove only one
{
delete m_peers[i];
m_peers.erase(m_peers.begin()+i, m_peers.begin()+i+1);
Log::verbose("NetworkManager", "The peer has been removed from the Network Manager.");
removed = true;
}
else if (m_peers[i] == event->peer)
else if (m_peers[i]->isSamePeer(event->peer))
{
Log::fatal("NetworkManager", "Multiple peers match the disconnected one.");
}
@ -134,10 +134,10 @@ void NetworkManager::notifyEvent(Event* event)
if (!removed)
Log::warn("NetworkManager", "The peer that has been disconnected was not registered by the Network Manager.");
Log::debug("NetworkManager", "Somebody is now disconnected. There are now %lu peers.", m_peers.size());
Log::info("NetworkManager", "Somebody is now disconnected. There are now %lu peers.", m_peers.size());
delete event; // in this case only, the event has been copied by the protocol manager
}
delete event;
}
//-----------------------------------------------------------------------------
@ -154,8 +154,10 @@ void NetworkManager::sendPacketExcept(STKPeer* peer, const NetworkString& data)
{
for (unsigned int i = 0; i < m_peers.size(); i++)
{
if (m_peers[i] != peer)
if (!m_peers[i]->isSamePeer(peer))
{
m_peers[i]->sendPacket(data);
}
}
}

View File

@ -80,9 +80,14 @@ ProtocolManager::~ProtocolManager()
void ProtocolManager::notifyEvent(Event* event)
{
Event* event2 = new Event(*event);
if (event->type == EVENT_TYPE_DISCONNECTED)
{
// make a copy if needed (the peer will be lost elseway)
event = new Event(*event);
Log::warn("ProtocolManager", "Trying to copy the event");
}
pthread_mutex_lock(&m_events_mutex);
m_events_to_process.push_back(event2); // add the event to the queue
m_events_to_process.push_back(event); // add the event to the queue
pthread_mutex_unlock(&m_events_mutex);
}

View File

@ -27,6 +27,15 @@ STKPeer::STKPeer()
m_peer = NULL;
m_player_profile = NULL;
}
STKPeer::STKPeer(const STKPeer& peer)
{
Log::verbose("STKPeer", "Construction a copy of a STKPeer.");
m_peer = peer.m_peer;
m_player_profile = peer.m_player_profile;
m_client_server_token = peer.m_client_server_token;
m_token_set = peer.m_token_set;
}
STKPeer::~STKPeer()
{
@ -84,20 +93,8 @@ bool STKPeer::isConnected() const
Log::info("STKPeer", "The peer state is %i\n", m_peer->state);
return (m_peer->state == ENET_PEER_STATE_CONNECTED);
}
bool STKPeer::operator==(const STKPeer* peer) const
bool STKPeer::isSamePeer(const STKPeer* peer) const
{
return peer->m_peer==m_peer;
}
bool STKPeer::operator!=(const STKPeer* peer) const
{
return peer->m_peer!=m_peer;
}
bool STKPeer::operator==(const ENetPeer* peer) const
{
return peer==m_peer;
}
bool STKPeer::operator!=(const ENetPeer* peer) const
{
return peer!=m_peer;
}

View File

@ -29,6 +29,7 @@ class STKPeer
friend class Event;
public:
STKPeer();
STKPeer(const STKPeer& peer);
virtual ~STKPeer();
virtual void sendPacket(const NetworkString& data);
@ -48,10 +49,7 @@ class STKPeer
bool isClientServerTokenSet() const { return m_token_set; }
NetworkPlayerProfile* getPlayerProfile() { return m_player_profile; }
bool operator==(const STKPeer* peer) const;
bool operator==(const ENetPeer* peer) const;
bool operator!=(const STKPeer* peer) const;
bool operator!=(const ENetPeer* peer) const;
bool isSamePeer(const STKPeer* peer) const;
protected:
ENetPeer* m_peer;