asyncengine 0.0.1.testing → 0.0.1.testing1
Sign up to get free protection for your applications and to get access to all the features.
- data/asyncengine.gemspec +3 -3
- data/ext/asyncengine/ae_handle_common.c +100 -0
- data/ext/asyncengine/ae_handle_common.h +20 -0
- data/ext/asyncengine/ae_next_tick.c +51 -0
- data/ext/asyncengine/ae_next_tick.h +10 -0
- data/ext/asyncengine/ae_timer.c +152 -0
- data/ext/asyncengine/ae_timer.h +12 -0
- data/ext/asyncengine/ae_udp.c +24 -0
- data/ext/asyncengine/ae_udp.h +10 -0
- data/ext/asyncengine/asyncengine_ruby.c +72 -0
- data/ext/asyncengine/asyncengine_ruby.h +22 -0
- data/ext/{asyncengine_ext → asyncengine}/extconf.rb +7 -7
- data/ext/{asyncengine_ext → asyncengine}/libuv/AUTHORS +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/LICENSE +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/Makefile +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/README.md +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/build/gcc_version.py +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/common.gypi +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/config-mingw.mk +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/config-unix.mk +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/gyp_uv +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/include/ares.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/include/ares_version.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/include/uv-private/eio.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/include/uv-private/ev.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/include/uv-private/ngx-queue.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/include/uv-private/tree.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/include/uv-private/uv-unix.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/include/uv-private/uv-win.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/include/uv.h +0 -0
- data/ext/asyncengine/libuv/mkmf.log +24 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/AUTHORS +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/CHANGES +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/CMakeLists.txt +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/NEWS +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/README +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/README.cares +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/README.msvc +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/README.node +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/RELEASE-NOTES +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/TODO +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares__close_sockets.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares__close_sockets.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares__get_hostent.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares__get_hostent.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares__read_line.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares__read_line.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares__timeval.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares__timeval.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_cancel.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_cancel.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_data.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_data.h +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_data.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_destroy.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_destroy.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_dns.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_expand_name.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_expand_name.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_expand_string.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_expand_string.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_fds.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_fds.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_free_hostent.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_free_hostent.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_free_string.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_free_string.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_getenv.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_getenv.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_gethostbyaddr.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_gethostbyaddr.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_gethostbyname.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_gethostbyname.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_getnameinfo.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_getnameinfo.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_getopt.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_getopt.h +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_getopt.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_getsock.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_getsock.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_init.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_init.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_iphlpapi.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_ipv6.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_library_init.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_library_init.h +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_library_init.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_llist.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_llist.h +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_llist.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_mkquery.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_mkquery.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_nowarn.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_nowarn.h +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_nowarn.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_options.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_options.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_parse_a_reply.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_a_reply.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_parse_aaaa_reply.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_aaaa_reply.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_parse_mx_reply.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_mx_reply.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_parse_ns_reply.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_ns_reply.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_parse_ptr_reply.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_ptr_reply.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_parse_srv_reply.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_srv_reply.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_parse_txt_reply.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_txt_reply.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_platform.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_platform.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_private.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_process.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_process.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_query.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_query.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_rules.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_search.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_search.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_send.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_send.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_setup.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_strcasecmp.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_strcasecmp.h +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_strcasecmp.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_strdup.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_strdup.h +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_strdup.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_strerror.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_strerror.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_timeout.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_timeout.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_version.c +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_version.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_writev.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/ares_writev.h +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_writev.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/bitncmp.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/bitncmp.h +0 -0
- data/ext/asyncengine/libuv/src/ares/bitncmp.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/config_cygwin/ares_config.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/config_darwin/ares_config.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/config_freebsd/ares_config.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/config_linux/ares_config.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/config_netbsd/ares_config.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/config_openbsd/ares_config.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/config_sunos/ares_config.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/config_win32/ares_config.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/get_ver.awk +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/inet_net_pton.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/inet_net_pton.h +0 -0
- data/ext/asyncengine/libuv/src/ares/inet_net_pton.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/inet_ntop.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/inet_ntop.h +0 -0
- data/ext/asyncengine/libuv/src/ares/inet_ntop.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/nameser.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/setup_once.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/ares/windows_port.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/async.c +0 -0
- data/ext/asyncengine/libuv/src/unix/async.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/cares.c +0 -0
- data/ext/asyncengine/libuv/src/unix/cares.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/check.c +0 -0
- data/ext/asyncengine/libuv/src/unix/check.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/core.c +0 -0
- data/ext/asyncengine/libuv/src/unix/core.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/cygwin.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/darwin.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/dl.c +0 -0
- data/ext/asyncengine/libuv/src/unix/dl.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/Changes +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/LICENSE +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/Makefile.am +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/aclocal.m4 +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/autogen.sh +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/config.h.in +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/config_cygwin.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/config_darwin.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/config_freebsd.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/config_linux.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/config_netbsd.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/config_openbsd.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/config_sunos.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/configure.ac +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/demo.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/ecb.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/eio.3 +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/eio.c +0 -0
- data/ext/asyncengine/libuv/src/unix/eio/eio.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/eio.pod +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/libeio.m4 +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/eio/xthread.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/error.c +0 -0
- data/ext/asyncengine/libuv/src/unix/error.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/Changes +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/LICENSE +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/Makefile.am +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/Makefile.in +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/README +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/aclocal.m4 +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/autogen.sh +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/config.guess +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/config.h.in +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/config.sub +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/config_cygwin.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/config_darwin.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/config_freebsd.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/config_linux.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/config_netbsd.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/config_openbsd.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/config_sunos.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/configure +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/configure.ac +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/depcomp +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ev++.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ev.3 +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ev.c +0 -0
- data/ext/asyncengine/libuv/src/unix/ev/ev.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ev.pod +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ev_epoll.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ev_kqueue.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ev_poll.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ev_port.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ev_select.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ev_vars.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ev_win32.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ev_wrap.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/event.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/event.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/install-sh +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/libev.m4 +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/ltmain.sh +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/missing +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/ev/mkinstalldirs +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/freebsd.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/fs.c +0 -0
- data/ext/asyncengine/libuv/src/unix/fs.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/idle.c +0 -0
- data/ext/asyncengine/libuv/src/unix/idle.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/internal.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/kqueue.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/linux/core.c +0 -0
- data/ext/asyncengine/libuv/src/unix/linux/core.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/linux/inotify.c +0 -0
- data/ext/asyncengine/libuv/src/unix/linux/inotify.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/linux/syscalls.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/linux/syscalls.h +0 -0
- data/ext/asyncengine/libuv/src/unix/linux/syscalls.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/loop.c +0 -0
- data/ext/asyncengine/libuv/src/unix/loop.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/netbsd.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/openbsd.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/pipe.c +0 -0
- data/ext/asyncengine/libuv/src/unix/pipe.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/prepare.c +0 -0
- data/ext/asyncengine/libuv/src/unix/prepare.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/process.c +0 -0
- data/ext/asyncengine/libuv/src/unix/process.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/stream.c +0 -0
- data/ext/asyncengine/libuv/src/unix/stream.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/sunos.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/tcp.c +0 -0
- data/ext/asyncengine/libuv/src/unix/tcp.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/thread.c +0 -0
- data/ext/asyncengine/libuv/src/unix/thread.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/timer.c +0 -0
- data/ext/asyncengine/libuv/src/unix/timer.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/tty.c +0 -0
- data/ext/asyncengine/libuv/src/unix/tty.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/udp.c +0 -0
- data/ext/asyncengine/libuv/src/unix/udp.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/uv-eio.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/unix/uv-eio.h +0 -0
- data/ext/asyncengine/libuv/src/unix/uv-eio.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/uv-common.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/uv-common.h +0 -0
- data/ext/asyncengine/libuv/src/uv-common.o +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/async.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/cares.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/core.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/dl.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/error.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/fs-event.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/fs.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/getaddrinfo.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/handle.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/internal.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/loop-watcher.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/pipe.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/process.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/req.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/stream.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/tcp.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/thread.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/threadpool.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/timer.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/tty.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/udp.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/util.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/winapi.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/winapi.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/winsock.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/src/win/winsock.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/benchmark-ares.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/benchmark-getaddrinfo.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/benchmark-list.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/benchmark-ping-pongs.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/benchmark-pound.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/benchmark-pump.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/benchmark-sizes.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/benchmark-spawn.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/benchmark-tcp-write-batch.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/benchmark-thread.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/benchmark-udp-packet-storm.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/blackhole-server.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/dns-server.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/echo-server.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/fixtures/empty_file +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/fixtures/load_error.node +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/run-benchmarks.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/run-tests.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/runner-unix.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/runner-unix.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/runner-win.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/runner-win.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/runner.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/runner.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/task.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-async.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-callback-stack.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-connection-fail.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-counters-init.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-cwd-and-chdir.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-delayed-accept.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-dlerror.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-eio-overflow.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-error.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-fail-always.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-fs-event.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-fs.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-get-currentexe.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-get-loadavg.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-get-memory.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-getaddrinfo.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-gethostbyname.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-getsockname.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-hrtime.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-idle.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-ipc-send-recv.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-ipc.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-list.h +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-loop-handles.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-multiple-listen.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-mutexes.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-pass-always.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-ping-pong.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-pipe-bind-error.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-pipe-connect-error.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-platform-output.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-process-title.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-ref.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-run-once.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-shutdown-close.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-shutdown-eof.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-spawn.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-stdio-over-pipes.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-tcp-bind-error.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-tcp-bind6-error.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-tcp-close.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-tcp-connect-error.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-tcp-connect6-error.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-tcp-flags.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-tcp-write-error.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-tcp-write-to-half-open-connection.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-tcp-writealot.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-thread.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-threadpool.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-timer-again.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-timer.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-tty.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-udp-dgram-too-big.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-udp-ipv6.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-udp-multicast-join.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-udp-multicast-ttl.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-udp-options.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-udp-send-and-recv.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/test/test-util.c +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/uv.gyp +0 -0
- data/ext/{asyncengine_ext → asyncengine}/libuv/vcbuild.bat +0 -0
- data/lib/asyncengine/asyncengine_ext.so +0 -0
- data/lib/asyncengine/errors.rb +5 -0
- data/lib/asyncengine/next_tick.rb +24 -0
- data/lib/asyncengine/timer.rb +46 -0
- data/lib/asyncengine/udp.rb +5 -0
- data/lib/asyncengine/version.rb +1 -1
- data/lib/asyncengine.rb +50 -26
- metadata +399 -316
- data/ext/asyncengine_ext/asyncengine_ruby.c +0 -82
data/asyncengine.gemspec
CHANGED
@@ -11,15 +11,15 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.summary = "Ruby asynchronous event driven library based on libuv"
|
12
12
|
spec.homepage = "https://github.com/ibc/AsyncEngine"
|
13
13
|
spec.description = "Ruby asynchronous event driven library based on libuv"
|
14
|
-
spec.extensions = ["ext/
|
14
|
+
spec.extensions = ["ext/asyncengine/extconf.rb"]
|
15
15
|
spec.required_ruby_version = ">= 1.9.2"
|
16
16
|
|
17
17
|
files = %w{
|
18
18
|
asyncengine.gemspec
|
19
19
|
README.markdown
|
20
20
|
lib/**/**
|
21
|
-
ext/
|
22
|
-
ext/
|
21
|
+
ext/asyncengine/{*.c,*.h,*.rb}
|
22
|
+
ext/asyncengine/libuv/**/**/**/**/**/**/**/**/**
|
23
23
|
}.join(",")
|
24
24
|
spec.files = Dir.glob "{#{files}}"
|
25
25
|
spec.require_paths = ["lib"]
|
@@ -0,0 +1,100 @@
|
|
1
|
+
#include "asyncengine_ruby.h"
|
2
|
+
#include "ae_handle_common.h"
|
3
|
+
|
4
|
+
|
5
|
+
// Global variables defined in asyncengine_ruby.c.
|
6
|
+
extern VALUE mAsyncEngine;
|
7
|
+
|
8
|
+
// C variable holding current block number.
|
9
|
+
static long block_id = 0;
|
10
|
+
|
11
|
+
// Ruby class for saving C data inside.
|
12
|
+
VALUE cAsyncEngineCData;
|
13
|
+
|
14
|
+
// Ruby attributes.
|
15
|
+
static ID att_blocks;
|
16
|
+
ID att_cdata;
|
17
|
+
ID att_handle_terminated;
|
18
|
+
|
19
|
+
// Ruby method names.
|
20
|
+
ID id_method_call;
|
21
|
+
ID id_manage_exception;
|
22
|
+
|
23
|
+
|
24
|
+
void init_ae_handle_common()
|
25
|
+
{
|
26
|
+
cAsyncEngineCData = rb_define_class_under(mAsyncEngine, "CData", rb_cObject);
|
27
|
+
|
28
|
+
att_blocks = rb_intern("@_blocks");
|
29
|
+
att_cdata = rb_intern("@_cdata");
|
30
|
+
att_handle_terminated = rb_intern("@_handle_terminated");
|
31
|
+
|
32
|
+
id_method_call = rb_intern("call");
|
33
|
+
id_manage_exception = rb_intern("manage_exception");
|
34
|
+
}
|
35
|
+
|
36
|
+
|
37
|
+
VALUE ae_store_block(VALUE block)
|
38
|
+
{
|
39
|
+
AE_TRACE();
|
40
|
+
VALUE rb_block_id = LONG2FIX(++block_id);
|
41
|
+
|
42
|
+
rb_hash_aset(rb_ivar_get(mAsyncEngine, att_blocks), rb_block_id, block);
|
43
|
+
return rb_block_id;
|
44
|
+
}
|
45
|
+
|
46
|
+
|
47
|
+
VALUE ae_get_block(VALUE rb_block_id)
|
48
|
+
{
|
49
|
+
AE_TRACE();
|
50
|
+
return rb_hash_aref(rb_ivar_get(mAsyncEngine, att_blocks), rb_block_id);
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
VALUE ae_remove_block(VALUE rb_block_id)
|
55
|
+
{
|
56
|
+
AE_TRACE();
|
57
|
+
return rb_hash_delete(rb_ivar_get(mAsyncEngine, att_blocks), rb_block_id);
|
58
|
+
}
|
59
|
+
|
60
|
+
|
61
|
+
void ae_manage_exception(int exception_tag)
|
62
|
+
{
|
63
|
+
AE_TRACE();
|
64
|
+
|
65
|
+
// rb_errinfo() gives the current exception object in this thread.
|
66
|
+
VALUE exception = rb_errinfo();
|
67
|
+
|
68
|
+
// Just check the exception in the user provided AE.exception_manager block if
|
69
|
+
// it is a StandardError. Otherwise raise it and terminate.
|
70
|
+
if (rb_obj_is_kind_of(exception, rb_eStandardError) == Qtrue) {
|
71
|
+
rb_funcall(mAsyncEngine, id_manage_exception, 1, exception);
|
72
|
+
// Dissable the current thread exception.
|
73
|
+
rb_set_errinfo(Qnil);
|
74
|
+
}
|
75
|
+
else
|
76
|
+
rb_jump_tag(exception_tag);
|
77
|
+
}
|
78
|
+
|
79
|
+
|
80
|
+
void ae_handle_close_callback_0(uv_handle_t* handle)
|
81
|
+
{
|
82
|
+
AE_TRACE();
|
83
|
+
xfree(handle);
|
84
|
+
}
|
85
|
+
|
86
|
+
|
87
|
+
static VALUE wrapper_rb_funcall_0(VALUE block)
|
88
|
+
{
|
89
|
+
rb_funcall(block, id_method_call, 0, 0);
|
90
|
+
return Qnil;
|
91
|
+
}
|
92
|
+
|
93
|
+
|
94
|
+
int ae_protect_block_call_0(VALUE block)
|
95
|
+
{
|
96
|
+
int exception = 0;
|
97
|
+
|
98
|
+
rb_protect(wrapper_rb_funcall_0, block, &exception);
|
99
|
+
return exception;
|
100
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#ifndef AE_HANDLE_COMMON_H
|
2
|
+
#define AE_HANDLE_COMMON_H
|
3
|
+
|
4
|
+
|
5
|
+
VALUE cAsyncEngineCData;
|
6
|
+
ID att_cdata;
|
7
|
+
ID att_handle_terminated;
|
8
|
+
ID id_method_call;
|
9
|
+
|
10
|
+
void init_ae_handle_common();
|
11
|
+
|
12
|
+
VALUE ae_store_block(VALUE);
|
13
|
+
VALUE ae_get_block(VALUE);
|
14
|
+
VALUE ae_remove_block(VALUE);
|
15
|
+
void ae_manage_exception(int);
|
16
|
+
void ae_handle_close_callback_0(uv_handle_t*);
|
17
|
+
int ae_protect_block_call_0(VALUE);
|
18
|
+
|
19
|
+
|
20
|
+
#endif /* AE_HANDLE_COMMON_H */
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#include "asyncengine_ruby.h"
|
2
|
+
#include "ae_handle_common.h"
|
3
|
+
#include "ae_next_tick.h"
|
4
|
+
|
5
|
+
|
6
|
+
// C variable indicating whether there are pending next_ticks.
|
7
|
+
static int pending_next_ticks;
|
8
|
+
|
9
|
+
static ID id_method_execute_next_ticks;
|
10
|
+
|
11
|
+
|
12
|
+
void init_ae_next_tick()
|
13
|
+
{
|
14
|
+
pending_next_ticks = 0;
|
15
|
+
|
16
|
+
rb_define_module_function(mAsyncEngine, "_c_next_tick", AsyncEngine_c_next_tick, 0);
|
17
|
+
|
18
|
+
id_method_execute_next_ticks = rb_intern("execute_next_ticks");
|
19
|
+
}
|
20
|
+
|
21
|
+
|
22
|
+
static
|
23
|
+
void execute_next_tick_with_gvl()
|
24
|
+
{
|
25
|
+
AE_TRACE();
|
26
|
+
rb_funcall(mAsyncEngine, id_method_execute_next_ticks, 0, 0);
|
27
|
+
}
|
28
|
+
|
29
|
+
|
30
|
+
static
|
31
|
+
void next_tick_callback(uv_idle_t* handle, int status)
|
32
|
+
{
|
33
|
+
AE_TRACE();
|
34
|
+
uv_idle_stop(handle);
|
35
|
+
uv_close((uv_handle_t *)handle, ae_handle_close_callback_0);
|
36
|
+
pending_next_ticks = 0;
|
37
|
+
rb_thread_call_with_gvl(execute_next_tick_with_gvl, NULL);
|
38
|
+
}
|
39
|
+
|
40
|
+
|
41
|
+
VALUE AsyncEngine_c_next_tick(VALUE self)
|
42
|
+
{
|
43
|
+
AE_TRACE();
|
44
|
+
if (pending_next_ticks == 0) {
|
45
|
+
uv_idle_t* _uv_handle = ALLOC(uv_idle_t);
|
46
|
+
uv_idle_init(uv_default_loop(), _uv_handle);
|
47
|
+
pending_next_ticks = 1;
|
48
|
+
uv_idle_start(_uv_handle, next_tick_callback);
|
49
|
+
}
|
50
|
+
return Qtrue;
|
51
|
+
}
|
@@ -0,0 +1,152 @@
|
|
1
|
+
#include "asyncengine_ruby.h"
|
2
|
+
#include "ae_handle_common.h"
|
3
|
+
#include "ae_timer.h"
|
4
|
+
|
5
|
+
|
6
|
+
static VALUE cAsyncEngineTimer;
|
7
|
+
|
8
|
+
|
9
|
+
typedef struct {
|
10
|
+
uv_timer_t *_uv_handle;
|
11
|
+
int periodic;
|
12
|
+
VALUE rb_block_id;
|
13
|
+
int has_rb_instance;
|
14
|
+
VALUE rb_instance; // Points to the owner AE::Timer (if there is).
|
15
|
+
} struct_ae_timer_cdata;
|
16
|
+
|
17
|
+
|
18
|
+
void init_ae_timer()
|
19
|
+
{
|
20
|
+
cAsyncEngineTimer = rb_define_class_under(mAsyncEngine, "Timer", rb_cObject);
|
21
|
+
rb_define_module_function(mAsyncEngine, "_c_add_timer", AsyncEngine_c_add_timer, 4);
|
22
|
+
rb_define_method(cAsyncEngineTimer, "cancel", AsyncEngineTimer_cancel, 0);
|
23
|
+
rb_define_alias(cAsyncEngineTimer, "stop", "cancel");
|
24
|
+
rb_define_private_method(cAsyncEngineTimer, "_c_set_interval", AsyncEngineTimer_c_set_interval, 1);
|
25
|
+
}
|
26
|
+
|
27
|
+
|
28
|
+
static
|
29
|
+
void deallocate(struct_ae_timer_cdata* cdata)
|
30
|
+
{
|
31
|
+
AE_TRACE();
|
32
|
+
|
33
|
+
// Let the GC work.
|
34
|
+
ae_remove_block(cdata->rb_block_id);
|
35
|
+
// Close the timer so it's unreferenced by uv.
|
36
|
+
uv_close((uv_handle_t *)cdata->_uv_handle, ae_handle_close_callback_0);
|
37
|
+
// Free memory.
|
38
|
+
xfree(cdata);
|
39
|
+
}
|
40
|
+
|
41
|
+
|
42
|
+
static
|
43
|
+
void execute_timer_with_gvl(uv_timer_t* handle)
|
44
|
+
{
|
45
|
+
AE_TRACE();
|
46
|
+
|
47
|
+
struct_ae_timer_cdata* cdata = (struct_ae_timer_cdata*)handle->data;
|
48
|
+
VALUE block = ae_get_block(cdata->rb_block_id);
|
49
|
+
int exception_tag;
|
50
|
+
|
51
|
+
exception_tag = ae_protect_block_call_0(block);
|
52
|
+
|
53
|
+
// Terminate the timer if it is not periodic.
|
54
|
+
if (cdata->periodic == 0) {
|
55
|
+
// If the timer has a ruby AE::Timer instance then set its attribute
|
56
|
+
// @_handle_terminated to true.
|
57
|
+
if (cdata->has_rb_instance == 1)
|
58
|
+
rb_ivar_set(cdata->rb_instance, att_handle_terminated, Qtrue);
|
59
|
+
deallocate(cdata);
|
60
|
+
}
|
61
|
+
|
62
|
+
if (exception_tag)
|
63
|
+
ae_manage_exception(exception_tag);
|
64
|
+
}
|
65
|
+
|
66
|
+
|
67
|
+
static
|
68
|
+
void timer_callback(uv_timer_t* handle, int status)
|
69
|
+
{
|
70
|
+
AE_TRACE();
|
71
|
+
rb_thread_call_with_gvl(execute_timer_with_gvl, handle);
|
72
|
+
}
|
73
|
+
|
74
|
+
|
75
|
+
VALUE AsyncEngine_c_add_timer(VALUE self, VALUE rb_delay, VALUE rb_interval, VALUE block, VALUE instance)
|
76
|
+
{
|
77
|
+
AE_TRACE();
|
78
|
+
uv_timer_t* _uv_handle = ALLOC(uv_timer_t);
|
79
|
+
struct_ae_timer_cdata* cdata = ALLOC(struct_ae_timer_cdata);
|
80
|
+
long delay, interval;
|
81
|
+
|
82
|
+
cdata->_uv_handle = _uv_handle;
|
83
|
+
|
84
|
+
delay = NUM2LONG(rb_delay);
|
85
|
+
if (NIL_P(rb_interval)) {
|
86
|
+
interval = 0;
|
87
|
+
cdata->periodic = 0;
|
88
|
+
}
|
89
|
+
else {
|
90
|
+
interval = NUM2LONG(rb_interval);
|
91
|
+
if (interval == 0) interval = 1;
|
92
|
+
cdata->periodic = 1;
|
93
|
+
}
|
94
|
+
|
95
|
+
// Save the block from being GC'd.
|
96
|
+
cdata->rb_block_id = ae_store_block(block);
|
97
|
+
|
98
|
+
if (NIL_P(instance))
|
99
|
+
cdata->has_rb_instance = 0;
|
100
|
+
else {
|
101
|
+
cdata->has_rb_instance = 1;
|
102
|
+
cdata->rb_instance = instance;
|
103
|
+
}
|
104
|
+
|
105
|
+
// Initialize.
|
106
|
+
uv_timer_init(uv_default_loop(), _uv_handle);
|
107
|
+
_uv_handle->data = cdata;
|
108
|
+
|
109
|
+
uv_timer_start(_uv_handle, timer_callback, delay, interval);
|
110
|
+
|
111
|
+
return Data_Wrap_Struct(cAsyncEngineCData, NULL, NULL, cdata);
|
112
|
+
}
|
113
|
+
|
114
|
+
|
115
|
+
VALUE AsyncEngineTimer_cancel(VALUE self)
|
116
|
+
{
|
117
|
+
AE_TRACE();
|
118
|
+
struct_ae_timer_cdata* cdata;
|
119
|
+
|
120
|
+
if (! NIL_P(rb_ivar_get(self, att_handle_terminated)))
|
121
|
+
return Qfalse;
|
122
|
+
rb_ivar_set(self, att_handle_terminated, Qtrue);
|
123
|
+
|
124
|
+
Data_Get_Struct(rb_ivar_get(self, att_cdata), struct_ae_timer_cdata, cdata);
|
125
|
+
|
126
|
+
// Stop timer.
|
127
|
+
uv_timer_stop(cdata->_uv_handle);
|
128
|
+
|
129
|
+
// Terminate the timer.
|
130
|
+
deallocate(cdata);
|
131
|
+
|
132
|
+
return Qtrue;
|
133
|
+
}
|
134
|
+
|
135
|
+
|
136
|
+
VALUE AsyncEngineTimer_c_set_interval(VALUE self, VALUE rb_interval)
|
137
|
+
{
|
138
|
+
AE_TRACE();
|
139
|
+
struct_ae_timer_cdata* cdata;
|
140
|
+
long interval;
|
141
|
+
|
142
|
+
if (! NIL_P(rb_ivar_get(self, att_handle_terminated)))
|
143
|
+
return Qfalse;
|
144
|
+
|
145
|
+
Data_Get_Struct(rb_ivar_get(self, att_cdata), struct_ae_timer_cdata, cdata);
|
146
|
+
|
147
|
+
interval = NUM2LONG(rb_interval);
|
148
|
+
if (interval == 0) interval = 1;
|
149
|
+
|
150
|
+
uv_timer_set_repeat(cdata->_uv_handle, interval);
|
151
|
+
return rb_interval;
|
152
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#ifndef AE_TIMER_H
|
2
|
+
#define AE_TIMER_H
|
3
|
+
|
4
|
+
|
5
|
+
void init_ae_timer();
|
6
|
+
|
7
|
+
VALUE AsyncEngine_c_add_timer(VALUE self, VALUE delay, VALUE interval, VALUE block, VALUE instance);
|
8
|
+
VALUE AsyncEngineTimer_cancel(VALUE self);
|
9
|
+
VALUE AsyncEngineTimer_c_set_interval(VALUE self, VALUE interval);
|
10
|
+
|
11
|
+
|
12
|
+
#endif /* AE_TIMER_H */
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#include "asyncengine_ruby.h"
|
2
|
+
#include "ae_handle_common.h"
|
3
|
+
#include "ae_udp.h"
|
4
|
+
|
5
|
+
|
6
|
+
void init_ae_udp()
|
7
|
+
{
|
8
|
+
rb_define_module_function(mAsyncEngine, "test_ipv4", AsyncEngine_test_ipv4, 2);
|
9
|
+
}
|
10
|
+
|
11
|
+
|
12
|
+
VALUE AsyncEngine_test_ipv4(VALUE self, VALUE rb_ip, VALUE rb_port)
|
13
|
+
{
|
14
|
+
char* ip = StringValueCStr(rb_ip);
|
15
|
+
int port = FIX2INT(rb_port);
|
16
|
+
struct sockaddr_in addr;
|
17
|
+
|
18
|
+
//printf("AsyncEngine_ip4(): ip=%s, port=%d\n", ip, port);
|
19
|
+
/* Convert string ip addresses to binary structures */
|
20
|
+
|
21
|
+
//UV_EXTERN struct sockaddr_in uv_ip4_addr(const char* ip, int port);
|
22
|
+
addr = uv_ip4_addr(ip, port);
|
23
|
+
|
24
|
+
}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
#include "asyncengine_ruby.h"
|
2
|
+
#include "ae_handle_common.h"
|
3
|
+
#include "ae_timer.h"
|
4
|
+
#include "ae_next_tick.h"
|
5
|
+
#include "ae_udp.h"
|
6
|
+
|
7
|
+
|
8
|
+
static
|
9
|
+
void prepare_callback(uv_prepare_t* handle, int status)
|
10
|
+
{
|
11
|
+
AE_TRACE();
|
12
|
+
|
13
|
+
// Check received interruptions in Ruby land.
|
14
|
+
rb_thread_call_with_gvl(rb_thread_check_ints, NULL);
|
15
|
+
|
16
|
+
// If this uv_prepare is the only existing handle, then terminate the loop.
|
17
|
+
if (uv_loop_refcount(uv_default_loop()) == 1)
|
18
|
+
uv_close((uv_handle_t *)handle, ae_handle_close_callback_0);
|
19
|
+
}
|
20
|
+
|
21
|
+
|
22
|
+
static
|
23
|
+
VALUE run_uv_without_gvl(void* param)
|
24
|
+
{
|
25
|
+
AE_TRACE();
|
26
|
+
|
27
|
+
if (! uv_run(uv_default_loop())) {
|
28
|
+
return Qtrue;
|
29
|
+
}
|
30
|
+
else
|
31
|
+
return Qfalse;
|
32
|
+
}
|
33
|
+
|
34
|
+
|
35
|
+
VALUE AsyncEngine_c_run(VALUE self)
|
36
|
+
{
|
37
|
+
AE_TRACE();
|
38
|
+
uv_prepare_t *_uv_prepare = ALLOC(uv_prepare_t);
|
39
|
+
|
40
|
+
uv_prepare_init(uv_default_loop(), _uv_prepare);
|
41
|
+
uv_prepare_start(_uv_prepare, prepare_callback);
|
42
|
+
|
43
|
+
return rb_thread_call_without_gvl(run_uv_without_gvl, NULL, RUBY_UBF_IO, NULL);
|
44
|
+
}
|
45
|
+
|
46
|
+
|
47
|
+
/*
|
48
|
+
* Returns the number of handlers in the loop.
|
49
|
+
* NOTE: The returned number is the real number of handles minus 1 (the prepare handle).
|
50
|
+
*/
|
51
|
+
VALUE AsyncEngine_num_handles(VALUE self)
|
52
|
+
{
|
53
|
+
return INT2FIX(uv_loop_refcount(uv_default_loop()) - 1);
|
54
|
+
}
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
void Init_asyncengine_ext()
|
60
|
+
{
|
61
|
+
AE_TRACE();
|
62
|
+
|
63
|
+
mAsyncEngine = rb_define_module("AsyncEngine");
|
64
|
+
|
65
|
+
rb_define_module_function(mAsyncEngine, "_c_run", AsyncEngine_c_run, 0);
|
66
|
+
rb_define_module_function(mAsyncEngine, "num_handles", AsyncEngine_num_handles, 0);
|
67
|
+
|
68
|
+
init_ae_handle_common();
|
69
|
+
init_ae_timer();
|
70
|
+
init_ae_next_tick();
|
71
|
+
init_ae_udp();
|
72
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#ifndef ASYNCENGINE_RUBY_H
|
2
|
+
#define ASYNCENGINE_RUBY_H
|
3
|
+
|
4
|
+
|
5
|
+
#include <ruby.h>
|
6
|
+
#include <libuv/include/uv.h> // NOTE: Not needed if dir_config() line is enabled in extconf.rb.
|
7
|
+
//#include <uv.h> // so this line becomes enough.
|
8
|
+
|
9
|
+
|
10
|
+
// Uncomment this line for enabling TRACE() function.
|
11
|
+
//#define AE_DEBUG
|
12
|
+
#ifdef AE_DEBUG
|
13
|
+
#define AE_TRACE() fprintf(stderr, "AE_TRACE: %s:%d:%s\n", __FILE__, __LINE__, __FUNCTION__)
|
14
|
+
#else
|
15
|
+
#define AE_TRACE()
|
16
|
+
#endif
|
17
|
+
|
18
|
+
|
19
|
+
VALUE mAsyncEngine;
|
20
|
+
|
21
|
+
|
22
|
+
#endif /* #ifndef ASYNCENGINE_RUBY_H */
|
@@ -4,7 +4,7 @@ require "fileutils"
|
|
4
4
|
|
5
5
|
|
6
6
|
def sys cmd
|
7
|
-
puts "system command: #{cmd}"
|
7
|
+
puts "system command in #{File.expand_path(File.dirname(__FILE__))}: #{cmd}"
|
8
8
|
unless ret = xsystem(cmd)
|
9
9
|
raise "system command `#{cmd}' failed, please report to https://github.com/ibc/AsyncEngine/issues"
|
10
10
|
end
|
@@ -35,13 +35,13 @@ end
|
|
35
35
|
$CFLAGS = RbConfig::CONFIG["CFLAGS"] = " #{cflags} "
|
36
36
|
$LDFLAGS = RbConfig::CONFIG["LDFLAGS"] = " #{ldflags} "
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
Dir.chdir(here) do
|
38
|
+
libuv_dir = File.expand_path(File.dirname(__FILE__), "libuv/")
|
39
|
+
Dir.chdir(libuv_dir) do
|
41
40
|
sys "CFLAGS='#{cflags}' make"
|
42
41
|
FileUtils.mv "uv.a", "../libuv.a"
|
43
42
|
end
|
44
43
|
|
45
|
-
dir_config("uv", File.expand_path("../libuv/include", __FILE__), File.expand_path("../libuv", __FILE__))
|
46
|
-
have_library("uv")
|
47
|
-
|
44
|
+
#dir_config("uv", File.expand_path("../libuv/include", __FILE__), File.expand_path("../libuv", __FILE__))
|
45
|
+
have_library("uv") or raise "have_library('uv') returns false"
|
46
|
+
|
47
|
+
create_makefile("asyncengine/asyncengine_ext")
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"CFLAGS='-shared -fPIC' make"
|
2
|
+
ar rcs uv.a src/unix/async.o src/unix/cares.o src/unix/check.o src/unix/core.o src/unix/dl.o src/unix/error.o src/unix/fs.o src/unix/idle.o src/unix/loop.o src/unix/pipe.o src/unix/prepare.o src/unix/process.o src/unix/stream.o src/unix/tcp.o src/unix/thread.o src/unix/timer.o src/unix/tty.o src/unix/udp.o src/unix/linux/core.o src/unix/linux/inotify.o src/unix/linux/syscalls.o src/uv-common.o src/unix/uv-eio.o src/unix/ev/ev.o src/unix/eio/eio.o src/ares/ares__close_sockets.o src/ares/ares__get_hostent.o src/ares/ares__read_line.o src/ares/ares__timeval.o src/ares/ares_cancel.o src/ares/ares_data.o src/ares/ares_destroy.o src/ares/ares_expand_name.o src/ares/ares_expand_string.o src/ares/ares_fds.o src/ares/ares_free_hostent.o src/ares/ares_free_string.o src/ares/ares_gethostbyaddr.o src/ares/ares_gethostbyname.o src/ares/ares_getnameinfo.o src/ares/ares_getopt.o src/ares/ares_getsock.o src/ares/ares_init.o src/ares/ares_library_init.o src/ares/ares_llist.o src/ares/ares_mkquery.o src/ares/ares_nowarn.o src/ares/ares_options.o src/ares/ares_parse_a_reply.o src/ares/ares_parse_aaaa_reply.o src/ares/ares_parse_mx_reply.o src/ares/ares_parse_ns_reply.o src/ares/ares_parse_ptr_reply.o src/ares/ares_parse_srv_reply.o src/ares/ares_parse_txt_reply.o src/ares/ares_process.o src/ares/ares_query.o src/ares/ares_search.o src/ares/ares_send.o src/ares/ares_strcasecmp.o src/ares/ares_strdup.o src/ares/ares_strerror.o src/ares/ares_timeout.o src/ares/ares_version.o src/ares/ares_writev.o src/ares/bitncmp.o src/ares/inet_net_pton.o src/ares/inet_ntop.o
|
3
|
+
have_library: checking for main() in -luv... -------------------- yes
|
4
|
+
|
5
|
+
"gcc -o conftest -I/usr/include/ruby-1.9.1/x86_64-linux -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -shared -fPIC conftest.c -L. -L/usr/lib -lruby-1.9.1-static -lpthread -lrt -ldl -lcrypt -lm -lc"
|
6
|
+
checked program was:
|
7
|
+
/* begin */
|
8
|
+
1: #include "ruby.h"
|
9
|
+
2:
|
10
|
+
3: int main() {return 0;}
|
11
|
+
/* end */
|
12
|
+
|
13
|
+
"gcc -o conftest -I/usr/include/ruby-1.9.1/x86_64-linux -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -shared -fPIC conftest.c -L. -L/usr/lib -lruby-1.9.1-static -luv -lpthread -lrt -ldl -lcrypt -lm -lc"
|
14
|
+
checked program was:
|
15
|
+
/* begin */
|
16
|
+
1: #include "ruby.h"
|
17
|
+
2:
|
18
|
+
3: /*top*/
|
19
|
+
4: int main() {return 0;}
|
20
|
+
5: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
|
21
|
+
/* end */
|
22
|
+
|
23
|
+
--------------------
|
24
|
+
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
Binary file
|
File without changes
|
Binary file
|
File without changes
|
Binary file
|
File without changes
|
Binary file
|
File without changes
|
Binary file
|
File without changes
|
File without changes
|
Binary file
|
File without changes
|
Binary file
|
File without changes
|