[Orxonox-commit 3086] r7780 - in code/branches/network5/src: libraries/network libraries/network/packet orxonox/gametypes
scheusso at orxonox.net
scheusso at orxonox.net
Sun Dec 19 21:41:57 CET 2010
Author: scheusso
Date: 2010-12-19 21:41:57 +0100 (Sun, 19 Dec 2010)
New Revision: 7780
Modified:
code/branches/network5/src/libraries/network/Client.h
code/branches/network5/src/libraries/network/Connection.cc
code/branches/network5/src/libraries/network/GamestateManager.cc
code/branches/network5/src/libraries/network/GamestateManager.h
code/branches/network5/src/libraries/network/Server.cc
code/branches/network5/src/libraries/network/Server.h
code/branches/network5/src/libraries/network/packet/FunctionCalls.cc
code/branches/network5/src/libraries/network/packet/Packet.cc
code/branches/network5/src/orxonox/gametypes/Gametype.cc
Log:
some fixes
reactivating acking and gamestate diffing
Modified: code/branches/network5/src/libraries/network/Client.h
===================================================================
--- code/branches/network5/src/libraries/network/Client.h 2010-12-19 18:37:18 UTC (rev 7779)
+++ code/branches/network5/src/libraries/network/Client.h 2010-12-19 20:41:57 UTC (rev 7780)
@@ -79,6 +79,7 @@
void setDestination( const std::string& serverAddress, unsigned int port ); // tolua_export
bool closeConnection();
void queuePacket(ENetPacket* packet, int clientID, uint8_t channelID);
+ virtual bool sendPacket( packet::Packet* packet ){ return packet->send( static_cast<Host*>(this) ); }
bool processChat(const std::string& message, unsigned int playerID);
virtual bool chat(const std::string& message);
virtual bool broadcast(const std::string& message) { return false; }
Modified: code/branches/network5/src/libraries/network/Connection.cc
===================================================================
--- code/branches/network5/src/libraries/network/Connection.cc 2010-12-19 18:37:18 UTC (rev 7779)
+++ code/branches/network5/src/libraries/network/Connection.cc 2010-12-19 20:41:57 UTC (rev 7780)
@@ -81,6 +81,7 @@
void Connection::disconnectPeer(ENetPeer *peer)
{
+ assert(peer);
outgoingEvent outEvent = { peer, outgoingEventType::disconnectPeer, (ENetPacket*)10, 15 };
this->outgoingEventsMutex_->lock();
@@ -90,6 +91,7 @@
void Connection::addPacket(ENetPacket *packet, ENetPeer *peer, uint8_t channelID)
{
+ assert(peer);
outgoingEvent outEvent = { peer, outgoingEventType::sendPacket, packet, channelID };
this->outgoingEventsMutex_->lock();
@@ -99,7 +101,7 @@
void Connection::broadcastPacket(ENetPacket* packet, uint8_t channelID)
{
- outgoingEvent outEvent = { 0, outgoingEventType::broadcastPacket, packet, channelID };
+ outgoingEvent outEvent = { (ENetPeer*)15, outgoingEventType::broadcastPacket, packet, channelID };
this->outgoingEventsMutex_->lock();
this->outgoingEvents_.push_back(outEvent);
Modified: code/branches/network5/src/libraries/network/GamestateManager.cc
===================================================================
--- code/branches/network5/src/libraries/network/GamestateManager.cc 2010-12-19 18:37:18 UTC (rev 7779)
+++ code/branches/network5/src/libraries/network/GamestateManager.cc 2010-12-19 20:41:57 UTC (rev 7780)
@@ -109,6 +109,7 @@
for(it = gamestateQueue.begin(); it!=gamestateQueue.end(); it++){
bool b = processGamestate(it->second);
assert(b);
+ sendAck( it->second->getID(), it->second->getPeerID() );
delete it->second;
}
// now clear the queue
@@ -117,6 +118,21 @@
NetworkCallbackManager::callCallbacks();
return true;
}
+
+ bool GamestateManager::sendAck(unsigned int gamestateID, uint32_t peerID)
+ {
+ packet::Acknowledgement *ack = new packet::Acknowledgement(gamestateID, peerID);
+ if( !this->sendPacket(ack))
+ {
+ COUT(3) << "could not ack gamestate: " << gamestateID << std::endl;
+ return false;
+ }
+ else
+ {
+ COUT(5) << "acked a gamestate: " << gamestateID << std::endl;
+ return true;
+ }
+ }
bool GamestateManager::getSnapshot(){
@@ -172,6 +188,9 @@
peerGamestates.push_back(0); // insert an empty gamestate* to change
finishGamestate( peerID, peerGamestates.back(), baseGamestate, currentGamestate_ );
+ if( peerGamestates.back()==0 )
+ // nothing to send to remove pointer from vector
+ peerGamestates.pop_back();
//FunctorMember<GamestateManager>* functor =
// ExecutorMember<GamestateManager>* executor = createExecutor( createFunctor(&GamestateManager::finishGamestate, this) );
// executor->setDefaultValues( cid, &clientGamestates.back(), client, currentGamestate_ );
@@ -235,7 +254,8 @@
}
- bool GamestateManager::ackGamestate(unsigned int gamestateID, unsigned int peerID) {
+ bool GamestateManager::ackGamestate(unsigned int gamestateID, unsigned int peerID)
+ {
// ClientInformation *temp = ClientInformation::findClient(peerID);
// assert(temp);
std::map<uint32_t, peerInfo>::iterator it = this->peerMap_.find(peerID);
@@ -254,7 +274,7 @@
return true;
}
- assert(curid==GAMESTATEID_INITIAL || curid<gamestateID);
+ assert(curid==GAMESTATEID_INITIAL || curid<=gamestateID);
COUT(5) << "acking gamestate " << gamestateID << " for peerID: " << peerID << " curid: " << curid << std::endl;
std::map<uint32_t, packet::Gamestate*>::iterator it2;
for( it2=it->second.gamestates.begin(); it2!=it->second.gamestates.end(); )
Modified: code/branches/network5/src/libraries/network/GamestateManager.h
===================================================================
--- code/branches/network5/src/libraries/network/GamestateManager.h 2010-12-19 18:37:18 UTC (rev 7779)
+++ code/branches/network5/src/libraries/network/GamestateManager.h 2010-12-19 20:41:57 UTC (rev 7780)
@@ -89,6 +89,7 @@
virtual uint32_t getCurrentGamestateID(){ return currentGamestate_->getID(); }
bool processGamestates();
+ bool sendAck(unsigned int gamestateID, uint32_t peerID);
bool update();
std::vector<packet::Gamestate*> getGamestates();
void finishGamestate( unsigned int peerID, packet::Gamestate*& destgamestate, packet::Gamestate* base, packet::Gamestate* gamestate );
@@ -100,6 +101,8 @@
{ assert(peerMap_.find(peerID)!=peerMap_.end()); peerMap_[peerID].isSynched = true; }
void removePeer( uint32_t peerID );
// void removeClient(ClientInformation *client);
+ protected:
+ virtual bool sendPacket( packet::Packet* packet ) = 0;
private:
bool processGamestate(packet::Gamestate *gs);
Modified: code/branches/network5/src/libraries/network/Server.cc
===================================================================
--- code/branches/network5/src/libraries/network/Server.cc 2010-12-19 18:37:18 UTC (rev 7779)
+++ code/branches/network5/src/libraries/network/Server.cc 2010-12-19 20:41:57 UTC (rev 7780)
@@ -359,6 +359,7 @@
return;
else
{
+ GamestateManager::removePeer(client->getID());
//ServerConnection::disconnectClient( client );
//ClientConnectionListener::broadcastClientDisconnected( client->getID() ); //this is done in ClientInformation now
delete client;
Modified: code/branches/network5/src/libraries/network/Server.h
===================================================================
--- code/branches/network5/src/libraries/network/Server.h 2010-12-19 18:37:18 UTC (rev 7779)
+++ code/branches/network5/src/libraries/network/Server.h 2010-12-19 20:41:57 UTC (rev 7780)
@@ -66,6 +66,7 @@
void close();
bool processChat(const std::string& message, unsigned int playerID);
void queuePacket(ENetPacket *packet, int clientID, uint8_t channelID);
+ virtual bool sendPacket( packet::Packet* packet ){ return packet->send( static_cast<Host*>(this) ); }
void update(const Clock& time);
unsigned int getRTT(unsigned int clientID);
virtual void printRTT();
Modified: code/branches/network5/src/libraries/network/packet/FunctionCalls.cc
===================================================================
--- code/branches/network5/src/libraries/network/packet/FunctionCalls.cc 2010-12-19 18:37:18 UTC (rev 7779)
+++ code/branches/network5/src/libraries/network/packet/FunctionCalls.cc 2010-12-19 20:41:57 UTC (rev 7780)
@@ -70,7 +70,7 @@
{
FunctionCall fctCall;
fctCall.loadData(temp);
- if( this->minGamestateID_ > host->getLastProcessedGamestateID(this->getPeerID()) || !fctCall.execute() )
+ if( !fctCall.execute() )
{
FunctionCallManager::bufferIncomingFunctionCall( fctCall, minGamestateID_, this->getPeerID() );
}
Modified: code/branches/network5/src/libraries/network/packet/Packet.cc
===================================================================
--- code/branches/network5/src/libraries/network/packet/Packet.cc 2010-12-19 18:37:18 UTC (rev 7779)
+++ code/branches/network5/src/libraries/network/packet/Packet.cc 2010-12-19 20:41:57 UTC (rev 7780)
@@ -178,6 +178,9 @@
uint8_t *data = packet->data;
assert(ClientInformation::findClient(&peer->address)->getID() != static_cast<unsigned int>(-2) || !Host::isServer());
unsigned int peerID = ClientInformation::findClient(&peer->address)->getID();
+ // HACK
+ if( peerID==static_cast<unsigned int>(-2))
+ peerID = NETWORK_PEER_ID_SERVER;
Packet *p = 0;
// COUT(6) << "packet type: " << *(Type::Value *)&data[_PACKETID] << std::endl;
switch( *(Type::Value *)(data + _PACKETID) )
Modified: code/branches/network5/src/orxonox/gametypes/Gametype.cc
===================================================================
--- code/branches/network5/src/orxonox/gametypes/Gametype.cc 2010-12-19 18:37:18 UTC (rev 7779)
+++ code/branches/network5/src/orxonox/gametypes/Gametype.cc 2010-12-19 20:41:57 UTC (rev 7780)
@@ -170,7 +170,6 @@
void Gametype::playerEntered(PlayerInfo* player)
{
- COUT(0) << "Gametype: playerentered" << endl;
this->players_[player].state_ = PlayerState::Joined;
}
@@ -411,7 +410,6 @@
void Gametype::spawnPlayer(PlayerInfo* player)
{
- COUT(0) << "Gametype: spawnPlayer" << endl;
SpawnPoint* spawnpoint = this->getBestSpawnPoint(player);
if (spawnpoint)
{
More information about the Orxonox-commit
mailing list