Orxonox  0.0.5 Codename: Arcturus
Packet.h
Go to the documentation of this file.
1 /*
2  * ORXONOX - the hottest 3D action shooter ever to exist
3  * > www.orxonox.net <
4  *
5  *
6  * License notice:
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * Author:
23  * Oliver Scheuss <scheusso [at] ee.ethz.ch>, (C) 2008
24  * Co-authors:
25  * ...
26  *
27  */
28 #ifndef _NETWORK_Packet_H__
29 #define _NETWORK_Packet_H__
30 
31 #include "network/NetworkPrereqs.h"
32 #include <map>
33 
34 namespace orxonox
35 {
36 
37 namespace packet
38 {
39 
40 enum class Direction
41 {
42  Incoming,
43  Outgoing,
45 };
46 enum class Type : uint8_t
47 {
49  Chat,
50  ClassID,
54  Gamestate,
55  Welcome
56 };
57 
62 {
63  public:
64  Packet(const Packet &p);
65  virtual ~Packet();
66  static Packet* createPacket(ENetPacket* packet, uint32_t peerID);
67  static void deletePacket(ENetPacket* packet);
68 
69  virtual unsigned char* getData(){ return data_; };
70  virtual unsigned int getSize() const = 0;
71 
72  // Invoke some sort of action associated with the packet
73  virtual bool process(orxonox::Host* host) = 0;
74 
75  inline uint32_t getFlags()
76  { return flags_; }
77  inline int getPeerID()
78  { return peerID_; }
79  inline void setPeerID( int id )
80  { peerID_ = id; }
81  inline bool isReliable()
82  { return this->flags_ & PacketFlag::Reliable; }
83  inline uint32_t getRequiredGamestateID()
84  { return this->requiredGamestateID_; }
85 
86  virtual bool send(orxonox::Host* host);
87 
88  protected:
89  Packet();
90  Packet(uint8_t *data, unsigned int peerID);
91  inline bool isDataENetAllocated() const
92  { return bDataENetAllocated_; }
93 
94  uint32_t flags_;
95  unsigned int peerID_;
101  uint8_t *data_;
105 
106  private:
107  // All Packets are contained in this map
108  static std::map<size_t, Packet *> packetMap_;
109  static boost::mutex packetMapMutex_;
111 };
112 
113 } //namespace packet
114 
115 } //namespace orxonox
116 
117 #endif /* _NETWORK_Packet_H__ */
Shared library macros, enums, constants and forward declarations for the network library ...
static std::map< size_t, Packet * > packetMap_
Definition: Packet.h:108
bool isDataENetAllocated() const
Definition: Packet.h:91
uint8_t * data_
Pointer to the data.
Definition: Packet.h:101
Direction packetDirection_
Definition: Packet.h:97
static constexpr uint32_t Reliable
Definition: NetworkPrereqs.h:91
uint32_t getFlags()
Definition: Packet.h:75
void setPeerID(int id)
Definition: Packet.h:79
bool bDataENetAllocated_
Tells whether data_ was allocated by ENet or ourselves.
Definition: Packet.h:104
uint32_t flags_
Definition: Packet.h:94
virtual unsigned char * getData()
Definition: Packet.h:69
int getPeerID()
Definition: Packet.h:77
unsigned int peerID_
Definition: Packet.h:95
Direction
Definition: Packet.h:40
Die Wagnis Klasse hat die folgenden Aufgaben:
Definition: ApplicationPaths.cc:66
#define _NetworkExport
Definition: NetworkPrereqs.h:59
Definition: Packet.h:61
uint32_t requiredGamestateID_
Definition: Packet.h:96
static boost::mutex packetMapMutex_
Definition: Packet.h:109
Type
Definition: Packet.h:46
Definition: Welcome.h:40
bool isReliable()
Definition: Packet.h:81
uint32_t getRequiredGamestateID()
Definition: Packet.h:83
ENet packet structure.
Definition: enet.h:147
ENetPacket * enetPacket_
Definition: Packet.h:110
Base class of Server and Client This is the Base class of the Server and Client classes.
Definition: Host.h:52