Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/gui/src/network/ConnectionManager.h @ 1956

Last change on this file since 1956 was 1638, checked in by rgrieder, 16 years ago

merged input branch into gui test branch (was about time)
svn save (it's still a mess and CMLs haven't been updated)
I'll have to create a special project to create the tolua_bind files for tolua itself anyway..

  • Property svn:eol-style set to native
File size: 3.8 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, (C) 2007
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29//
30// C++ Interface: ConnectionManager
31//
32// Description:
33//
34//
35// Author:  Oliver Scheuss, (C) 2007
36//
37// Copyright: See COPYING file that comes with this distribution
38//
39//
40#ifndef _ConnectionManager_H__
41#define _ConnectionManager_H__
42
43#include "NetworkPrereqs.h"
44
45#include <string>
46#include <map>
47// enet library for networking support
48#include <enet/enet.h>
49#include <boost/thread/recursive_mutex.hpp>
50
51#include "PacketBuffer.h"
52#include "PacketManager.h"
53
54namespace boost { class thread; }
55
56namespace std
57{
58  bool operator<(ENetAddress a, ENetAddress b);
59}
60
61namespace network
62{
63#define NETWORK_PORT 55556
64#define NETWORK_MAX_CONNECTIONS 50
65#define NETWORK_WAIT_TIMEOUT 1
66
67  struct ClientList{
68    ENetEvent *event;
69    int ID;
70    ClientList *next;
71  };
72
73  class ConnectionManager{
74  public:
75    ConnectionManager();
76    ConnectionManager(ClientInformation *head);
77    ConnectionManager(ClientInformation *head, int port);
78    ConnectionManager(int port, const char *address, ClientInformation *head);
79    ConnectionManager(int port, std::string address, ClientInformation *head);
80    //ENetPacket *getPacket(ENetAddress &address); // thread1
81    //ENetPacket *getPacket(int &clientID);
82    ENetEvent *getEvent();
83    bool queueEmpty();
84    void createListener();
85    bool quitListener();
86    bool addPacket(ENetPacket *packet, ENetPeer *peer);
87    bool addPacket(ENetPacket *packet, int ID);
88    bool addPacketAll(ENetPacket *packet);
89  //  bool sendPackets(ENetEvent *event);
90    bool sendPackets();
91    //bool createClient(int clientID);
92    void disconnectClient(ClientInformation *client);
93    void syncClassid(int clientID);
94    bool sendWelcome(int clientID, int shipID, bool allowed);
95
96  private:
97//     bool clientDisconnect(ENetPeer *peer);
98//     bool removeClient(int clientID);
99    bool processData(ENetEvent *event);
100    //bool addClient(ENetEvent *event);
101    void receiverThread();
102    void disconnectClients();
103    int getClientID(ENetPeer peer);
104    int getClientID(ENetAddress address);
105    ENetPeer *getClientPeer(int clientID);
106    //bool createShip(ClientInformation *client);
107    bool removeShip(ClientInformation *client);
108    bool addFakeConnectRequest(ENetEvent *ev);
109    PacketBuffer buffer;
110    PacketGenerator packet_gen;
111
112    ENetHost *server;
113    ENetAddress bindAddress;
114
115    bool quit; // quit-variable (communication with threads)
116    ClientInformation *head_;
117
118    boost::thread *receiverThread_;
119    static boost::recursive_mutex enet_mutex_;
120//     int getNumberOfClients();
121    //functions to map what object every clients uses
122    /*std::map<int, int> clientsShip;
123    void addClientsObjectID( int clientID, int objectID );
124    int getClientsShipID( int clientID );
125    int getObjectsClientID( int objectID );
126    void deleteClientIDReg( int clientID );
127    void deleteObjectIDReg( int objectID );*/
128  };
129
130}
131
132#endif /* _ConnectionManager_H__ */
Note: See TracBrowser for help on using the repository browser.