Class: Bran::LibUV::Reactor::Collections::Timer

Inherits:
Abstract
  • Object
show all
Defined in:
lib/bran/libuv/reactor/collections.rb

Instance Method Summary collapse

Methods inherited from Abstract

#drop_item, #invoke_by_addr, #invoke_by_ident, #invoke_handler, #item_by_ident, #make_item, #pop, #push

Constructor Details

#initializeTimer

Returns a new instance of Timer.



245
246
247
248
249
# File 'lib/bran/libuv/reactor/collections.rb', line 245

def initialize(*)
  super
  @item_pool = []
  @callback  = FFI.uv_timer_cb(&@reactor.method(:_timer_callback))
end

Instance Method Details

#concrete_alloc_itemObject



251
252
253
# File 'lib/bran/libuv/reactor/collections.rb', line 251

def concrete_alloc_item
  @item_pool.pop || FFI.uv_timer_alloc
end

#concrete_release_item(item) ⇒ Object



255
256
257
# File 'lib/bran/libuv/reactor/collections.rb', line 255

def concrete_release_item(item)
  @item_pool << item
end

#concrete_start_item(ident, item, timeout) ⇒ Object



259
260
261
262
263
264
265
266
267
268
# File 'lib/bran/libuv/reactor/collections.rb', line 259

def concrete_start_item(ident, item, timeout)
  timeout_ms = (timeout * 1000).ceil
  
  # TODO: need not init existing timer item?
  Util.error_check "creating the timer item",
    FFI.uv_timer_init(@reactor.ptr, item)
  
  Util.error_check "starting the timer item",
    FFI.uv_timer_start(item, @callback, timeout_ms, timeout_ms)
end

#concrete_stop_item(ident, item) ⇒ Object



270
271
272
273
# File 'lib/bran/libuv/reactor/collections.rb', line 270

def concrete_stop_item(ident, item)
  Util.error_check "stopping the timer item",
    FFI.uv_timer_stop(item)
end