Added missing newline chars to logging commands
[platform/core/uifw/dali-adaptor.git] / adaptors / common / file-descriptor-monitor.h
index 1f6563c..508f37f 100644 (file)
@@ -19,7 +19,7 @@
  */
 
 // EXTERNAL INCLUDES
-#include <boost/function.hpp>
+#include <dali/public-api/signals/callback.h>
 
 namespace Dali
 {
@@ -36,19 +36,58 @@ namespace Adaptor
 {
 
 /**
- * Monitors the given file descriptor and whenever anything is written to it, it calls
- * the given boost function.
+ * @brief Monitors the given file descriptor and whenever anything is written to it, the provided
+ * callback is called
  */
 class FileDescriptorMonitor
 {
 public:
 
   /**
-   * Constructor
-   * @param[in]  fileDescriptor  The file descriptor to monitor
-   * @param[in]  functor         The function to call when anything is written to the file descriptor
+   * @brief Bitmask of file descriptor event types
    */
-  FileDescriptorMonitor(int fileDescriptor, boost::function<void()> functor);
+  enum EventType
+  {
+    FD_NO_EVENT = 0x0,
+    FD_READABLE = 0x1, // For example when monitoring a socket, data is available to read from the socket receive buffer
+    FD_WRITABLE = 0x2, // For example when monitoring a socket space is available in socket send buffer
+    FD_ERROR    = 0x4,
+  };
+
+  /**
+   * @brief Constructor.
+   *
+   * The callback will be passed a EventType bitmask to signal what type of events occured on the file
+   * descriptor.
+   * Example:
+   *
+   * MyClass::MyClass()
+   * {
+   *    mFileDescriptorMonitor = new FileDescriptorMonitor( myFd, MakeCallback( this, &MyClass::FdCallback ), FileDescriptorMonitor::FD_READABLE );
+   * }
+   *
+   * void MyClass::FdCallback( EventType event )
+   * {
+   *    if( event & FileDescriptorMonitor::FD_ERROR)
+   *    {
+   *      LOG_ERROR("...)
+   *    }
+   *    if( event & FileDescriptorMonitor::FD_READABLE )
+   *    {
+   *      // read from FD
+   *    }
+   *
+   * }
+   *
+   * @param[in] fileDescriptor  The file descriptor to monitor
+   * @param[in] callback Called when anything is written to the file descriptor
+   * @param[in] eventBitmask Bitmask of what to monitor on the file descriptor ( readable / writable ).
+   * @note The ownership of callback is taken by this class.
+   * @note Under Linux it is possible the file descriptor monitor will signal a fd is
+   * readable or writable even when it isn’t. The developer should check for handle EAGAIN or equivalent
+   * when reading from or write to the fd.
+   */
+  FileDescriptorMonitor( int fileDescriptor, CallbackBase* callback, int eventBitmask );
 
   /**
    * Destructor
@@ -56,6 +95,14 @@ public:
   ~FileDescriptorMonitor();
 
 private:
+
+  // Undefined
+  FileDescriptorMonitor( const FileDescriptorMonitor& fileDescriptorMonitor );
+
+  // Undefined
+  FileDescriptorMonitor& operator=( const FileDescriptorMonitor& fileDescriptorMonitor );
+
+private:
   struct Impl;
   Impl* mImpl;
 };