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