summaryrefslogtreecommitdiff
path: root/cpp/demo/book/simple_filesystem/Client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/demo/book/simple_filesystem/Client.cpp')
-rwxr-xr-xcpp/demo/book/simple_filesystem/Client.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/cpp/demo/book/simple_filesystem/Client.cpp b/cpp/demo/book/simple_filesystem/Client.cpp
new file mode 100755
index 00000000000..3d9a5afb06f
--- /dev/null
+++ b/cpp/demo/book/simple_filesystem/Client.cpp
@@ -0,0 +1,83 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2004 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 -p 10000");
+ if (!base)
+ throw "Could not create proxy";
+
+ // 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)
+ ic->destroy();
+
+ return status;
+}