Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

not creating the network game manager, since it is created by the handshake from the master server

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(), 9999);
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);
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.