diff options
author | Marc Laukien <marc@zeroc.com> | 2001-09-26 03:50:39 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2001-09-26 03:50:39 +0000 |
commit | 5d29876aa7e386ebb4572959b7f1cdc84bfef0c5 (patch) | |
tree | 3cdd9e64be0d28e87668aef6e1320426ee3ce193 /cpp/demo/Freeze/phonebook/Server.cpp | |
parent | fixes for windows (diff) | |
download | ice-5d29876aa7e386ebb4572959b7f1cdc84bfef0c5.tar.bz2 ice-5d29876aa7e386ebb4572959b7f1cdc84bfef0c5.tar.xz ice-5d29876aa7e386ebb4572959b7f1cdc84bfef0c5.zip |
Application class
Diffstat (limited to 'cpp/demo/Freeze/phonebook/Server.cpp')
-rw-r--r-- | cpp/demo/Freeze/phonebook/Server.cpp | 260 |
1 files changed, 98 insertions, 162 deletions
diff --git a/cpp/demo/Freeze/phonebook/Server.cpp b/cpp/demo/Freeze/phonebook/Server.cpp index 7d56e7992fc..325979d60a0 100644 --- a/cpp/demo/Freeze/phonebook/Server.cpp +++ b/cpp/demo/Freeze/phonebook/Server.cpp @@ -8,197 +8,133 @@ // // ********************************************************************** +#include <Ice/Application.h> #include <ServantFactory.h> -static Ice::CommunicatorPtr communicator; - -#ifdef WIN32 - -static BOOL WINAPI -interruptHandler(DWORD) -{ - assert(communicator); - communicator->shutdown(); - return TRUE; -} - -static void -shutdownOnInterrupt() -{ - SetConsoleCtrlHandler(NULL, FALSE); - SetConsoleCtrlHandler(interruptHandler, TRUE); -} - -static void -ignoreInterrupt() -{ - SetConsoleCtrlHandler(NULL, TRUE); -} - -#else - -# include <signal.h> - -static void -interruptHandler(int) -{ - assert(communicator); - communicator->shutdown(); -} - -static void -shutdownOnInterrupt() -{ - struct sigaction action; - action.sa_handler = interruptHandler; - sigemptyset(&action.sa_mask); - sigaddset(&action.sa_mask, SIGHUP); - sigaddset(&action.sa_mask, SIGINT); - sigaddset(&action.sa_mask, SIGTERM); - action.sa_flags = 0; - sigaction(SIGHUP, &action, 0); - sigaction(SIGINT, &action, 0); - sigaction(SIGTERM, &action, 0); -} - -static void -ignoreInterrupt() -{ - struct sigaction action; - action.sa_handler = SIG_IGN; - sigemptyset(&action.sa_mask); - action.sa_flags = 0; - sigaction(SIGHUP, &action, 0); - sigaction(SIGINT, &action, 0); - sigaction(SIGTERM, &action, 0); -} - -#endif - +using namespace std; using namespace Ice; using namespace Freeze; -using namespace std; + +class PhoneBookServer : public Application +{ + int run(int argc, char* argv[]); +}; int -run(int argc, char* argv[], const DBEnvironmentPtr& dbEnv) +PhoneBookServer::run(int argc, char* argv[]) { cout << "starting up..." << endl; ignoreInterrupt(); - - PropertiesPtr properties = communicator->getProperties(); - string value; - - // - // Open the phonebook and contacts database. - // - DBPtr dbPhoneBook = dbEnv->openDB("phonebook"); - DBPtr dbContacts = dbEnv->openDB("contacts"); - - // - // Create an Evictor for contacts. - // - EvictorPtr evictor = dbContacts->createEvictor(); - value = properties->getProperty("PhoneBook.EvictorSize"); - if(!value.empty()) + + int status; + DBEnvironmentPtr dbEnv; + + try + { + PropertiesPtr properties = communicator()->getProperties(); + string value; + + // + // Open the database environment and the phonebook and + // contacts database within this environment. + // + dbEnv = Freeze::initialize(communicator(), "db"); + DBPtr dbPhoneBook = dbEnv->openDB("phonebook"); + DBPtr dbContacts = dbEnv->openDB("contacts"); + + // + // Create an Evictor for contacts. + // + EvictorPtr evictor = dbContacts->createEvictor(); + value = properties->getProperty("PhoneBook.EvictorSize"); + if(!value.empty()) + { + evictor->setSize(atoi(value.c_str())); + } + value = properties->getProperty("PhoneBook.SaveAfterMutatingOperation"); + if(!value.empty() && atoi(value.c_str()) > 0) + { + evictor->setPersistenceMode(SaveAfterMutatingOperation); + } + else + { + evictor->setPersistenceMode(SaveUponEviction); + } + + // + // Create an Object Adapter, use the Evictor as Servant Locator. + // + ObjectAdapterPtr adapter = communicator()->createObjectAdapter("PhoneBookAdapter"); + adapter->setServantLocator(evictor); + + // + // Create the phonebook, and add it to the Object Adapter. + // + PhoneBookIPtr phoneBook = new PhoneBookI(adapter, dbPhoneBook, evictor); + adapter->add(phoneBook, "phonebook"); + + // + // Create and install a factory and initializer for contacts. + // + ServantFactoryPtr contactFactory = new ContactFactory(phoneBook, evictor); + ServantInitializerPtr contactInitializer = ServantInitializerPtr::dynamicCast(contactFactory); + communicator()->installServantFactory(contactFactory, "::Contact"); + evictor->installServantInitializer(contactInitializer); + + // + // Everything ok, let's go. + // + adapter->activate(); + shutdownOnInterrupt(); + communicator()->waitForShutdown(); + ignoreInterrupt(); + status = EXIT_SUCCESS; + } + catch(const LocalException& ex) { - evictor->setSize(atoi(value.c_str())); + cerr << argv[0] << ": local exception: " << ex << endl; + status = EXIT_FAILURE; } - value = properties->getProperty("PhoneBook.SaveAfterMutatingOperation"); - if(!value.empty() && atoi(value.c_str()) > 0) + catch(const DBExceptionPtrE& ex) { - evictor->setPersistenceMode(SaveAfterMutatingOperation); + cerr << argv[0] << ": database exception: " << ex->message << endl; + status = EXIT_FAILURE; } - else + catch(...) { - evictor->setPersistenceMode(SaveUponEviction); + cerr << argv[0] << ": unknown exception" << endl; + status = EXIT_FAILURE; } - // - // Create an Object Adapter, use the Evictor as Servant Locator. - // - ObjectAdapterPtr adapter = communicator->createObjectAdapter("PhoneBookAdapter"); - adapter->setServantLocator(evictor); - - // - // Create the phonebook, and add it to the Object Adapter. - // - PhoneBookIPtr phoneBook = new PhoneBookI(adapter, dbPhoneBook, evictor); - adapter->add(phoneBook, "phonebook"); - - // - // Create and install a factory and initializer for contacts. - // - ServantFactoryPtr contactFactory = new ContactFactory(phoneBook, evictor); - ServantInitializerPtr contactInitializer = ServantInitializerPtr::dynamicCast(contactFactory); - communicator->installServantFactory(contactFactory, "::Contact"); - evictor->installServantInitializer(contactInitializer); - - // - // Everything ok, let's go. - // - adapter->activate(); - shutdownOnInterrupt(); - communicator->waitForShutdown(); - cout << "shutting down..." << endl; - ignoreInterrupt(); - return EXIT_SUCCESS; -} - -int -main(int argc, char* argv[]) -{ - int status; - DBEnvironmentPtr dbEnv; - try { - PropertiesPtr properties = createPropertiesFromFile(argc, argv, "config"); - communicator = Ice::initializeWithProperties(properties); - dbEnv = Freeze::initialize(communicator, "db"); - status = run(argc, argv, dbEnv); + dbEnv->close(); } catch(const LocalException& ex) { - cerr << ex << endl; + cerr << argv[0] << ": local exception: " << ex << endl; status = EXIT_FAILURE; } - catch(const DBException& ex) + catch(const DBExceptionPtrE& ex) { - cerr << ex.message << endl; + cerr << argv[0] << ": database exception: " << ex->message << endl; status = EXIT_FAILURE; } - - if (dbEnv) + catch(...) { - try - { - dbEnv->close(); - } - catch(const LocalException& ex) - { - cerr << ex << endl; - status = EXIT_FAILURE; - } - catch(const DBException& ex) - { - cerr << ex.message << endl; - status = EXIT_FAILURE; - } + cerr << argv[0] << ": unknown exception" << endl; + status = EXIT_FAILURE; } - if (communicator) - { - try - { - communicator->destroy(); - communicator = 0; - } - catch(const LocalException& ex) - { - cerr << ex << endl; - status = EXIT_FAILURE; - } - } + defaultInterrupt(); + cout << "shutting down..." << endl; return status; } + +int +main(int argc, char* argv[]) +{ + PhoneBookServer app; + app.main(argc, argv, "config"); +} |