/* * Watch for method calls to the world. Usage: * * world.watch_method('methodname') { |arg1,arg2| ... } * * Returns a Callback object representing the callback. */ static VALUE world_watch_method(VALUE self, VALUE method_name) { IrmoInterfaceSpec *spec; IrmoWorld *world = unwrap_world(self); IrmoMethod *method; char *c_method_name = STR2CSTR(method_name); VALUE proc; VALUE method_call_data; IrmoCallback *callback; spec = irmo_world_get_spec(world); method = irmo_interface_spec_get_method(spec, c_method_name); if (!method) rb_raise(rb_eNameError, "unknown method %s", c_method_name); proc = BLOCK_PROC(); method_call_data = rb_ary_new3(2, proc, wrap_method(method)); callback = irmo_world_method_watch(world, c_method_name, (IrmoInvokeCallback) rb_irmo_invoke_callback, (void *) method_call_data); return wrap_callback(callback, method_call_data); }