diff options
author | Michi Henning <michi@zeroc.com> | 2007-07-26 16:02:33 +1000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2007-07-26 16:02:33 +1000 |
commit | 9986c4e5c3c484ffea0302eb57c61eb6ba8c0d09 (patch) | |
tree | cd40c3b6263d4e3792aa75256cb7b996c2682427 /cpp/demo | |
parent | Added life cycle demo for book. (diff) | |
download | ice-9986c4e5c3c484ffea0302eb57c61eb6ba8c0d09.tar.bz2 ice-9986c4e5c3c484ffea0302eb57c61eb6ba8c0d09.tar.xz ice-9986c4e5c3c484ffea0302eb57c61eb6ba8c0d09.zip |
Added Java life cycle demo. Fixed a few style issues and a bug
in C++ version.
Diffstat (limited to 'cpp/demo')
-rw-r--r-- | cpp/demo/book/Makefile.mak | 2 | ||||
-rw-r--r-- | cpp/demo/book/lifecycle/Client.cpp | 12 | ||||
-rw-r--r-- | cpp/demo/book/lifecycle/FilesystemI.cpp | 13 | ||||
-rw-r--r-- | cpp/demo/book/lifecycle/Grammar.y | 8 | ||||
-rw-r--r-- | cpp/demo/book/lifecycle/Parser.cpp | 28 | ||||
-rw-r--r-- | cpp/demo/book/lifecycle/Parser.h | 2 | ||||
-rw-r--r-- | cpp/demo/book/lifecycle/Server.cpp | 10 |
7 files changed, 42 insertions, 33 deletions
diff --git a/cpp/demo/book/Makefile.mak b/cpp/demo/book/Makefile.mak index a33a870d508..0c2e315873b 100644 --- a/cpp/demo/book/Makefile.mak +++ b/cpp/demo/book/Makefile.mak @@ -11,7 +11,7 @@ top_srcdir = ..\.. !include $(top_srcdir)\config\Make.rules.mak -SUBDIRS = printer simple_filesystem freeze_filesystem +SUBDIRS = printer simple_filesystem lifecycle freeze_filesystem $(EVERYTHING):: @for %i in ( $(SUBDIRS) ) do \ diff --git a/cpp/demo/book/lifecycle/Client.cpp b/cpp/demo/book/lifecycle/Client.cpp index 0e74b129254..329d6bac954 100644 --- a/cpp/demo/book/lifecycle/Client.cpp +++ b/cpp/demo/book/lifecycle/Client.cpp @@ -18,21 +18,25 @@ class FilesystemClient : virtual public Ice::Application { public: virtual int run(int, char * []) { - // Terminate cleanly on receipt of a signal + // Terminate cleanly on receipt of a signal. // shutdownOnInterrupt(); // Create a proxy for the root directory // Ice::ObjectPrx base = communicator()->stringToProxy("RootDir:default -p 10000"); - if (!base) + if(!base) + { throw "Could not create proxy"; + } - // Down-cast the proxy to a Directory proxy + // Down-cast the proxy to a Directory proxy. // DirectoryPrx rootDir = DirectoryPrx::checkedCast(base); - if (!rootDir) + if(!rootDir) + { throw "Invalid proxy"; + } ParserPtr p = new Parser(rootDir); return p->parse(); diff --git a/cpp/demo/book/lifecycle/FilesystemI.cpp b/cpp/demo/book/lifecycle/FilesystemI.cpp index 09d10b37f51..9b786c325ff 100644 --- a/cpp/demo/book/lifecycle/FilesystemI.cpp +++ b/cpp/demo/book/lifecycle/FilesystemI.cpp @@ -239,6 +239,10 @@ FilesystemI::DirectoryI::destroy(const Current& c) { throw ObjectNotExistException(__FILE__, __LINE__); } + if(!_contents.empty()) + { + throw PermissionDenied("Cannot destroy non-empty directory"); + } _destroyed = true; } @@ -246,11 +250,6 @@ FilesystemI::DirectoryI::destroy(const Current& c) reap(); - if(!_contents.empty()) - { - throw PermissionDenied("Cannot destroy non-empty directory"); - } - c.adapter->remove(id()); _parent->addReapEntry(_name); } @@ -272,13 +271,15 @@ FilesystemI::DirectoryI::DirectoryI(const ObjectAdapterPtr& a, const string& nam a->add(this, _id); } +// Add the passed name-node pair to the _contents map. + void FilesystemI::DirectoryI::addChild(const string& name, const NodeIPtr& node) { _contents[name] = node; } -// Add a directory and the name of a deleted entry in that directory to the reap map. +// Add this directory and the name of a deleted entry to the reap map. void FilesystemI::DirectoryI::addReapEntry(const string& name) diff --git a/cpp/demo/book/lifecycle/Grammar.y b/cpp/demo/book/lifecycle/Grammar.y index db4cc27f560..d0324edd9ea 100644 --- a/cpp/demo/book/lifecycle/Grammar.y +++ b/cpp/demo/book/lifecycle/Grammar.y @@ -99,10 +99,18 @@ command { parser->pwd(); } +| TOK_CD +{ + parser->cd("/"); +} | TOK_CD TOK_STRING { parser->cd($2.front()); } +| TOK_CD strings +{ + parser->error("usage: cd [DIR]"); +} | TOK_CAT TOK_STRING { parser->cat($2.front()); diff --git a/cpp/demo/book/lifecycle/Parser.cpp b/cpp/demo/book/lifecycle/Parser.cpp index c62b8146ce6..e749028e19d 100644 --- a/cpp/demo/book/lifecycle/Parser.cpp +++ b/cpp/demo/book/lifecycle/Parser.cpp @@ -33,14 +33,14 @@ Parser::usage() cout << "help Print this message.\n" "pwd Print current directory (/ = root).\n" - "cd DIR Change directory (/ = root, .. = parent).\n" + "cd [DIR] Change directory (/ or empty = root).\n" "ls List current directory.\n" "lr Recursively list current directory.\n" "mkdir DIR [DIR...] Create directories DIR in current directory.\n" "mkfile FILE [FILE...] Create files FILE in current directory.\n" "rm NAME [NAME...] Delete directory or file NAME (rm * to delete all).\n" "cat FILE List the contents of FILE.\n" - "write FILE [STRINGS] Write STRINGS into FILE.\n" + "write FILE [STRING...] Write STRING to FILE.\n" "exit, quit Exit this program.\n"; } @@ -52,7 +52,7 @@ Parser::usage() void Parser::list(bool recursive) { - return list(_dirs.front(), recursive, 0); + list(_dirs.front(), recursive, 0); } void @@ -64,16 +64,12 @@ Parser::list(const DirectoryPrx& dir, bool recursive, int depth) for(NodeDescSeq::const_iterator i = contents.begin(); i != contents.end(); ++i) { - DirectoryPrx dir = DirectoryPrx::checkedCast(i->proxy); - FilePrx file = FilePrx::uncheckedCast(i->proxy); - cout << indent << i->name << (dir ? " (directory)" : " (file)"); - if(dir && recursive) + DirectoryPrx d = i->type == DirType ? DirectoryPrx::uncheckedCast(i->proxy) : 0; + cout << indent << i->name << (d ? " (directory)" : " (file)"); + if(d && recursive) { - if(recursive) - { - cout << ":" << endl; - list(dir, true, depth); - } + cout << ":" << endl; + list(d, true, depth); } else { @@ -115,7 +111,7 @@ Parser::createDir(const std::list<string>& names) { if(*i == "..") { - cout << "Cannot create a file named `.'" << endl; + cout << "Cannot create a directory named `.'" << endl; continue; } @@ -221,10 +217,11 @@ Parser::cat(const string& name) } void -Parser::write(const std::list<string>& args) +Parser::write(std::list<string>& args) { DirectoryPrx dir = _dirs.front(); string name = args.front(); + args.pop_front(); NodeDesc d; try { @@ -243,8 +240,7 @@ Parser::write(const std::list<string>& args) FilePrx f = FilePrx::uncheckedCast(d.proxy); Lines l; - std::list<string>::const_iterator i = args.begin(); - while(++i != args.end()) + for(std::list<string>::const_iterator i = args.begin(); i != args.end(); ++i) { l.push_back(*i); } diff --git a/cpp/demo/book/lifecycle/Parser.h b/cpp/demo/book/lifecycle/Parser.h index 06891cd812b..8c0747d6b41 100644 --- a/cpp/demo/book/lifecycle/Parser.h +++ b/cpp/demo/book/lifecycle/Parser.h @@ -66,7 +66,7 @@ public: void pwd(); void cd(const ::std::string&); void cat(const ::std::string&); - void write(const ::std::list< ::std::string>&); + void write(::std::list< ::std::string>&); void destroy(const ::std::list< ::std::string>&); void getInput(char*, int&, int); diff --git a/cpp/demo/book/lifecycle/Server.cpp b/cpp/demo/book/lifecycle/Server.cpp index ec9131ff17c..1a6aa475723 100644 --- a/cpp/demo/book/lifecycle/Server.cpp +++ b/cpp/demo/book/lifecycle/Server.cpp @@ -16,7 +16,7 @@ using namespace FilesystemI; class FilesystemApp : virtual public Ice::Application { public: - virtual int run(int, char * []) { + virtual int run(int, char* []) { // Terminate cleanly on receipt of a signal // shutdownOnInterrupt(); @@ -35,12 +35,12 @@ public: // adapter->activate(); - // Wait until we are done + // Wait until we are done. // communicator()->waitForShutdown(); - if (interrupted()) { - cerr << appName() - << ": received signal, shutting down" << endl; + if(interrupted()) + { + cerr << appName() << ": received signal, shutting down" << endl; } return 0; |