Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

now comes the synchronization process from master server to proxy server, this task will probably be the hardest

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().ipString(), 9999);
136  // and to the other proxy servers also, this would be very nice if its works
137
138
139  // start the network game manager
140  this->networkStream->createNetworkGameManager();
141
142
143  PRINTF(0)("Created Network Proxy Server\n");
144  SDL_Delay(20);
145  return 1;
146}
147
148
149/**
150 *  creates a connection from one object to a host
151 * @param hostName: the name of the destination host
152 */
153int NetworkManager::createClient(const std::string & name, unsigned int port)
154{
155  // load the network settings
156  NetworkSettings::getInstance()->loadData();
157
158  // create the network stream
159  this->networkStream = new NetworkStream(NET_CLIENT);
160  // connect to the master server, if a redirection should occure, this is handled in the NetworkStream itself
161  this->networkStream->connectToMasterServer( name, port);
162
163  // and start the handshake
164  this->networkStream->startHandshake();
165
166  PRINTF(0)("Created Network Client\n");
167  return 1;
168}
169
170
171/**
172 * connects a synchronizeable to the network stream
173 * @param sync: synchronizeable to connect
174 */
175void NetworkManager::connectSynchronizeable(Synchronizeable& sync)
176{
177  if( this->networkStream)
178    this->networkStream->connectSynchronizeable(sync);
179}
180
181
182/**
183 *  sync the network
184 *  @param dtS: the seceonds elapsed since the last synchronize call
185 */
186void NetworkManager::synchronize( float dtS)
187{
188  this->elapsedTime += dtS;
189  if( likely(this->elapsedTime < 1.0f / NETWORK_FREQUENCY))
190    return;
191
192  this->elapsedTime = 0.0f;
193
194  if ( this->networkStream )
195    networkStream->processData();
196
197  NetworkGameManager::getInstance()->tick( this->elapsedTime );
198}
199
200
201
202/**
203 * debug output
204 */
205 void NetworkManager::debug()
206{
207  PRINT(0)("=================Network::debug()=========\n");
208  this->networkStream->debug();
209  PRINT(0)("===========================================\n");
210}
Note: See TracBrowser for help on using the repository browser.