1 #ifndef DBUS_FILTER_HPP 2 #define DBUS_FILTER_HPP 3 4 #include <dbus/detail/queue.hpp> 5 #include <boost/asio.hpp> 6 7 namespace dbus { 8 9 class connection; 10 11 /// Represents a filter of incoming messages. 12 /** 13 * Filters examine incoming messages, demuxing them to multiple queues. 14 */ 15 class filter 16 { 17 connection& connection_; 18 function<bool(message)> predicate_; 19 detail::queue<message> queue_; 20 21 template<typename MessagePredicate> 22 filter(connection& c, 23 BOOST_ASIO_MOVE_ARG(MessagePredicate) p) 24 : connection_(c), 25 predicate_(BOOST_ASIO_MOVE_CAST(MessagePredicate)(p)) 26 { 27 // dbus_connection_add_filter 28 } 29 30 filter() {} 31 32 public: 33 friend class connection; 34 35 ~filter() 36 { 37 // dbus_connection_remove_filter 38 } 39 40 template<typename MessageHandler> 41 inline BOOST_ASIO_INITFN_RESULT_TYPE(MessageHandler, 42 void(boost::system::error_code, message)) 43 async_dispatch( 44 BOOST_ASIO_MOVE_ARG(MessageHandler) handler) 45 { 46 return queue_.async_pop( 47 BOOST_ASIO_MOVE_CAST(MessageHandler)(handler)); 48 } 49 50 }; 51 52 } // namespace dbus 53 54 55 #endif // DBUS_FILTER_HPP 56