23 #ifndef ICE_APPLICATION_BASE_H
24 #define ICE_APPLICATION_BASE_H
34 #include <boost/thread.hpp>
35 #include <boost/thread/mutex.hpp>
43 static const unsigned int ICEAPPLICATION_ACTIVATION_TIMEOUT_MS(600);
60 int run(
int,
char*[]);
63 template<
typename TserverBase,
typename TserverClass>
71 static TserverBase*
i();
72 static const std::vector<std::string>
endpoints();
79 virtual TserverBase*
i_impl() = 0;
92 void starticeexample();
94 bool application_started();
96 int run(
int,
char*[]);
98 static void kickoff();
101 template<
typename TserverBase,
typename TserverClass>
107 template<
typename TserverBase,
typename TserverClass>
116 template<
typename TserverBase,
typename TserverClass>
124 if(conffile.size() > 0) {
125 std::stringstream iceconf;
129 d_application->main(0, argv, iceconf.str().c_str());
134 d_application->main(0, argv);
138 template<
typename TserverBase,
typename TserverClass>
141 static bool run_once =
false;
148 (
new boost::thread(boost::bind(&ice_application_base::starticeexample, d_this)));
150 ::timespec timer_ts, rem_ts;
151 timer_ts.tv_sec = 0; timer_ts.tv_nsec = ICEAPPLICATION_ACTIVATION_TIMEOUT_MS*1000;
154 while(!d_this->application_started()) {
155 #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
156 ::Sleep(timer_ts.tv_nsec / 1000000);
158 ::nanosleep(&timer_ts, &rem_ts);
160 if(!d_this->application_started())
163 std::cout <<
"ice_application_base::kickoff(), timeout waiting to get communicator() d_application->main() might have failed?!" << std::endl;;
175 template<
typename TserverBase,
typename TserverClass>
178 return (d_this->d_reacquire != d_application->d_reacquire_attributes);
181 template<
typename TserverBase,
typename TserverClass>
184 d_this->d_reacquire = d_application->d_reacquire_attributes;
188 template<
typename TserverBase,
typename TserverClass>
191 std::vector<std::string> ep; ep.push_back(d_this->d_application->d_endpointStr);
return ep;
194 template<
typename TserverBase,
typename TserverClass>
200 if(!d_this->application_started()) {
211 return d_this->i_impl();
221 template<
typename TserverBase,
typename TImplClass>