diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2006-11-20 14:27:39 +0000 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2006-11-20 14:27:39 +0000 |
commit | 6e75e27661055854623eee8671ce6d79ea2437f3 (patch) | |
tree | 7624f84223b8531453933e9362878d251753b0fd /cpp/demo/Ice/async/Consumer.cpp | |
parent | Make.rules.cs will not check for Ice installation in /opt/Ice-major.minor (diff) | |
download | ice-6e75e27661055854623eee8671ce6d79ea2437f3.tar.bz2 ice-6e75e27661055854623eee8671ce6d79ea2437f3.tar.xz ice-6e75e27661055854623eee8671ce6d79ea2437f3.zip |
Added cancel operation
Diffstat (limited to 'cpp/demo/Ice/async/Consumer.cpp')
-rw-r--r-- | cpp/demo/Ice/async/Consumer.cpp | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/cpp/demo/Ice/async/Consumer.cpp b/cpp/demo/Ice/async/Consumer.cpp index be16687b811..1b6f041a7c2 100644 --- a/cpp/demo/Ice/async/Consumer.cpp +++ b/cpp/demo/Ice/async/Consumer.cpp @@ -8,24 +8,44 @@ // ********************************************************************** #include <Ice/Application.h> +#include <IceUtil/UUID.h> #include <Queue.h> using namespace std; using namespace Demo; +static IceUtil::StaticMutex requestsMutex = ICE_STATIC_MUTEX_INITIALIZER; +static set<string> requests; + class AMI_Queue_getI : public AMI_Queue_get { public: + AMI_Queue_getI(const string& id) + : _id(id) + { + IceUtil::StaticMutex::Lock lock(requestsMutex); + requests.insert(_id); + } virtual void ice_response(const string& message) { + IceUtil::StaticMutex::Lock lock(requestsMutex); + requests.erase(_id); + cout << message << endl; } virtual void ice_exception(const ::Ice::Exception& ex) { + IceUtil::StaticMutex::Lock lock(requestsMutex); + requests.erase(_id); + cout << ex << endl; } + +private: + + string _id; }; class QueueConsumer : public Ice::Application @@ -76,7 +96,8 @@ QueueConsumer::run(int argc, char* argv[]) cin >> c; if(c == 'g') { - queue->get_async(new AMI_Queue_getI); + string id = IceUtil::generateUUID(); + queue->get_async(new AMI_Queue_getI(id), id); } else if(c == 'x') { @@ -99,6 +120,28 @@ QueueConsumer::run(int argc, char* argv[]) } while(cin.good() && c != 'x'); + + // + // Cancel any outstanding requests. + // + IceUtil::StaticMutex::Lock lock(requestsMutex); + if(requests.size() != 0) + { + try + { + vector<string> ids(requests.size()); + for(set<string>::iterator p = requests.begin(); p != requests.end(); ++p) + { + ids.push_back(*p); + } + queue->cancel(ids); + } + catch(const Ice::Exception&) + { + // Ignore + } + } + return EXIT_SUCCESS; } |