summaryrefslogtreecommitdiff
path: root/cpp/demo/manual/simple_filesystem/Client.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2014-11-03 15:58:54 +0100
committerBenoit Foucher <benoit@zeroc.com>2014-11-03 15:58:54 +0100
commit581d0449b2c5f1bbfd5bb3d6d1216040b832b273 (patch)
treec3ebc0b05f1ad8d5dc2156e471c799b30be8ecde /cpp/demo/manual/simple_filesystem/Client.cpp
parentFixed ICE-5816: Silverlight build failure (diff)
downloadice-581d0449b2c5f1bbfd5bb3d6d1216040b832b273.tar.bz2
ice-581d0449b2c5f1bbfd5bb3d6d1216040b832b273.tar.xz
ice-581d0449b2c5f1bbfd5bb3d6d1216040b832b273.zip
Fixed ICE-5811: renamed book demos to manual demos
Diffstat (limited to 'cpp/demo/manual/simple_filesystem/Client.cpp')
-rw-r--r--cpp/demo/manual/simple_filesystem/Client.cpp109
1 files changed, 109 insertions, 0 deletions
diff --git a/cpp/demo/manual/simple_filesystem/Client.cpp b/cpp/demo/manual/simple_filesystem/Client.cpp
new file mode 100644
index 00000000000..3568c39d202
--- /dev/null
+++ b/cpp/demo/manual/simple_filesystem/Client.cpp
@@ -0,0 +1,109 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <Ice/Ice.h>
+#include <Filesystem.h>
+#include <iostream>
+#include <iterator>
+
+using namespace std;
+using namespace Filesystem;
+
+// Recursively print the contents of directory "dir" in tree fashion.
+// For files, show the contents of each file. The "depth"
+// parameter is the current nesting level (for indentation).
+
+static void
+listRecursive(const DirectoryPrx& dir, int depth = 0)
+{
+ string indent(++depth, '\t');
+
+ NodeSeq contents = dir->list();
+
+ for(NodeSeq::const_iterator i = contents.begin(); i != contents.end(); ++i)
+ {
+ DirectoryPrx dir = DirectoryPrx::checkedCast(*i);
+ FilePrx file = FilePrx::uncheckedCast(*i);
+ cout << indent << (*i)->name() << (dir ? " (directory):" : " (file):") << endl;
+ if(dir)
+ {
+ listRecursive(dir, depth);
+ }
+ else
+ {
+ Lines text = file->read();
+ for(Lines::const_iterator j = text.begin(); j != text.end(); ++j)
+ {
+ cout << indent << "\t" << *j << endl;
+ }
+ }
+ }
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status = 0;
+ Ice::CommunicatorPtr ic;
+ try
+ {
+ //
+ // Create a communicator
+ //
+ ic = Ice::initialize(argc, argv);
+
+ //
+ // Create a proxy for the root directory
+ //
+ Ice::ObjectPrx base = ic->stringToProxy("RootDir:default -h localhost -p 10000");
+
+ //
+ // Down-cast the proxy to a Directory proxy
+ //
+ DirectoryPrx rootDir = DirectoryPrx::checkedCast(base);
+ if(!rootDir)
+ {
+ throw "Invalid proxy";
+ }
+
+ //
+ // Recursively list the contents of the root directory
+ //
+ cout << "Contents of root directory:" << endl;
+ listRecursive(rootDir);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ status = 1;
+ }
+ catch(const char* msg)
+ {
+ cerr << msg << endl;
+ status = 1;
+ }
+
+ //
+ // Clean up
+ //
+ if(ic)
+ {
+ try
+ {
+ ic->destroy();
+ }
+ catch(const Ice::Exception& e)
+ {
+ cerr << e << endl;
+ status = 1;
+ }
+ }
+
+ return status;
+}