From e124e693704faa56ecf32ce2a243d0c3fa3a5e6e Mon Sep 17 00:00:00 2001 From: Dwayne Boone Date: Wed, 17 Jan 2007 18:11:11 +0000 Subject: Changed demo --- cpp/demo/Ice/async/Server.cpp | 44 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) (limited to 'cpp/demo/Ice/async/Server.cpp') diff --git a/cpp/demo/Ice/async/Server.cpp b/cpp/demo/Ice/async/Server.cpp index 64a38295ebb..a3d94180741 100644 --- a/cpp/demo/Ice/async/Server.cpp +++ b/cpp/demo/Ice/async/Server.cpp @@ -7,31 +7,63 @@ // // ********************************************************************** -#include +#include +#include #include using namespace std; -class QueueServer : public Ice::Application +class AsyncServer : public Ice::Application { public: virtual int run(int, char*[]); + virtual void interruptCallback(int); + +private: + + WorkQueuePtr _workQueue; }; int main(int argc, char* argv[]) { - QueueServer app; + AsyncServer app; return app.main(argc, argv, "config.server"); } int -QueueServer::run(int argc, char* argv[]) +AsyncServer::run(int argc, char* argv[]) { - Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("Queue"); - adapter->add(new QueueI, communicator()->stringToIdentity("queue")); + callbackOnInterrupt(); + + Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("Hello"); + _workQueue = new WorkQueue(); + adapter->add(new HelloI(_workQueue), communicator()->stringToIdentity("hello")); + + _workQueue->start(); adapter->activate(); + communicator()->waitForShutdown(); return EXIT_SUCCESS; } + +void +AsyncServer::interruptCallback(int) +{ + _workQueue->destroy(); + _workQueue->getThreadControl().join(); + + try + { + communicator()->destroy(); + } + catch(const IceUtil::Exception& ex) + { + cerr << appName() << ": " << ex << endl; + } + catch(...) + { + cerr << appName() << ": unknown exception" << endl; + } +} -- cgit v1.2.3