Class: Hakuban::EventQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/hakuban/hakuban.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(queue, prefix, register_method, pointer, unregister_method) ⇒ EventQueue

Returns a new instance of EventQueue.



168
169
170
171
172
173
174
175
176
177
# File 'lib/hakuban/hakuban.rb', line 168

def initialize(queue, prefix, register_method, pointer, unregister_method)
	@queue = queue
	@callback = EventQueue.generate_callback(@queue, prefix)
	@registered_callback_pointer = ::FFI::AutoPointer.new(
		register_method.call(pointer, @callback, ::FFI::Pointer::NULL), 
		EventQueue.generate_unregister(unregister_method, @callback)
	)
	#puts "Allocated callback pointer: #{@registered_callback_pointer}"
	#puts "Allocated callback queue: #{@events}"
end

Class Method Details

.generate_callback(queue, prefix) ⇒ Object



179
180
181
182
183
184
185
186
# File 'lib/hakuban/hakuban.rb', line 179

def self.generate_callback(queue, prefix)
	proc { |_userdata, ffi_descriptor, ffi_action|
		#puts "Callback for queue: #{queue}"
		action = Hakuban::action_int_to_symbol(ffi_action)
		descriptor = ObjectDescriptor.from_ffi(ffi_descriptor)
		queue << prefix + [action, descriptor]
	}
end

.generate_unregister(unregister_method, callback) ⇒ Object



188
189
190
191
192
193
194
# File 'lib/hakuban/hakuban.rb', line 188

def self.generate_unregister(unregister_method, callback)
	proc { |pointer|
		#puts "Dropping callback pointer: #{pointer}"
		callback # probably not needed, but I want to be sure this is captured
		unregister_method.call(pointer)
	}
end