Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/proxy/src/lib/network/handshake.cc @ 9365

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

ip synchronization now seems to work smoothly on my system here. but not on the laptop

File size: 5.0 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: Christoph Renner (rennerc@ee.ethz.ch)
13   co-programmer: Patirck Boenzli (boenzlip@orxonox.ethz.ch)
14*/
15
16
17#define DEBUG_MODULE_NETWORK
18
19#include "handshake.h"
20
21#include <cassert>
22#include "debug.h"
23
24
25
26
27
28 Handshake::Handshake( int nodeType, int clientId, int networkGameManagerId, int messageManagerId )
29  : Synchronizeable()
30{
31  /* set the class id for the base object */
32  this->setClassID(CL_HANDSHAKE, "Handshake");
33
34  // register all variable handlers
35  orxId_handler = registerVarId( new SynchronizeableInt( &localState.orxId, &remoteState.orxId, "orxonoxId", PERMISSION_ALL ) );
36  version_handler = registerVarId( new SynchronizeableInt( &localState.version, &remoteState.version, "version", PERMISSION_ALL ) );
37  netManId_handler = registerVarId( new SynchronizeableInt( &localState.networkManagerId, &remoteState.networkManagerId, "networkManagerId", PERMISSION_ALL ) );
38  msgManId_handler = registerVarId( new SynchronizeableInt( &localState.messageManagerId, &remoteState.messageManagerId, "messageManagerId", PERMISSION_ALL ) );
39  hostId_handler = registerVarId( new SynchronizeableInt( &localState.hostId, &remoteState.hostId, "hostId", PERMISSION_ALL ) );
40  completed_handler = registerVarId( new SynchronizeableInt( &localState.completed, &remoteState.completed, "completed", PERMISSION_ALL ) );
41  error_handler = registerVarId( new SynchronizeableInt( &localState.error, &remoteState.error, "error", PERMISSION_ALL ) );
42  errorString_handler = registerVarId( new SynchronizeableString( &localState.errorString, &remoteState.errorString, "errorString", PERMISSION_ALL ) );
43
44  this->nodeTypeHandler = registerVarId( new SynchronizeableInt( &localState.nodeType, &remoteState.nodeType, "nodeType", PERMISSION_ALL ) );
45
46  candel_id = registerVarId( new SynchronizeableInt( &localState.canDel, &remoteState.canDel, "canDel", PERMISSION_ALL ) );
47
48  registerVar( new SynchronizeableString( &localState.preferedNickName, &remoteState.preferedNickName, "preferedNickName", PERMISSION_ALL ) );
49  // now synchronize only two of the available proxy server addresses
50  registerVar( new SynchronizeableIP( &this->proxy1, &this->proxy1, "proxy server 1", PERMISSION_MASTER_SERVER ) );
51  registerVar( new SynchronizeableIP( &this->proxy2, &this->proxy2, "proxy server 2", PERMISSION_MASTER_SERVER ) );
52
53
54  // init the local state
55  localState.completed = 0;
56  localState.error = 0;
57  localState.errorString = "";
58  localState.hostId = clientId;
59  localState.networkManagerId = networkGameManagerId;
60  this->localState.messageManagerId = messageManagerId;
61  localState.orxId = _ORXONOX_ID;
62  localState.version = _ORXONOX_VERSION;
63  localState.nodeType = nodeType;
64  localState.canDel = 0;
65
66
67  // init the remote state
68  remoteState.completed = 0;
69  remoteState.error = 0;
70  remoteState.errorString = "";
71  remoteState.hostId = -1;
72  remoteState.networkManagerId = -1;
73  remoteState.messageManagerId = -1;
74  remoteState.orxId = 0;
75  remoteState.version = 0;
76  remoteState.nodeType = NET_CLIENT;
77  remoteState.canDel = 0;
78
79
80  this->proxyAddressesSynched = 2;
81  this->proxy1 = IP(0, 0);
82  this->proxy2 = IP(0, 0);
83  this->redirectProxy = 0;
84
85
86  // activate the synchronization process
87  this->setSynchronized(true);
88  PRINTF(0)("Handshake created clientId = %d\n", clientId);
89}
90
91
92/**
93 * handler for changes in synced vars
94 * @param id id's which have changed
95 */
96void Handshake::varChangeHandler( std::list< int > & id )
97{
98  for ( std::list<int>::iterator it = id.begin(); it != id.end(); it++ )
99  {
100    // orxonox id handler
101    if ( *it == this->orxId_handler )
102    {
103      if ( remoteState.orxId != _ORXONOX_ID )
104      {
105        localState.error = 1;
106        localState.completed = 1;
107        localState.errorString = "Seems not to be orxonox!";
108        continue;
109      }
110    }
111
112    // orxonox version handler
113    if ( *it == this->version_handler )
114    {
115      if ( remoteState.version != _ORXONOX_VERSION )
116      {
117        localState.error = 2;
118        localState.completed = 1;
119        localState.errorString = "Versions of server and client do not match!";
120        continue;
121      }
122    }
123
124    // node type handler: for each node type there is a specific action to be taken
125    if ( *it == this->nodeTypeHandler)
126    {
127      if ( remoteState.nodeType == NET_MASTER_SERVER )
128      {
129        continue;
130      }
131      else if( remoteState.nodeType == NET_PROXY_SERVER_ACTIVE)
132      {
133        continue;
134      }
135      else if( remoteState.nodeType == NET_CLIENT)
136      {
137        continue;
138      }
139    }
140
141    // cancel
142    if ( *it == candel_id )
143    {
144      PRINTF(0)("handshake finished candel changed\n");
145    }
146  }
147
148  // handshake completed
149  if ( remoteState.orxId == _ORXONOX_ID &&
150       remoteState.version == _ORXONOX_VERSION )
151  {
152    localState.completed = 1;
153  }
154}
155
Note: See TracBrowser for help on using the repository browser.