Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/objecthierarchy/src/network/ClientInformation.h @ 2017

Last change on this file since 2017 was 2009, checked in by scheusso, 16 years ago

server is now able to deliver ping time and packet loss ratio for all its clients

  • Property svn:eol-style set to native
File size: 3.4 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 *      ...
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29//
30// C++ Interface: ClientInformation
31//
32// Description:
33//
34//
35// Author:  <>, (C) 2007
36//
37// Copyright: See COPYING file that comes with this distribution
38//
39//
40#ifndef _ClientInformation_H__
41#define _ClientInformation_H__
42
43#include "NetworkPrereqs.h"
44
45#include <enet/enet.h>
46#include <boost/thread/recursive_mutex.hpp>
47
48// WATCH OUT: THE CLIENTINFORMATION LIST IS NOT THREADSAFE ANYMORE
49
50namespace network
51{
52  static const unsigned int GAMESTATEID_INITIAL = (unsigned int)-1;
53  static const unsigned int CLIENTID_UNKNOWN = (unsigned int)-2;
54
55  /**
56  * This class implements a list for client informations
57  * @author Oliver Scheuss
58  */
59  class _NetworkExport ClientInformation{
60  public:
61    ClientInformation();
62    //   ClientInformation(ClientInformation *prev, ClientInformation *next);
63    //   ClientInformation(ClientInformation *prev);
64    ~ClientInformation();
65    ClientInformation *next();
66    ClientInformation *prev();
67    static ClientInformation *insertBack(ClientInformation *ins);
68
69    // set functions
70    void setID(int clientID);
71    bool setPeer(ENetPeer *peer);
72    bool setGamestateID(int id);
73    bool setPartialGamestateID(int id);
74    inline void setShipID(unsigned int id){ShipID_=id;}
75
76    // get functions
77    inline unsigned int getShipID(){return ShipID_;}
78    unsigned int getID();
79    unsigned int getGamestateID();
80    unsigned int getPartialGamestateID();
81    ENetPeer *getPeer();
82
83    int getFailures();
84    void addFailure();
85    void resetFailures();
86    enet_uint32 getRTT();
87    double getPacketLoss();
88
89    static bool removeClient(unsigned int clientID);
90    static bool removeClient(ENetPeer *peer);
91    static ClientInformation *findClient(unsigned int clientID, bool look_backwards=false);
92    static ClientInformation *findClient(ENetAddress *address, bool look_backwards=false);
93    static ClientInformation *getBegin(){return head_;}
94
95    bool setSynched(bool s);
96    bool getSynched();
97
98
99  private:
100    static ClientInformation *head_;
101
102    bool setNext(ClientInformation *next);
103    bool setPrev(ClientInformation *prev);
104    ClientInformation *insertAfter(ClientInformation *ins);
105    ClientInformation *insertBefore(ClientInformation *ins);
106
107    ClientInformation *preve;
108    ClientInformation *nexte;
109    //actual information:
110    ENetPeer *peer_;
111    unsigned int clientID_;
112    unsigned int gamestateID_;
113    unsigned int partialGamestateID_;
114    unsigned int ShipID_;   // this is the unique objectID
115    bool synched_;
116    unsigned short failures_;
117
118  };
119
120}
121
122#endif /* _ClientInformation_H__ */
Note: See TracBrowser for help on using the repository browser.