ifndef FD_CONSUMER_TASK_HPP define FD_CONSUMER_TASK_HPP

include “fd/ConsumerBase.hpp”

namespace RTT {

class FileDescriptorActivity;

}

namespace fd {

class Consumer : public ConsumerBase
{
    friend class ConsumerBase;
protected:
    int m_fd;

public:
    Consumer(std::string const& name = "fd::Consumer");
    ~Consumer();

    RTT::FileDescriptorActivity* getFileDescriptorActivity();

        This hook is called by Orocos when the state machine transitions
       from PreOperational to Stopped. If it returns false, then the
       component will stay in PreOperational. Otherwise, it goes into
       Stopped.

       It is meaningful only if the #needs_configuration has been specified
       in the task context definition with (for example):

         task_context "TaskName" do
           needs_configuration
           ...
         end

    bool configureHook();

    /** This hook is called by Orocos when the state machine transitions
       from Stopped to Running. If it returns false, then the component will
       stay in Stopped. Otherwise, it goes into Running and updateHook()
       will be called.
      /
    // bool startHook();

    /** This hook is called by Orocos when the component is in the Running
       state, at each activity step. Here, the activity gives the "ticks"
       when the hook should be called. See README.txt for different
       triggering options.

       The warning(), error() and fatal() calls, when called in this hook,
       allow to get into the associated RunTimeWarning, RunTimeError and
       FatalError states. 

       In the first case, updateHook() is still called, and recovered()
       allows you to go back into the Running state.  In the second case,
       the errorHook() will be called instead of updateHook() and in the
       third case the component is stopped and resetError() needs to be
       called before starting it again.

      /
    void updateHook();

    /** This hook is called by Orocos when the component is in the
       RunTimeError state, at each activity step. See the discussion in
       updateHook() about triggering options.

       Call recovered() to go back in the Runtime state.
      /
    // void errorHook();

    /** This hook is called by Orocos when the state machine transitions
       from Running to Stopped after stop() has been called.
      /
    // void stopHook();

    /** This hook is called by Orocos when the state machine transitions
       from Stopped to PreOperational, requiring the call to configureHook()
       before calling start() again.
      /
    // void cleanupHook();

    /** This method is called after the configuration step by the
       FileDescriptorActivity to get the file descriptor
      /
    int getFileDescriptor() const;

};

}

endif