@@ -398,5 +398,52 @@ 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
+ 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
+ }
401
448
402
449
}}} // namespace boost::python
0 commit comments