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

Last change on this file since 5638 was 5638, checked in by Christoph Mayer, 15 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.