An Overlay-based
Virtual Network Substrate
SpoVNet

source: source/ariba/utility/system/StartupWrapper.cpp @ 5638

Last change on this file since 5638 was 5638, checked in by Christoph Mayer, 14 years ago

adress detection aufgeräumt, network info für bleutooth, data stream (hopeful crash fix), logging auf maemo nur warn, ...

File size: 5.7 KB
Line 
1// [License]
2// The Ariba-Underlay Copyright
3//
4// Copyright (c) 2008-2009, Institute of Telematics, UniversitÀt Karlsruhe (TH)
5//
6// Institute of Telematics
7// UniversitÀt Karlsruhe (TH)
8// Zirkel 2, 76128 Karlsruhe
9// Germany
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
22// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARIBA PROJECT OR
25// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32//
33// The views and conclusions contained in the software and documentation
34// are those of the authors and should not be interpreted as representing
35// official policies, either expressed or implied, of the Institute of
36// Telematics.
37// [License]
38
39#include "StartupWrapper.h"
40#include "ariba/config.h"
41
42namespace ariba {
43namespace utility {
44
45StartupWrapper::ConfigurationList StartupWrapper::configurations;
46#ifdef UNDERLAY_OMNET
47StartupWrapper::ModuleList StartupWrapper::modules;
48#endif
49
50SystemEventType StartupWrapperEventStartup("StartupWrapperEventStartup");
51
52StartupWrapper::StartupWrapper(StartupInterface* _service) : service( _service ){
53}
54
55StartupWrapper::~StartupWrapper(){
56}
57
58#ifdef UNDERLAY_OMNET
59void StartupWrapper::insertCurrentModule(AribaOmnetModule* mod){
60        modules.push( mod );
61}
62#endif
63
64#ifdef UNDERLAY_OMNET
65AribaOmnetModule* StartupWrapper::getCurrentModule(){
66        assert( modules.size() > 0 );
67
68        AribaOmnetModule* ret = modules.front();
69        modules.pop();
70
71        return ret;
72}
73#endif
74
75void StartupWrapper::startSystem(){
76
77        //
78        // having seeded the pseudo rng is always good
79        //
80
81        srand( time(NULL) );
82
83        //
84        // init the system queue
85        //
86
87        if( ! SystemQueue::instance().isRunning() )
88                SystemQueue::instance().run();
89
90        //
91        // init the logging system
92        //
93        // configure the logging
94        //
95
96        log4cxx::BasicConfigurator::configure();
97
98        // set the global log level
99        {
100                log4cxx::LoggerPtr logger(log4cxx::Logger::getRootLogger());
101                logger->setLevel(log4cxx::Level::getInfo());
102        }
103
104        // set up again an individual level if you like
105        /*
106        {
107                log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("PingPong"));
108                logger->setLevel(log4cxx::Level::getDebug());
109        }
110        {
111                log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("BaseCommunication"));
112                logger->setLevel(log4cxx::Level::getDebug());
113        }
114        {
115                log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("OverlayBootstrap"));
116                logger->setLevel(log4cxx::Level::getDebug());
117        }
118        {
119                        log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("BootstrapManager"));
120                        logger->setLevel(log4cxx::Level::getDebug());
121        }
122        {
123                        log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("BluetoothSdp"));
124                        logger->setLevel(log4cxx::Level::getDebug());
125        }
126        {
127                        log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("rfcomm"));
128                        logger->setLevel(log4cxx::Level::getAll());
129        }*/
130
131        //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
132        // DON'T SVN COMMIT YOUR CHANGED LOGGING! THE ABOVE CODE MUST REMAIN AS IS!
133        //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
134
135#ifdef HAVE_MAEMO
136        log4cxx::LoggerPtr logger(log4cxx::Logger::getRootLogger());
137        logger->setLevel(log4cxx::Level::getWarn());
138#endif
139}
140
141void StartupWrapper::stopSystem(){
142        SystemQueue::instance().cancel();
143}
144
145void StartupWrapper::initConfig(string filename){
146        configurations.push( filename );
147        Configuration::setConfigFilename( filename );
148}
149
150void StartupWrapper::handleSystemEvent(const SystemEvent& event){
151
152        if( event.getType() == StartupWrapperEventStartup ){
153
154                string config = configurations.front();
155                configurations.pop();
156                Configuration::setConfigFilename( config );
157
158                //
159                // start the actual application
160                //
161
162                // TODO: im falle von omnet ist service = null, da von SpoVNetOmnetModule so ÃŒbergeben
163                // wie wird im Falle von omnet die anwendung erstellt?
164
165                service->startup();
166
167        }
168
169}
170
171void StartupWrapper::startup(StartupInterface* service, bool block){
172
173        StartupWrapper* startup = new StartupWrapper(service);
174        service->wrapper = startup;
175
176        SystemQueue::instance().scheduleEvent(
177                SystemEvent( startup, StartupWrapperEventStartup, NULL), 0 );
178
179#ifndef UNDERLAY_OMNET
180        if( block ) getchar();
181#endif
182}
183
184void StartupWrapper::shutdown(StartupInterface* service, bool block){
185
186        if( service == NULL || service->wrapper == NULL ) return;
187
188#ifdef UNDERLAY_OMNET
189        //TODO: service->shutdown();
190#endif
191
192        if(block){
193                // call directly
194                service->shutdown();
195        }else{
196                // call async, but not using systemqueue! // TODO: mem leak
197                AsyncShutdown* async = new AsyncShutdown(service);
198                async->runBlockingMethod();
199        }
200}
201
202StartupWrapper::AsyncShutdown::AsyncShutdown(StartupInterface* _service)
203        : service(_service){
204}
205
206void StartupWrapper::AsyncShutdown::blockingFunction(){
207        service->shutdown();
208}
209
210void StartupWrapper::AsyncShutdown::dispatchFunction(){
211        //unused
212}
213
214}} // namespace ariba, utility
Note: See TracBrowser for help on using the repository browser.