Orxonox  0.0.5 Codename: Arcturus
TrafficControl.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>
24  * Co-authors:
25  * ...
26  *
27 
28  */
29 #ifndef _TrafficControl_H__
30 #define _TrafficControl_H__
31 
32 #include "NetworkPrereqs.h"
33 
34 #include <list>
35 #include <map>
37 
38 namespace orxonox {
39 
40 
44  class objInfo
45  {
46  public:
47  uint32_t objID;
48  uint32_t objCreatorID;
49  uint32_t objCurGS;//current GameState ID
50  uint32_t objDiffGS;//difference between current and latest GameState
51  uint32_t objSize;
54  objInfo(uint32_t ID, uint32_t creatorID, int32_t curGsID, int32_t diffGsID, uint32_t size, unsigned int prioperm, unsigned int priosched);
55  objInfo();
56  };
57 
61  class obj
62  {
63  public:
64  uint32_t objID;
65  uint32_t objCreatorID;
66  uint32_t objSize;
67  uint32_t objDataOffset;
68  obj();
69  obj( uint32_t ID, uint32_t creatorID, uint32_t size, uint32_t offset );
70  };
71 
72 
73 
74 
79  private:
80 
84  std::map<unsigned int, std::map<unsigned int, objInfo >> clientListPerm_;
85  //has to be created with constructor and then needs to be updated by evaluateList().
86 
90  std::map<unsigned int, std::map<unsigned int, std::list<obj>>> clientListTemp_;
91 
95  unsigned int currentGamestateID;
96  unsigned int currentClientID;
97  unsigned int targetSize;
98  bool bActive_;
99 
100  void insertinClientListPerm(unsigned int clientID, obj objinf);
101 
102  void cut(std::list<obj>& list, unsigned int targetsize);
103  void updateClientListTemp(std::list<obj>& list);//done
107  void evaluateList(unsigned int clientID, std::list<obj>& list);//done
108  void ack(unsigned int clientID, unsigned int gamestateID); // this function gets called when the server receives an ack from the client
109 
110  //ClientConnectionListener functions
111  virtual void clientConnected(unsigned int clientID) override{};
112  virtual void clientDisconnected(unsigned int clientID) override;
113 
114 
115  protected:
117 
118  public:
119  TrafficControl();
120  virtual ~TrafficControl();
127  void setConfigValues();
128  static TrafficControl *getInstance();
129  void processObjectList(unsigned int clientID, unsigned int gamestateID, std::list<obj>& list); //gets a pointer to the list (containing objectIDs) and sorts it
130  static void processAck(unsigned int clientID, unsigned int gamestateID)
131  { return instance_->ack(clientID, gamestateID); }
132  void deleteObject(unsigned int objectID); // this function gets called when an object has been deleted (in order to clean up lists and maps)
133 
134  bool prioritySort(uint32_t clientID, obj i, obj j);
135  bool dataSort(obj i, obj j);
136  void printList(std::list<obj>& list, unsigned int clientID);
137  void fixCreatorDependencies(std::list<obj>::iterator it, std::list<obj>& list, unsigned int clientID);
138 };
139 
140 }
141 
142 #endif /* _TrafficControl_H__ */
objInfo()
Definition: TrafficControl.cc:48
uint32_t objID
Definition: TrafficControl.h:47
Shared library macros, enums, constants and forward declarations for the network library ...
int objValueSched
Definition: TrafficControl.h:53
uint32_t objCreatorID
Definition: TrafficControl.h:48
uint32_t objCurGS
Definition: TrafficControl.h:49
int objValuePerm
Definition: TrafficControl.h:52
uint32_t objID
Definition: TrafficControl.h:64
std::map< unsigned int, std::map< unsigned int, objInfo > > clientListPerm_
permanent client list: contains client ids, object ids and objectInfos (in this order) ...
Definition: TrafficControl.h:84
a list of objects of this type will be given by the Server&#39;s Gamestate Manager
Definition: TrafficControl.h:61
unsigned int targetSize
Definition: TrafficControl.h:97
static TrafficControl * instance_
Initializing protected members.
Definition: TrafficControl.h:116
unsigned int currentGamestateID
updateReferenceList currentGamestateID and currentClientID will be defined as soon as TrafficControl ...
Definition: TrafficControl.h:95
An abstract base class.
Definition: ClientConnectionListener.h:40
unsigned int currentClientID
Definition: TrafficControl.h:96
Definition: TrafficControl.h:78
Die Wagnis Klasse hat die folgenden Aufgaben:
Definition: ApplicationPaths.cc:66
uint32_t objSize
Definition: TrafficControl.h:51
static void processAck(unsigned int clientID, unsigned int gamestateID)
Definition: TrafficControl.h:130
bool bActive_
Definition: TrafficControl.h:98
uint32_t objCreatorID
Definition: TrafficControl.h:65
void ack(unsigned int clientID, unsigned int gamestateID)
Definition: TrafficControl.cc:138
uint32_t objDiffGS
Definition: TrafficControl.h:50
virtual void clientConnected(unsigned int clientID) override
Definition: TrafficControl.h:111
std::map< unsigned int, std::map< unsigned int, std::list< obj > > > clientListTemp_
temporary client list: contains client ids, gamestate ids and object ids (in this order) ...
Definition: TrafficControl.h:90
uint32_t objSize
Definition: TrafficControl.h:66
uint32_t objDataOffset
Definition: TrafficControl.h:67
a list of objects of this type will be given by the Server&#39;s Gamestate Manager
Definition: TrafficControl.h:44