/* -*- C++ -*- */ //============================================================================= /** * @file Command_Processor.h * * @author Douglas C. Schmidt */ //============================================================================= #ifndef _COMMAND_PROCESSOR_H #define _COMMAND_PROCESSOR_H #if !defined (ACE_LACKS_PRAGMA_ONCE) #pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ #include "ace/Containers.h" #include "Options.h" // Forward decl. class URL; /** * @class Command * * @brief Abstract base class for a command. * * Each command is executed by a . */ class Command { public: /// Virtual destructor. virtual ~Command (void); /// This is the entry point to execute the command. virtual int execute (void) = 0; virtual int destroy (void) = 0; }; /** * @class URL_Command * * @brief Defines an API for executing a command on a URL. * * Each command is executed by a . */ class URL_Command : public Command { public: /// Constructor. URL_Command (URL *); /// Execute the URL command. virtual int execute (void); /// Commit suicide. int destroy (void); private: /// Pointer to the URL. URL *url_; }; /** * @class Command_Processor * * @brief Execute commands that are passed to it. * * This class implements the Command Processor pattern. */ class Command_Processor { public: Command_Processor (void); /// Insert a new into the 's queue. int insert (Command *); /// Execute all the in the queue. int execute (void); /// Destroy the . int destroy (void); protected: /// Ensure dynamic allocation. ~Command_Processor (void); private: // @@ You fill in here... ACE_Unbounded_Queue url_queue_; }; #endif /* _COMMAND_PROCESSOR_H */