Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/network/handshake.cc @ 9003

Last change on this file since 9003 was 8362, checked in by bensch, 18 years ago

orxonox/trunk: removed stupid included in base_object.h
this should lead to faster compile-times

File size: 3.8 KB
RevLine 
[6043]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
13   co-programmer:
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 "handshake.h"
23
[6753]24#include <cassert>
[8362]25#include "debug.h"
[6753]26
[7954]27Handshake::Handshake( bool server, int clientId, int networkGameManagerId, int messageManagerId )
[6695]28  : Synchronizeable()
[6043]29{
30  /* set the class id for the base object */
31  this->setClassID(CL_HANDSHAKE, "Handshake");
32
[6053]33  this->setIsServer(server);
[8362]34
[7954]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 ) );
[8362]43
[7954]44  candel_id = registerVarId( new SynchronizeableInt( &localState.canDel, &remoteState.canDel, "canDel", PERMISSION_ALL ) );
[8362]45
[7954]46  localState.completed = 0;
47  localState.error = 0;
48  localState.errorString = "";
49  localState.hostId = clientId;
50  localState.networkManagerId = networkGameManagerId;
51  this->localState.messageManagerId = messageManagerId;
52  localState.orxId = _ORXONOX_ID;
53  localState.version = _ORXONOX_VERSION;
54  localState.canDel = 0;
[8362]55
[7954]56  remoteState.completed = 0;
57  remoteState.error = 0;
58  remoteState.errorString = "";
59  remoteState.hostId = -1;
60  remoteState.networkManagerId = -1;
61  remoteState.messageManagerId = -1;
62  remoteState.orxId = 0;
63  remoteState.version = 0;
64  remoteState.canDel = 0;
[6053]65
[6695]66  this->setSynchronized(true);
[7954]67  PRINTF(0)("Handshake created clientId = %d\n", clientId);
[6043]68}
69
[7954]70/**
71 * handler for changes in synced vars
72 * @param id id's which have changed
73 */
74void Handshake::varChangeHandler( std::list< int > & id )
[6043]75{
[7954]76  for ( std::list<int>::iterator it = id.begin(); it != id.end(); it++ )
[6043]77  {
[7954]78    if ( *it == orxId_handler )
[6043]79    {
[7954]80      if ( remoteState.orxId != _ORXONOX_ID )
81      {
82        localState.error = 1;
83        localState.completed = 1;
84        localState.errorString = "Seems not to be orxonox!";
85        continue;
86      }
[6043]87
88    }
[8362]89
[7954]90    if ( *it == version_handler )
[6043]91    {
[7954]92      if ( remoteState.version != _ORXONOX_VERSION )
93      {
94        localState.error = 2;
95        localState.completed = 1;
96        localState.errorString = "Versions of server and client do not match!";
97        continue;
98      }
[6043]99
100    }
[8362]101
[7954]102    if ( *it == candel_id )
[6043]103    {
[7954]104      PRINTF(0)("handshake finished candel changed\n");
[6090]105    }
[8362]106
[6043]107  }
[8362]108
[7954]109  if (
110      remoteState.orxId == _ORXONOX_ID &&
111      remoteState.version == _ORXONOX_VERSION
112     )
113    localState.completed = 1;
[6043]114}
115
Note: See TracBrowser for help on using the repository browser.