@@ -398,5 +398,52 @@ void event_loop::call_exception_handler(object context)
398398 }
399399}
400400
401+ void set_default_event_loop (const boost::asio::io_context::strand& strand)
402+ {
403+ class_<event_loop, boost::noncopyable>(" BoostAsioEventLoop" , init<boost::asio::io_context::strand&>())
404+ .def (" call_soon" , &event_loop::call_soon)
405+ .def (" call_soon_thread_safe" , &event_loop::call_soon_thread_safe)
406+ .def (" call_later" , &event_loop::call_later)
407+ .def (" call_at" , &event_loop::call_at)
408+ .def (" time" , &event_loop::time)
409+ .def (" add_reader" , &event_loop::add_reader)
410+ .def (" remove_reader" , &event_loop::remove_reader)
411+ .def (" add_writer" , &event_loop::add_writer)
412+ .def (" remove_writer" , &event_loop::remove_writer)
413+ .def (" sock_recv" , &event_loop::sock_recv)
414+ .def (" sock_recv_into" , &event_loop::sock_recv_into)
415+ .def (" sock_sendall" , &event_loop::sock_sendall)
416+ .def (" sock_connect" , &event_loop::sock_connect)
417+ .def (" sock_accept" , &event_loop::sock_accept)
418+ .def (" sock_sendfile" , &event_loop::sock_sendfile)
419+ .def (" start_tls" , &event_loop::start_tls)
420+ .def (" getaddrinfo" , &event_loop::getaddrinfo)
421+ .def (" getnameinfo" , &event_loop::getnameinfo)
422+ .def (" set_exception_handler" , &event_loop::set_exception_handler)
423+ .def (" get_exception_handler" , &event_loop::get_exception_handler)
424+ .def (" default_exception_handler" , &event_loop::default_exception_handler)
425+ .def (" call_exception_handler" , &event_loop::call_exception_handler);
426+
427+ object asyncio = import (" asyncio" );
428+ object abstract_policy = asyncio.attr (" AbstractEventLoopPolicy" );
429+
430+ dict method_dict;
431+ std::shared_ptr<event_loop> p_loop = std::make_shared<event_loop>(strand);
432+
433+ method_dict[" get_event_loop" ] = make_function (
434+ [p_loop] (object e) {return object (boost::ref (*p_loop));},
435+ default_call_policies (),
436+ boost::mpl::vector<object, object>()
437+ );
438+
439+ object class_boost_policy = call<object>(
440+ (PyObject*)&PyType_Type,
441+ str (" BoostEventLoopPolicy" ),
442+ boost::python::make_tuple (abstract_policy),
443+ method_dict);
444+
445+ object boost_policy_instance = class_boost_policy.attr (" __call__" )();
446+ asyncio.attr (" set_event_loop_policy" )(boost_policy_instance);
447+ }
401448
402449}}} // namespace boost::python
0 commit comments