[Orxonox-commit 6349] r11006 - in code/branches/cpp11_v2/src/libraries/network: . packet

landauf at orxonox.net landauf at orxonox.net
Wed Dec 30 23:34:25 CET 2015


Author: landauf
Date: 2015-12-30 23:34:25 +0100 (Wed, 30 Dec 2015)
New Revision: 11006

Modified:
   code/branches/cpp11_v2/src/libraries/network/Connection.cc
   code/branches/cpp11_v2/src/libraries/network/Connection.h
   code/branches/cpp11_v2/src/libraries/network/NetworkPrereqs.h
   code/branches/cpp11_v2/src/libraries/network/packet/Acknowledgement.cc
   code/branches/cpp11_v2/src/libraries/network/packet/Chat.cc
   code/branches/cpp11_v2/src/libraries/network/packet/ClassID.cc
   code/branches/cpp11_v2/src/libraries/network/packet/DeleteObjects.cc
   code/branches/cpp11_v2/src/libraries/network/packet/FunctionCalls.cc
   code/branches/cpp11_v2/src/libraries/network/packet/FunctionIDs.cc
   code/branches/cpp11_v2/src/libraries/network/packet/Gamestate.h
   code/branches/cpp11_v2/src/libraries/network/packet/Packet.cc
   code/branches/cpp11_v2/src/libraries/network/packet/Packet.h
   code/branches/cpp11_v2/src/libraries/network/packet/Welcome.cc
Log:
made some enums in network library strongly typed. for most other enums in network this isn't possible because they are often used like flags (converted to int and compared with binary operators).
packet::Type now uses uint8_t as underlying type which reduces the network traffic (by default the type was int)

Modified: code/branches/cpp11_v2/src/libraries/network/Connection.cc
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/Connection.cc	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/Connection.cc	2015-12-30 22:34:25 UTC (rev 11006)
@@ -80,7 +80,7 @@
   void Connection::disconnectPeer(uint32_t peerID)
   {
 //     this->overallMutex_->lock();
-    outgoingEvent outEvent = { peerID, outgoingEventType::disconnectPeer, nullptr, 0 };
+    outgoingEvent outEvent = { peerID, OutgoingEventType::disconnectPeer, nullptr, 0 };
     
     this->outgoingEventsMutex_->lock();
     this->outgoingEvents_.push_back(outEvent);
@@ -90,7 +90,7 @@
   
   void Connection::disconnectPeers()
   {
-    outgoingEvent outEvent = { 0, outgoingEventType::disconnectPeers, nullptr, 0 };
+    outgoingEvent outEvent = { 0, OutgoingEventType::disconnectPeers, nullptr, 0 };
     
     this->outgoingEventsMutex_->lock();
     this->outgoingEvents_.push_back(outEvent);
@@ -100,7 +100,7 @@
   void Connection::addPacket(ENetPacket* packet, uint32_t peerID, uint8_t channelID)
   {
 //     this->overallMutex_->lock();
-    outgoingEvent outEvent = { peerID, outgoingEventType::sendPacket, packet, channelID };
+    outgoingEvent outEvent = { peerID, OutgoingEventType::sendPacket, packet, channelID };
     
     this->outgoingEventsMutex_->lock();
     this->outgoingEvents_.push_back(outEvent);
@@ -111,7 +111,7 @@
   void Connection::broadcastPacket(ENetPacket* packet, uint8_t channelID)
   {
 //     this->overallMutex_->lock();
-    outgoingEvent outEvent = { 0, outgoingEventType::broadcastPacket, packet, channelID };
+    outgoingEvent outEvent = { 0, OutgoingEventType::broadcastPacket, packet, channelID };
     
     this->outgoingEventsMutex_->lock();
     this->outgoingEvents_.push_back(outEvent);
@@ -196,7 +196,7 @@
     ENetPeer* peer;
     switch( event.type )
     {
-      case outgoingEventType::sendPacket:
+      case OutgoingEventType::sendPacket:
         // check whether the peer is still/already in the peer list
         if( this->peerMap_.find(event.peerID) != this->peerMap_.end() )
         {
@@ -210,7 +210,7 @@
           enet_packet_destroy(event.packet);
         }
         break;
-      case outgoingEventType::disconnectPeer:
+      case OutgoingEventType::disconnectPeer:
         if( this->peerMap_.find(event.peerID) != this->peerMap_.end() )
         {
           peer = this->peerMap_[event.peerID];
@@ -222,10 +222,10 @@
           assert(event.peerID<this->nextPeerID_);
         }
         break;
-      case outgoingEventType::disconnectPeers:
+      case OutgoingEventType::disconnectPeers:
         disconnectPeersInternal();
         break;
-      case outgoingEventType::broadcastPacket:
+      case OutgoingEventType::broadcastPacket:
         enet_host_broadcast( this->host_, event.channelID, event.packet );
         break;
       default:
@@ -270,13 +270,13 @@
       // process event
       switch( inEvent.type )
       {
-        case incomingEventType::peerConnect:
+        case IncomingEventType::peerConnect:
           addPeer(inEvent.peerID);
           break;
-        case incomingEventType::peerDisconnect:
+        case IncomingEventType::peerDisconnect:
           removePeer(inEvent.peerID);
           break;
-        case incomingEventType::receivePacket:
+        case IncomingEventType::receivePacket:
           processPacket(inEvent.packet);
           break;
         default:
@@ -321,7 +321,7 @@
     this->peerIDMap_[event.peer] = peerID;
     
     // create new peerEvent and return it
-    incomingEvent inEvent = { peerID, incomingEventType::peerConnect, nullptr };
+    incomingEvent inEvent = { peerID, IncomingEventType::peerConnect, nullptr };
     return inEvent;
   }
   
@@ -336,7 +336,7 @@
     this->peerMap_.erase(this->peerMap_.find(peerID));
     
     // create new peerEvent and return it
-    incomingEvent inEvent = { peerID, incomingEventType::peerDisconnect, nullptr };
+    incomingEvent inEvent = { peerID, IncomingEventType::peerDisconnect, nullptr };
     return inEvent;
   }
   
@@ -350,7 +350,7 @@
     packet::Packet* p = packet::Packet::createPacket(event.packet, peerID);
     
     // create new peerEvent and return it
-    incomingEvent inEvent = { peerID, incomingEventType::receivePacket, p };
+    incomingEvent inEvent = { peerID, IncomingEventType::receivePacket, p };
     return inEvent;
   }
 

Modified: code/branches/cpp11_v2/src/libraries/network/Connection.h
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/Connection.h	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/Connection.h	2015-12-30 22:34:25 UTC (rev 11006)
@@ -59,42 +59,34 @@
   const unsigned int NETWORK_WAIT_TIMEOUT           = 1;
   const unsigned int NETWORK_MAX_QUEUE_PROCESS_TIME = 5;
   
-  namespace incomingEventType
+  enum class IncomingEventType
   {
-    enum Value
-    {
-      receivePacket   = 1,  // incoming packet
-      peerConnect     = 2,  // incoming connect request
-      peerDisconnect  = 3   // incoming disconnect request
-    };
-    
-  }
+    receivePacket   = 1,  // incoming packet
+    peerConnect     = 2,  // incoming connect request
+    peerDisconnect  = 3   // incoming disconnect request
+  };
   
-  namespace outgoingEventType
+  enum class OutgoingEventType
   {
-    enum Value
-    {
-      sendPacket      = 1,  // outgoing packet
-      broadcastPacket = 2,  // outgoing broadcast packet
-      disconnectPeer  = 3,  // outgoing disconnect request
-      disconnectPeers = 4   // outgoing disconnect request
-    };
-    
-  }
+    sendPacket      = 1,  // outgoing packet
+    broadcastPacket = 2,  // outgoing broadcast packet
+    disconnectPeer  = 3,  // outgoing disconnect request
+    disconnectPeers = 4   // outgoing disconnect request
+  };
   
   struct _NetworkExport incomingEvent
   {
-    uint32_t                  peerID;
-    incomingEventType::Value  type;
-    packet::Packet*           packet;
+    uint32_t          peerID;
+    IncomingEventType type;
+    packet::Packet*   packet;
   };
   
   struct _NetworkExport outgoingEvent
   {
-    uint32_t                  peerID;
-    outgoingEventType::Value  type;
-    ENetPacket*               packet;
-    ENetChannelID             channelID;
+    uint32_t          peerID;
+    OutgoingEventType type;
+    ENetPacket*       packet;
+    ENetChannelID     channelID;
   };
   
   class _NetworkExport Connection

Modified: code/branches/cpp11_v2/src/libraries/network/NetworkPrereqs.h
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/NetworkPrereqs.h	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/NetworkPrereqs.h	2015-12-30 22:34:25 UTC (rev 11006)
@@ -88,19 +88,16 @@
   {
     namespace PacketFlag
     {
-      enum Value
-      {
-        Reliable    = 1,
-        Unsequenced = 2,
-        NoAllocate  = 4
-      };
+      static constexpr uint32_t Reliable    = 1;
+      static constexpr uint32_t Unsequenced = 2;
+      static constexpr uint32_t NoAllocate  = 4;
     }
   }
 
   namespace StaticInitialization
   {
     typedef int Type;
-    static const Type NETWORK_FUNCTION = 6;
+    static constexpr Type NETWORK_FUNCTION = 6;
   }
 }
 

Modified: code/branches/cpp11_v2/src/libraries/network/packet/Acknowledgement.cc
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/packet/Acknowledgement.cc	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/packet/Acknowledgement.cc	2015-12-30 22:34:25 UTC (rev 11006)
@@ -37,14 +37,14 @@
 
 #define PACKET_FLAGS_ACK    0
 #define _PACKETID           0
-#define _ACKID              _PACKETID + sizeof(packet::Type::Value)
+#define _ACKID              _PACKETID + sizeof(packet::Type)
 
 Acknowledgement::Acknowledgement( unsigned int id, unsigned int peerID )
  : Packet()
 {
   flags_ = flags_ | PACKET_FLAGS_ACK;
   data_=new uint8_t[ getSize() ];
-  *(Type::Value *)(data_ + _PACKETID ) = Type::Acknowledgement;
+  *(Type *)(data_ + _PACKETID ) = Type::Acknowledgement;
   *(uint32_t *)(data_ + _ACKID ) = id;
   peerID_=peerID;
 }

Modified: code/branches/cpp11_v2/src/libraries/network/packet/Chat.cc
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/packet/Chat.cc	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/packet/Chat.cc	2015-12-30 22:34:25 UTC (rev 11006)
@@ -39,7 +39,7 @@
 
 /* Some lengths */
 #define _PACKETID         0
-#define _SOURCEID         _PACKETID + sizeof(Type::Value)
+#define _SOURCEID         _PACKETID + sizeof(Type)
 #define _TARGETID         _SOURCEID + sizeof(uint32_t)
 #define _MESSAGELENGTH    _TARGETID + sizeof(uint32_t)
 #define _MESSAGE          _MESSAGELENGTH + sizeof(uint32_t)
@@ -56,7 +56,7 @@
   /* allocate memory for the data */
   data_=new unsigned char[ getSize() ];
 
-  *(Type::Value *)(data_ + _PACKETID ) = Type::Chat;
+  *(Type *)(data_ + _PACKETID ) = Type::Chat;
   *(unsigned int *)(data_ + _SOURCEID ) = sourceID;
   *(unsigned int *)(data_ + _TARGETID ) = targetID;
   *(unsigned int *)(data_ + _MESSAGELENGTH ) = messageLength_;

Modified: code/branches/cpp11_v2/src/libraries/network/packet/ClassID.cc
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/packet/ClassID.cc	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/packet/ClassID.cc	2015-12-30 22:34:25 UTC (rev 11006)
@@ -69,7 +69,7 @@
   this->data_=new uint8_t[ packetSize ];
   //set the appropriate packet id
   assert(this->data_);
-  *(Type::Value *)(this->data_ + _PACKETID ) = Type::ClassID;
+  *(Type *)(this->data_ + _PACKETID ) = Type::ClassID;
 
   uint8_t *temp=data_+sizeof(uint32_t);
   // save the number of all classes

Modified: code/branches/cpp11_v2/src/libraries/network/packet/DeleteObjects.cc
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/packet/DeleteObjects.cc	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/packet/DeleteObjects.cc	2015-12-30 22:34:25 UTC (rev 11006)
@@ -38,7 +38,7 @@
 
 #define PACKET_FLAG_DELETE  PacketFlag::Reliable
 #define _PACKETID           0
-#define _QUANTITY           _PACKETID + sizeof(Type::Value)
+#define _QUANTITY           _PACKETID + sizeof(Type)
 #define _OBJECTIDS          _QUANTITY + sizeof(uint32_t)
 
 DeleteObjects::DeleteObjects()
@@ -62,11 +62,11 @@
   if(number==0)
     return false;
   orxout(verbose, context::packets) << "sending DeleteObjects: ";
-  unsigned int size = sizeof(Type::Value) + sizeof(uint32_t)*(number+1);
+  unsigned int size = sizeof(Type) + sizeof(uint32_t)*(number+1);
   data_ = new uint8_t[size];
   uint8_t *tdata = data_;
-  *reinterpret_cast<Type::Value*>(tdata) = Type::DeleteObjects;
-  tdata += sizeof(Type::Value);
+  *reinterpret_cast<Type*>(tdata) = Type::DeleteObjects;
+  tdata += sizeof(Type);
   *(uint32_t *)tdata = number;
   tdata += sizeof(uint32_t);
   for(unsigned int i=0; i<number; i++){

Modified: code/branches/cpp11_v2/src/libraries/network/packet/FunctionCalls.cc
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/packet/FunctionCalls.cc	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/packet/FunctionCalls.cc	2015-12-30 22:34:25 UTC (rev 11006)
@@ -95,7 +95,7 @@
   this->minGamestateID_ = host->getCurrentGamestateID();
   assert(this->functionCalls_.size());
   data_=new uint8_t[ currentSize_ ];
-  *(Type::Value *)(data_ + _PACKETID ) = Type::FunctionCalls; // Set the Packet ID
+  *(Type *)(data_ + _PACKETID ) = Type::FunctionCalls; // Set the Packet ID
   *(uint32_t*)(data_+sizeof(uint32_t)) = this->functionCalls_.size(); // set nrOfCalls
   *(uint32_t*)(data_+2*sizeof(uint32_t)) = this->minGamestateID_; // set minGamestateID_
   uint8_t* temp = data_+3*sizeof(uint32_t);

Modified: code/branches/cpp11_v2/src/libraries/network/packet/FunctionIDs.cc
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/packet/FunctionIDs.cc	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/packet/FunctionIDs.cc	2015-12-30 22:34:25 UTC (rev 11006)
@@ -70,7 +70,7 @@
   this->data_=new uint8_t[ packetSize ];
   //set the appropriate packet id
   assert(this->data_);
-  *(Type::Value *)(this->data_ + _PACKETID ) = Type::FunctionIDs;
+  *(Type *)(this->data_ + _PACKETID ) = Type::FunctionIDs;
 
   uint8_t *temp=data_+sizeof(uint32_t);
   // save the number of all classes

Modified: code/branches/cpp11_v2/src/libraries/network/packet/Gamestate.h
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/packet/Gamestate.h	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/packet/Gamestate.h	2015-12-30 22:34:25 UTC (rev 11006)
@@ -55,11 +55,11 @@
   public:
     GamestateHeader(){ data_=nullptr; }
     GamestateHeader(uint8_t* data)
-      { assert(data); data_ = data; *(uint32_t*)data_ = Type::Gamestate; }
+      { assert(data); data_ = data; *(Type*)data_ = Type::Gamestate; }
     /*GamestateHeader(uint8_t* data, GamestateHeader* h)
       { assert(data); data_=data; memcpy(data_, h->data_, getSize()); }*/
     void setData(uint8_t* data)
-      { assert(data); data_ = data; *(uint32_t*)data_ = Type::Gamestate; }
+      { assert(data); data_ = data; *(Type*)data_ = Type::Gamestate; }
     static inline uint32_t getSize()
       { return 21; }
 

Modified: code/branches/cpp11_v2/src/libraries/network/packet/Packet.cc
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/packet/Packet.cc	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/packet/Packet.cc	2015-12-30 22:34:25 UTC (rev 11006)
@@ -156,7 +156,7 @@
     }
   }
 #ifndef NDEBUG
-  switch( *(Type::Value *)(data_ + _PACKETID) )
+  switch( *(Type *)(data_ + _PACKETID) )
   {
     case Type::Acknowledgement:
     case Type::Chat:
@@ -190,8 +190,8 @@
 //   if( peerID==static_cast<unsigned int>(-2))
 //     peerID = NETWORK_PEER_ID_SERVER;
   Packet *p = nullptr;
-//   orxout(verbose_ultra, context::packets) << "packet type: " << *(Type::Value *)&data[_PACKETID] << endl;
-  switch( *(Type::Value *)(data + _PACKETID) )
+//   orxout(verbose_ultra, context::packets) << "packet type: " << *(Type *)&data[_PACKETID] << endl;
+  switch( *(Type *)(data + _PACKETID) )
   {
     case Type::Acknowledgement:
 //       orxout(verbose_more, context::packets) << "ack" << endl;

Modified: code/branches/cpp11_v2/src/libraries/network/packet/Packet.h
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/packet/Packet.h	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/packet/Packet.h	2015-12-30 22:34:25 UTC (rev 11006)
@@ -37,29 +37,23 @@
 namespace packet
 {
 
-namespace Direction
+enum class Direction
 {
-  enum Value
-  {
-    Incoming,
-    Outgoing,
-    Bidirectional
-  };
-}
-namespace Type
+  Incoming,
+  Outgoing,
+  Bidirectional
+};
+enum class Type : uint8_t
 {
-  enum Value
-  {
-    Acknowledgement,
-    Chat,
-    ClassID,
-    DeleteObjects,
-    FunctionIDs,
-    FunctionCalls,
-    Gamestate,
-    Welcome
-  };
-}
+  Acknowledgement,
+  Chat,
+  ClassID,
+  DeleteObjects,
+  FunctionIDs,
+  FunctionCalls,
+  Gamestate,
+  Welcome
+};
 
 /**
     @author Oliver Scheuss <scheusso [at] ee.ethz.ch>
@@ -97,7 +91,7 @@
     uint32_t flags_;
     unsigned int peerID_;
     uint32_t requiredGamestateID_;
-    Direction::Value packetDirection_;
+    Direction packetDirection_;
     /** Pointer to the data. Be careful when deleting it because it might
         point to a location that was allocated by ENet.
         See bDataENetAllocated_ */

Modified: code/branches/cpp11_v2/src/libraries/network/packet/Welcome.cc
===================================================================
--- code/branches/cpp11_v2/src/libraries/network/packet/Welcome.cc	2015-12-30 21:31:43 UTC (rev 11005)
+++ code/branches/cpp11_v2/src/libraries/network/packet/Welcome.cc	2015-12-30 22:34:25 UTC (rev 11006)
@@ -40,7 +40,7 @@
 
 #define PACKET_FLAGS_CLASSID  PacketFlag::Reliable
 #define _PACKETID             0
-#define _CLIENTID             _PACKETID + sizeof(Type::Value)
+#define _CLIENTID             _PACKETID + sizeof(Type)
 #define _ENDIANTEST           _CLIENTID + sizeof(uint32_t)
 
   Welcome::Welcome( uint32_t clientID )
@@ -50,7 +50,7 @@
   assert(getSize());
   data_=new uint8_t[ getSize() ];
   assert(data_);
-  *(packet::Type::Value *)(data_ + _PACKETID ) = packet::Type::Welcome;
+  *(packet::Type *)(data_ + _PACKETID ) = packet::Type::Welcome;
   *(uint32_t *)(data_ + _CLIENTID ) = static_cast<uint32_t>(clientID);
   *(uint32_t *)(data_ + _ENDIANTEST ) = 0xFEDC4321;
 }
@@ -69,7 +69,7 @@
 }
 
 unsigned int Welcome::getSize() const{
-  return sizeof(packet::Type::Value) + 2*sizeof(uint32_t);
+  return sizeof(packet::Type) + 2*sizeof(uint32_t);
 }
 
 bool Welcome::process(orxonox::Host* host){




More information about the Orxonox-commit mailing list