Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/cpp11_v2/src/libraries/network/packet/Packet.h @ 11006

Last change on this file since 11006 was 11006, checked in by landauf, 8 years ago

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)

  • Property svn:eol-style set to native
File size: 3.0 KB
Line 
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
34namespace orxonox
35{
36
37namespace packet
38{
39
40enum class Direction
41{
42  Incoming,
43  Outgoing,
44  Bidirectional
45};
46enum class Type : uint8_t
47{
48  Acknowledgement,
49  Chat,
50  ClassID,
51  DeleteObjects,
52  FunctionIDs,
53  FunctionCalls,
54  Gamestate,
55  Welcome
56};
57
58/**
59    @author Oliver Scheuss <scheusso [at] ee.ethz.ch>
60*/
61class _NetworkExport Packet
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    virtual bool process(orxonox::Host* host)=0;
72    inline uint32_t getFlags()
73      { return flags_; }
74    inline int getPeerID()
75      { return peerID_; }
76    inline void setPeerID( int id )
77      { peerID_ = id; }
78    inline bool isReliable()
79      { return this->flags_ & PacketFlag::Reliable; }
80    inline uint32_t getRequiredGamestateID()
81      { return this->requiredGamestateID_; }
82
83    virtual bool send(orxonox::Host* host);
84  protected:
85    Packet();
86    Packet(uint8_t *data, unsigned int peerID);
87//    Packet(ENetPacket *packet, ENetPeer *peer);
88    inline bool isDataENetAllocated() const
89      { return bDataENetAllocated_; }
90
91    uint32_t flags_;
92    unsigned int peerID_;
93    uint32_t requiredGamestateID_;
94    Direction packetDirection_;
95    /** Pointer to the data. Be careful when deleting it because it might
96        point to a location that was allocated by ENet.
97        See bDataENetAllocated_ */
98    uint8_t *data_;
99    /** Tells whether data_ was allocated by ENet or ourselves.
100        data_ might no correlate with enetPacket_->data. */
101    bool bDataENetAllocated_;
102  private:
103    static std::map<size_t, Packet *> packetMap_;
104    static boost::mutex               packetMapMutex_;
105    ENetPacket *enetPacket_;
106};
107
108} //namespace packet
109
110} //namespace orxonox
111
112#endif /* _NETWORK_Packet_H__ */
Note: See TracBrowser for help on using the repository browser.