diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/demo/IceStorm/counter/Client.cpp | 21 | ||||
-rw-r--r-- | cpp/demo/IceStorm/counter/CounterObserverI.cpp | 13 | ||||
-rw-r--r-- | cpp/demo/IceStorm/counter/CounterObserverI.h | 23 |
3 files changed, 43 insertions, 14 deletions
diff --git a/cpp/demo/IceStorm/counter/Client.cpp b/cpp/demo/IceStorm/counter/Client.cpp index 6a96cefbedb..5d3cd2cb6f1 100644 --- a/cpp/demo/IceStorm/counter/Client.cpp +++ b/cpp/demo/IceStorm/counter/Client.cpp @@ -21,7 +21,7 @@ public: virtual int run(int, char*[]); private: - void menu(); + void menu(const MTPrinterPtr& printer); }; int @@ -51,20 +51,23 @@ Client::run(int argc, char* argv[]) return EXIT_FAILURE; } + MTPrinterPtr printer = new MTPrinter(); + Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapterWithEndpoints("Observer", "tcp"); - CounterObserverPrx observer = CounterObserverPrx::uncheckedCast(adapter->addWithUUID(new CounterObserverI)); + CounterObserverPrx observer = + CounterObserverPrx::uncheckedCast(adapter->addWithUUID(new CounterObserverI(printer))); adapter->activate(); counter->subscribe(observer); - menu(); + menu(printer); char c; do { try { - cout << "==> "; + printer->print("==> "); cin >> c; if(c == 'i') { @@ -80,12 +83,12 @@ Client::run(int argc, char* argv[]) } else if(c == '?') { - menu(); + menu(printer); } else { cout << "unknown command `" << c << "'" << endl; - menu(); + menu(printer); } } catch(const Ice::Exception& ex) @@ -101,12 +104,12 @@ Client::run(int argc, char* argv[]) } void -Client::menu() +Client::menu(const MTPrinterPtr& printer) { - cout << + printer->print( "usage:\n" "i: increment the counter\n" "d: decrement the counter\n" "x: exit\n" - "?: help\n"; + "?: help\n"); } diff --git a/cpp/demo/IceStorm/counter/CounterObserverI.cpp b/cpp/demo/IceStorm/counter/CounterObserverI.cpp index d2cda96d46e..318f04272c6 100644 --- a/cpp/demo/IceStorm/counter/CounterObserverI.cpp +++ b/cpp/demo/IceStorm/counter/CounterObserverI.cpp @@ -13,8 +13,9 @@ using namespace std; -CounterObserverI::CounterObserverI() : - _value(0) +CounterObserverI::CounterObserverI(const MTPrinterPtr& printer) : + _value(0), + _printer(printer) { } @@ -23,7 +24,9 @@ CounterObserverI::init(int value, const Ice::Current&) { Lock sync(*this); _value = value; - cout << "init: " << value << endl; + ostringstream ostr; + ostr << "init: " << value << endl; + _printer->print(ostr.str()); } void @@ -31,6 +34,8 @@ CounterObserverI::inc(int value, const Ice::Current&) { Lock sync(*this); _value += value; - cout << "int: " << value << " total: " << _value << endl; + ostringstream ostr; + ostr << "int: " << value << " total: " << _value << endl; + _printer->print(ostr.str()); } diff --git a/cpp/demo/IceStorm/counter/CounterObserverI.h b/cpp/demo/IceStorm/counter/CounterObserverI.h index c65d261b5db..fe46a438435 100644 --- a/cpp/demo/IceStorm/counter/CounterObserverI.h +++ b/cpp/demo/IceStorm/counter/CounterObserverI.h @@ -12,11 +12,31 @@ #include <Counter.h> +class MTPrinter : public IceUtil::Shared +{ +public: + MTPrinter() + { + } + + void print(const std::string& data) + { + IceUtil::Mutex::Lock sync(_mutex); + std::cout << data << std::flush; + } + +private: + + IceUtil::Mutex _mutex; +}; + +typedef IceUtil::Handle<MTPrinter> MTPrinterPtr; + class CounterObserverI : public Demo::CounterObserver, public IceUtil::Mutex { public: - CounterObserverI(); + CounterObserverI(const MTPrinterPtr& printer); virtual void init(int, const Ice::Current&); virtual void inc(int, const Ice::Current&); @@ -24,6 +44,7 @@ public: private: int _value; + MTPrinterPtr _printer; }; #endif |