Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/network5/src/libraries/network/packet/Packet.h @ 7777

Last change on this file since 7777 was 7777, checked in by scheusso, 13 years ago

some () structural changes
some functional changes (GamestateClient replaced through GamestateManager on client)
reliable packets get buffered until a recent gamestate arrived and got processed

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