Sha256: 9a5f7113dcef3367d9ecb7026eec1a8fab5b056001cb142a546d7a8d36e64b0b
Contents?: true
Size: 1.71 KB
Versions: 1
Compression:
Stored size: 1.71 KB
Contents
#include <noderb_common.h> #include <noderb_timers.h> #include <noderb_tools.h> #include <noderb.h> typedef struct { long target; int repeat; } nodeRb_timers_handle; void nodeRb_timers_callback(uv_timer_t* handle, int status){ // Load data nodeRb_timers_handle* data = (nodeRb_timers_handle*) handle->data; VALUE handler = nodeRb_get_class_from_id(data->target); // Run callback rb_funcall(handler, rb_intern("call"), 1, handler); if(data->repeat == 0){ // Let the GC work nodeRb_unregister_instance(handler); // Free memory free(data); free(handle); } } VALUE nodeRb_timers_stop(VALUE self){ // Load data uv_timer_t *handle; Data_Get_Struct(rb_iv_get(self, "@_handle"), uv_timer_t, handle); // Stop timer uv_timer_stop(handle); // Let the GC work nodeRb_unregister_instance(self); // Free memory free((nodeRb_timers_handle*) handle->data); free(handle); } VALUE nodeRb_timers_once(VALUE self, VALUE timeout, VALUE repeat, VALUE handler){ // Allocate memory uv_timer_t* handle = (uv_timer_t*) malloc(sizeof(uv_timer_t)); nodeRb_timers_handle* data = (nodeRb_timers_handle*) malloc(sizeof(nodeRb_timers_handle)); // Save from GC nodeRb_register_instance(handler); // Save data for later use if(rb_num2long(timeout) > 0){ data->repeat = 1; } data->target = rb_num2long(rb_obj_id(handler)); // Initialize uv_timer_init(handle); handle->data = data; // Save handle rb_iv_set(handler, "@_handle", Data_Wrap_Struct(nodeRb_get_nodeRb_pointer(), 0, NULL, handle)); // Schedule uv_timer_start(handle, nodeRb_timers_callback, rb_num2long(timeout), rb_num2long(repeat)); }
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
noderb-0.0.4 | ext/noderb_extension/noderb_timers.c |