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