Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

made the network stream interface more flexible in terms of connection reestablishing and fixed some segfaults connected to connection restarts

File size: 4.8 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 port: number of the TCP port
104 */
105int NetworkManager::createMasterServer(unsigned int port)
106{
107  // load the network settings
108  NetworkSettings::getInstance()->loadData();
109
110  // create the network stream
111  this->networkStream = new NetworkStream(NET_MASTER_SERVER);
112  this->networkStream->createServer( port);
113
114  // start the network game manager
115  this->networkStream->createNetworkGameManager();
116
117  PRINTF(0)("Created Network Master Server\n");
118  SDL_Delay(20);
119  return 1;
120}
121
122/**
123 *  creates a new network stream of proxy server type
124 * @param port: number of the TCP port
125 */
126int NetworkManager::createProxyServer(unsigned int port)
127{
128  // load the network settings
129  NetworkSettings::getInstance()->loadData();
130
131  // create the network stream
132  this->networkStream = new NetworkStream(NET_PROXY_SERVER_ACTIVE);
133  this->networkStream->createServer( port);
134  // and connect to the master server for synchronization
135//   this->networkStream->connectToMasterServer(NetworkSettings::getInstance()->getMasterAddr());
136  // and to the other proxy servers
137
138
139
140  // start the network game manager
141  this->networkStream->createNetworkGameManager();
142
143
144  PRINTF(0)("Created Network Proxy Server\n");
145  SDL_Delay(20);
146  return 1;
147}
148
149
150/**
151 *  creates a connection from one object to a host
152 * @param hostName: the name of the destination host
153 */
154int NetworkManager::createClient(const std::string & name, unsigned int port)
155{
156  // load the network settings
157  NetworkSettings::getInstance()->loadData();
158
159  // create the network stream
160  this->networkStream = new NetworkStream(NET_CLIENT);
161  // connect to the master server, if a redirection should occure, this is handled in the NetworkStream itself
162  this->networkStream->connectToMasterServer( name, port);
163
164  // and start the handshake
165  this->networkStream->startHandshake();
166
167  PRINTF(0)("Created Network Client\n");
168  return 1;
169}
170
171
172/**
173 * connects a synchronizeable to the network stream
174 * @param sync: synchronizeable to connect
175 */
176void NetworkManager::connectSynchronizeable(Synchronizeable& sync)
177{
178  if( this->networkStream)
179    this->networkStream->connectSynchronizeable(sync);
180}
181
182
183/**
184 *  sync the network
185 *  @param dtS: the seceonds elapsed since the last synchronize call
186 */
187void NetworkManager::synchronize( float dtS)
188{
189  this->elapsedTime += dtS;
190  if( likely(this->elapsedTime < 1.0f / NETWORK_FREQUENCY))
191    return;
192
193  this->elapsedTime = 0.0f;
194
195  if ( this->networkStream )
196    networkStream->processData();
197
198  NetworkGameManager::getInstance()->tick( this->elapsedTime );
199}
200
201
202
203/**
204 * debug output
205 */
206 void NetworkManager::debug()
207{
208  PRINT(0)("=================Network::debug()=========\n");
209  this->networkStream->debug();
210  PRINT(0)("===========================================\n");
211}
Note: See TracBrowser for help on using the repository browser.