Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentation2/src/orxonox/Test.cc @ 6173

Last change on this file since 6173 was 6123, checked in by scheusso, 15 years ago

synchronisation of pointers to classes that inherit from Synchronisable are now possible
just use the normal registerVariable syntax

  • Property svn:eol-style set to native
File size: 6.1 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Oli Scheuss
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#include "core/CoreIncludes.h"
30#include "core/ConfigValueIncludes.h"
31#include "core/ConsoleCommand.h"
32#include "network/NetworkFunction.h"
33#include "Test.h"
34#include "util/MultiType.h"
35
36namespace orxonox
37{
38    CreateFactory ( Test );
39 
40    SetConsoleCommand(Test, printV1, true).accessLevel(AccessLevel::User);
41    SetConsoleCommand(Test, printV2, true).accessLevel(AccessLevel::User);
42    SetConsoleCommand(Test, printV3, true).accessLevel(AccessLevel::User);
43    SetConsoleCommand(Test, printV4, true).accessLevel(AccessLevel::User);
44    SetConsoleCommand(Test, call, true).accessLevel(AccessLevel::User);
45    SetConsoleCommand(Test, call2, true).accessLevel(AccessLevel::User);
46 
47 
48  //void=* aaaaa = copyPtr<sizeof(&Test::printV1)>( &NETWORK_FUNCTION_POINTER, &Test::printV1 );
49  //void* NETWORK_FUNCTION_TEST_B = memcpy(&NETWORK_FUNCTION_POINTER, &a, sizeof(a));
50//   NetworkFunctionBase* NETWORK_FUNCTION_TEST_C = new NetworkFunctionStatic( createFunctor(&Test::printV1), "bla", NETWORK_FUNCTION_POINTER );
51 
52    registerStaticNetworkFunction( &Test::printV1 );
53    registerMemberNetworkFunction( Test, checkU1 );
54    registerMemberNetworkFunction( Test, printBlaBla );
55 
56    Test* Test::instance_ = 0;
57
58    Test::Test(BaseObject* creator) : BaseObject(creator), Synchronisable(creator)
59    {
60        assert(instance_==0);
61        instance_=this;
62        RegisterObject ( Test );
63        setConfigValues();
64        registerVariables();
65        setSyncMode(0x3);
66        this->pointer_ = 0;
67    }
68
69    Test::~Test()
70    {
71        instance_=0;
72    }
73
74    void Test::setConfigValues()
75    {
76        SetConfigValue ( u1, 1 )/*.callback ( this, &Test::checkV1 )*/;
77        SetConfigValue ( u2, 2 )/*.callback ( this, &Test::checkV2 )*/;
78        SetConfigValue ( u3, 3 )/*.callback ( this, &Test::checkV3 )*/;
79        SetConfigValue ( u4, 4 )/*.callback ( this, &Test::checkV4 )*/;
80   
81        SetConfigValue ( s1, 1 )/*.callback ( this, &Test::checkV1 )*/;
82        SetConfigValue ( s2, 2 )/*.callback ( this, &Test::checkV2 )*/;
83        SetConfigValue ( s3, 3 )/*.callback ( this, &Test::checkV3 )*/;
84        SetConfigValue ( s4, 4 )/*.callback ( this, &Test::checkV4 )*/;
85    }
86
87
88    void Test::registerVariables()
89    {
90        registerVariable ( u1, VariableDirection::ToClient, new NetworkCallback<Test> ( this, &Test::checkU1 ));
91        registerVariable ( u2, VariableDirection::ToServer, new NetworkCallback<Test> ( this, &Test::checkU2 ));
92        registerVariable ( u3, Bidirectionality::ServerMaster, new NetworkCallback<Test> ( this, &Test::checkU3 ), true );
93        registerVariable ( u4, Bidirectionality::ClientMaster, new NetworkCallback<Test> ( this, &Test::checkU4 ), true );
94   
95        registerVariable ( s1, VariableDirection::ToClient, new NetworkCallback<Test> ( this, &Test::checkS1 ));
96        registerVariable ( s2, VariableDirection::ToServer, new NetworkCallback<Test> ( this, &Test::checkS2 ));
97        registerVariable ( s3, Bidirectionality::ServerMaster, new NetworkCallback<Test> ( this, &Test::checkS3 ), true );
98        registerVariable ( s4, Bidirectionality::ClientMaster, new NetworkCallback<Test> ( this, &Test::checkS4 ), true );
99   
100        registerVariable ( pointer_, VariableDirection::ToClient, new NetworkCallback<Test> ( this, &Test::printPointer ) );
101    }
102 
103  void Test::call(unsigned int clientID)
104    {
105        callStaticNetworkFunction( &Test::printV1, clientID );
106        callStaticNetworkFunction( &Test::printV1, clientID );
107    }
108 
109    void Test::call2(unsigned int clientID, std::string s1, std::string s2, std::string s3, std::string s4)
110    {
111        callMemberNetworkFunction( Test, printBlaBla, this->getObjectID(), clientID, s1, s2, s3, s4, s4 );
112    }
113 
114    void Test::tick(float dt)
115    {
116    //     std::string str1 = "blub";
117    //     //MultiType mt1(std::string("blub"));
118    //     MultiType mt1(str1);
119    //     uint8_t* mem = new uint8_t[mt1.getNetworkSize()];
120    //     uint8_t* temp = mem;
121    //     mt1.exportData( temp );
122    //     assert( temp-mem == mt1.getNetworkSize() );
123    //     MultiType mt2;
124    //     temp = mem;
125    //     mt2.importData( temp );
126    //     assert( temp-mem == mt1.getNetworkSize() );
127    //     COUT(0) << mt2 << endl;
128    //     if(!Core::isMaster())
129    //       call2(0, "bal", "a", "n", "ce");
130    //       callMemberNetworkFunction( Test, checkU1, this->getObjectID(), 0 );
131    }
132   
133    void Test::printBlaBla(std::string s1, std::string s2, std::string s3, std::string s4, std::string s5)
134    {
135        COUT(0) << s1 << s2 << s3 << s4 << s5 << endl;
136    }
137   
138    void Test::checkU1(){ COUT(1) << "U1 changed: " << u1 << std::endl; }
139    void Test::checkU2(){ COUT(1) << "U2 changed: " << u2 << std::endl; }
140    void Test::checkU3(){ COUT(1) << "U3 changed: " << u3 << std::endl; }
141    void Test::checkU4(){ COUT(1) << "U4 changed: " << u4 << std::endl; }
142
143    void Test::checkS1(){ COUT(1) << "S1 changed: " << s1 << std::endl; }
144    void Test::checkS2(){ COUT(1) << "S2 changed: " << s2 << std::endl; }
145    void Test::checkS3(){ COUT(1) << "S3 changed: " << s3 << std::endl; }
146    void Test::checkS4(){ COUT(1) << "S4 changed: " << s4 << std::endl; }
147   
148    void Test::printPointer(){ CCOUT(1) << "pointer: " << this->pointer_ << endl; }
149
150}
Note: See TracBrowser for help on using the repository browser.