summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/demo/IceStorm/counter/Client.cpp21
-rw-r--r--cpp/demo/IceStorm/counter/CounterObserverI.cpp13
-rw-r--r--cpp/demo/IceStorm/counter/CounterObserverI.h23
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