Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/proxy/src/lib/network/network_manager.cc @ 9478

Last change on this file since 9478 was 9478, checked in by patrick, 18 years ago

shortly trying the hybrid mode again

File size: 5.1 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   ### File Specific:
12   main-programmer: Patrick Boenzli (patrick@orxonox.ethz.ch)
13   co-programmer: Christoph Renner (rennerc@ee.ethz.ch)
14*/
15
16
17/* this is for debug output. It just says, that all calls to PRINT() belong to the DEBUG_MODULE_NETWORK module
18   For more information refere to https://www.orxonox.net/cgi-bin/trac.cgi/wiki/DebugOutput
19*/
20#define DEBUG_MODULE_NETWORK
21
22#include "class_list.h"
23#include "debug.h"
24#include "shell_command.h"
25
26/* include your own header */
27#include "network_manager.h"
28#include "shared_network_data.h"
29#include "network_stream.h"
30#include "preferences.h"
31#include "network_log.h"
32#include "network_game_manager.h"
33
34
35/* using namespace std is default, this needs to be here */
36
37
38SHELL_COMMAND(debug, NetworkManager, debug);
39
40
41NetworkManager* NetworkManager::singletonRef = NULL;
42
43/**
44 *  standard constructor
45 */
46NetworkManager::NetworkManager()
47{
48  /* set the class id for the base object */
49  this->setClassID(CL_NETWORK_MANAGER, "NetworkManager");
50  PRINTF(0)("START\n");
51
52  /* initialize the references */
53  this->networkStream = NULL;
54  this->elapsedTime = 0.0f;
55
56
57  int port = Preferences::getInstance()->getInt( "network", "telnetport", 0 );
58
59  if ( port > 0 )
60    NetworkLog::getInstance()->listen( port );
61
62  PRINTF(0)("NetworkManager created\n");
63}
64
65
66/**
67 *  standard deconstructor
68 */
69NetworkManager::~NetworkManager()
70{
71  PRINTF(0)("NetworkManager destructor\n");
72  if ( this->networkStream )
73  {
74    delete this->networkStream;
75    this->networkStream = NULL;
76  }
77
78  NetworkManager::singletonRef = NULL;
79}
80
81
82/**
83 *  initializes the network manager
84 */
85void NetworkManager::initialize()
86{
87  PRINTF(0)("NetworkManager initzalized\n");
88}
89
90
91/**
92 *  shutsdown the network manager
93 */
94void NetworkManager::shutdown()
95{
96
97}
98
99
100
101/**
102 *  creates a new NetworkStream of server type
103 * @param clientPort: number of the TCP/UDP port for client connections
104 * @param proxyPort: number of the TCP/UDP port for proxy connections
105 */
106int NetworkManager::createMasterServer(unsigned int port)
107{
108  // load the network settings
109  NetworkSettings::getInstance()->loadData();
110
111  // create the network stream
112  this->networkStream = new NetworkStream(NET_MASTER_SERVER);
113  this->networkStream->createServer( port, port + 1);
114
115  // start the network game manager
116  this->networkStream->createNetworkGameManager();
117
118  PRINTF(0)("Created Network Master Server\n");
119  SDL_Delay(20);
120  return 1;
121}
122
123/**
124 *  creates a new network stream of proxy server type
125 * @param port: number of the TCP port
126 */
127int NetworkManager::createProxyServer(unsigned int port)
128{
129  // load the network settings
130  NetworkSettings::getInstance()->loadData();
131
132  // create the network stream af
133  this->networkStream = new NetworkStream(NET_PROXY_SERVER_ACTIVE );
134  // first connect to the master server for synchronization
135  this->networkStream->connectToMasterServer(NetworkSettings::getInstance()->getMasterAddr().ipString(), 10000);
136  // start the handshake with the master server
137  this->networkStream->startHandshake(NET_ID_MASTER_SERVER);
138
139
140  // then start the server
141  this->networkStream->createServer( port, port +1);
142
143
144  // and to the other proxy servers also, this would be very nice if its works
145
146
147  // start the network game manager
148//    this->networkStream->createNetworkGameManager();
149
150
151  PRINTF(0)("Created Network Proxy Server\n");
152  SDL_Delay(20);
153  return 1;
154}
155
156
157/**
158 *  creates a connection from one object to a host
159 * @param hostName: the name of the destination host
160 */
161int NetworkManager::createClient(const std::string & name, unsigned int port)
162{
163  // load the network settings
164  NetworkSettings::getInstance()->loadData();
165
166  // create the network stream
167  this->networkStream = new NetworkStream(NET_CLIENT);
168  // connect to the master server, if a redirection should occure, this is handled in the NetworkStream itself
169  this->networkStream->connectToMasterServer( name, port);
170
171  // and start the handshake
172  this->networkStream->startHandshake();
173
174  PRINTF(0)("Created Network Client\n");
175  return 1;
176}
177
178
179/**
180 * connects a synchronizeable to the network stream
181 * @param sync: synchronizeable to connect
182 */
183void NetworkManager::connectSynchronizeable(Synchronizeable& sync)
184{
185  if( this->networkStream)
186    this->networkStream->connectSynchronizeable(sync);
187}
188
189
190/**
191 *  sync the network
192 *  @param dtS: the seceonds elapsed since the last synchronize call
193 */
194void NetworkManager::synchronize( float dtS)
195{
196  this->elapsedTime += dtS;
197  if( likely(this->elapsedTime < 1.0f / NETWORK_FREQUENCY))
198    return;
199
200  this->elapsedTime = 0.0f;
201
202  if ( this->networkStream )
203    networkStream->processData();
204
205  NetworkGameManager::getInstance()->tick( this->elapsedTime );
206}
207
208
209
210/**
211 * debug output
212 */
213 void NetworkManager::debug()
214{
215  PRINT(0)("=================Network::debug()=========\n");
216  this->networkStream->debug();
217  PRINT(0)("===========================================\n");
218}
Note: See TracBrowser for help on using the repository browser.