// ********************************************************************** // // Copyright (c) 2003-2013 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 #include #include #include 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; }