Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/netp2/src/network/TrafficControl.h @ 2945

Last change on this file since 2945 was 2710, checked in by rgrieder, 16 years ago

Merged buildsystem3 containing buildsystem2 containing Adi's buildsystem branch back to the trunk.
Please update the media directory if you were not using buildsystem3 before.

  • Property svn:eol-style set to native
File size: 5.9 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_TRAFFICCONTROL_H
29#define NETWORK_TRAFFICCONTROL_H
30
31#include "NetworkPrereqs.h"
32
33#include <string>
34#include <list>
35#include <map>
36#include <utility>
37#include <algorithm>
38#include "core/OrxonoxClass.h"
39#include "network/ClientConnectionListener.h"
40
41namespace orxonox {
42
43
44  /**
45   *a list of objects of this type will be given by the Server's Gamestate Manager
46   */
47  class objInfo
48  {
49    public:
50      uint32_t objID;
51      uint32_t objCreatorID;
52      uint32_t objCurGS;//current GameState ID
53      uint32_t objDiffGS;//difference between current and latest GameState
54      uint32_t objSize;
55      int objValuePerm;
56      int objValueSched;
57      objInfo(uint32_t ID, uint32_t creatorID, int32_t curGsID, int32_t diffGsID, uint32_t size, unsigned int prioperm, unsigned int priosched);
58      objInfo();
59  };
60
61/**
62   *a list of objects of this type will be given by the Server's Gamestate Manager
63 */
64  class obj
65  {
66    public:
67      uint32_t objID;
68      uint32_t objCreatorID;
69      uint32_t objSize;
70      uint32_t objDataOffset;
71      obj();
72      obj( uint32_t ID, uint32_t creatorID, uint32_t size, uint32_t offset );
73  };
74 
75
76
77
78/**
79*
80*/
81class TrafficControl : public ClientConnectionListener {
82  private:
83
84    /**
85    *Lists that will be used:
86    *listToProcess
87    *clientListPerm
88    *clientListTemp
89    *referenceList
90    *permObjPrio list
91    *schedObjPrio
92    */
93    //start: lists to be used
94    /**
95    *creates list (typ map) that contains objids, struct with info concerning object(objid)
96    */
97//     std::map<unsigned int, objInfo> listToProcess_;//copy of argument, when traffic control tool is being called, the original of this must be returned later on, eg the list given by GS
98    /**
99    *permanent client list: contains client ids, object ids and objectInfos (in this order)
100    */
101    std::map<unsigned int, std::map<unsigned int, objInfo > > clientListPerm_;
102    //has to be created with constructor and then needs to be updated by evaluateList().
103
104    /**
105    *temporary client list: contains client ids, gamestate ids and object ids (in this order)
106    */
107    std::map<unsigned int, std::map<unsigned int, std::list<obj> > > clientListTemp_;
108    /**
109    *static priority list: contains obj id, basic priority (in this order)
110    */
111//     std::map<unsigned int, unsigned int> permObjPrio_;
112    /**
113    *dynamic priority list: contains obj id, dynamic priority (eg scheduled) (in this order)
114    */
115//     std::map<unsigned int, unsigned int> schedObjPrio_;
116    //end: lists to be used
117
118    /**updateReferenceList
119    *currentGamestateID and currentClientID will be defined as soon as TrafficControl is being called by Server
120    */
121    unsigned int currentGamestateID;
122    unsigned int currentClientID;
123    unsigned int targetSize;
124    bool         bActive_;
125    /**
126    *copiedVector is a copy of the given Vector by the GSmanager, on this list all manipulations are performed
127    */
128//     std::list<obj> copiedVector;
129
130//     void updateReferenceList(std::map<unsigned int, objInfo> *list);//done
131    void insertinClientListPerm(unsigned int clientID, obj objinf);//done
132    /**
133    *creates listToProcess, which can be easialy compared with other lists
134    */
135//     void copyList(std::list<obj> *list);//done
136   
137    void cut(std::list<obj> *list, unsigned int targetsize);
138    void updateClientListTemp(std::list<obj> *list);//done
139    /**
140    *evaluates Data given (list) and produces result(->Data to be updated)
141    */
142    void evaluateList(unsigned int clientID, std::list<obj> *list);//done   
143    void ack(unsigned int clientID, unsigned int gamestateID);  // this function gets called when the server receives an ack from the client
144   
145    //ClientConnectionListener functions
146    virtual void clientConnected(unsigned int clientID){};
147    virtual void clientDisconnected(unsigned int clientID);
148
149 
150  protected:
151    static TrafficControl *instance_;
152
153  public:
154    TrafficControl();
155    virtual ~TrafficControl();
156    /**
157    *is being used by GSManager from Server:
158    *list contains: ObjIds, CreatorIds, Size (in this order) from Client XY
159    *Elements of list are accessed by *list[i]
160    *Elements of struct i are therefore: *list[i].objID
161    */
162    void setConfigValues();
163    static TrafficControl *getInstance();
164    void processObjectList(unsigned int clientID, unsigned int gamestateID, std::list<obj>* list); //gets a pointer to the list (containing objectIDs) and sorts it
165    //done
166    static void processAck(unsigned int clientID, unsigned int gamestateID)
167    { return instance_->ack(clientID, gamestateID); }
168    //done
169    void deleteObject(unsigned int objectID);                           // this function gets called when an object has been deleted (in order to clean up lists and maps)
170   
171    bool prioritySort(uint32_t clientID, obj i, obj j);
172    bool dataSort(obj i, obj j);
173    void printList(std::list<obj> *list, unsigned int clientID);
174    void fixCreatorDependencies(std::list<obj>::iterator it, std::list<obj> *list, unsigned int clientID);
175};
176
177}
178
179#endif
180
Note: See TracBrowser for help on using the repository browser.