Greetings, > Replacing CON_ states with functions: > On a recent project in which I built a very bare-bones > MUD (about 2500 lines), instead of using CON_ states > I gave descriptors a pointer to a parser function which > is passed their input once they issue a command. I found > this to be much cleaner than the nanny() function. [snip] > Blaize Personally I went on about the about same idea for a threaded c++ mud I've been toying with for the past month or so, however, since you were used the infamous c++ word in your example (not that your sample doesn't look like c code an awful lot - I really hate and shun define stuff in c++ programs), the following might be a good idea: 1) Create your connection handler as a pure-virtual base class (for instance a class Handler that contains the functions parse and getName, or whatever your needs might be). 2) Use a handler stack to manage your handler objects. Let's assume a person is connecting, we push the ConnectionHandler (derivative of Handler) onto the stack which is used in the command-parse loop. 3) Now the matter of whether to keep adding handlers to the stack as the character progress through the connection phase is present. Personally I choose to remove the handler on the stack and add the new handler, since this preserves memory. Now, as you mention, the main benefit with this is handling editing strings, as well as particularly the OLC, which is a lot cleaner than the equivalent c versions in the circle code. However, circle isn't in c++ for the time being, and there are a few discrepancies in the circle code that should make any standards-conforming c++ compiler fail on compiling the files as c++ files. :o) Anyway, that aside, I much prefer my stack handler to the CON_ stuff. Look, for an example at adding a handler: ACMD(do_editinstantiation) { ch->desc->pushHandler(new RoomEditor(vnum)); } and equiv. code called in the routine normally managing all the CON_ stuff: d->runHandler(argument); (d being the descriptor). This, obviously, gives the benefit that you would never have to touch nanny or like functions handling states. (Just call the pop-routine in your destructor of your handler) :o) Another benefit is that you don't have to abide with all string-editing having to be of type char**, but could for instance be std::string& (gotta love not having to manage all the memory for editing strings). -- Yours truly, Henrik Stuart (http://www.unprompted.com/hstuart/) -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | | Newbie List: http://groups.yahoo.com/group/circle-newbies/ | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT