Class: Hakuban::ObjectObserve

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

Defined Under Namespace

Classes: ManagedObject

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(local_node, descriptor, deserializer) ⇒ ObjectObserve

Returns a new instance of ObjectObserve.



228
229
230
231
232
233
234
# File 'lib/hakuban/hakuban.rb', line 228

def initialize(local_node, descriptor, deserializer)
	@local_node, @descriptor, @deserializer = local_node, descriptor, deserializer
	result = FFI::hakuban_object_observe_new(@local_node.local_node_pointer, descriptor.to_ffi)
	Hakuban::raise_if_error(result)
	@queues = []
	@object_observe_pointer = ::FFI::AutoPointer.new(result[:object_observe_pointer], proc { |ptr| FFI::hakuban_object_observe_drop(ptr) })
end

Instance Attribute Details

#descriptorObject (readonly)

Returns the value of attribute descriptor.



226
227
228
# File 'lib/hakuban/hakuban.rb', line 226

def descriptor
  @descriptor
end

Instance Method Details

#dropObject



261
262
263
264
265
266
# File 'lib/hakuban/hakuban.rb', line 261

def drop
	@object_observe_pointer.free
	@object_observe_pointer = nil
	@queues.each(&:close)  #is this atomic?
	@queues.clear
end

#dropped?Boolean

Returns:

  • (Boolean)


268
269
270
# File 'lib/hakuban/hakuban.rb', line 268

def dropped?
	@object_observe_pointer.nil?
end

#inspectObject



257
258
259
# File 'lib/hakuban/hakuban.rb', line 257

def inspect
	"#<ObjectObserve #{@descriptor}>"
end

#manageObject



248
249
250
# File 'lib/hakuban/manager.rb', line 248

def manage
	ObjectManagerBuilder.new(self)
end

#new_callback_event_queueObject



245
246
247
248
# File 'lib/hakuban/hakuban.rb', line 245

def new_callback_event_queue
	raise "Attempt to use after 'drop'"  if not @object_observe_pointer
	ObjectDescriptorCallbackEventQueue.new(FFI::hakuban_object_observe_events_get(@object_observe_pointer))
end

#new_event_queueObject



250
251
252
253
254
255
# File 'lib/hakuban/hakuban.rb', line 250

def new_event_queue
	raise "Attempt to use after 'drop'"  if not @object_observe_pointer
	queue = ObjectDescriptorEventQueue.new(self)
	@queues << queue
	queue
end

#object_stateObject



236
237
238
239
240
241
242
243
# File 'lib/hakuban/hakuban.rb', line 236

def object_state
	raise "Attempt to use after 'drop'"  if not @object_observe_pointer
	if (state_ptr = FFI::hakuban_object_observe_state_borrow(@object_observe_pointer)).null?
		nil
	else
		ObjectObserveState.new(state_ptr, @deserializer)
	end
end