process_shared/lib/mach/port.rb

48 lines
1.2 KiB
Ruby

require 'mach/functions'
module Mach
class Port
include Functions
attr_reader :ipc_space, :port
# either initialize(port, opts) -or- initialize(opts)
def initialize(opts = {}, opts2 = {})
if opts.kind_of? Hash
ipc_space = opts[:ipc_space] || mach_task_self
right = opts[:right] || :receive
mem = new_memory_pointer(:mach_port_right_t)
mach_port_allocate(ipc_space, right, mem)
@port = mem.get_uint(0)
@ipc_space = ipc_space
else
@port = opts
@ipc_space = opts2[:ipc_space] || mach_task_self
end
end
def ==(other)
(port == other.port) && (ipc_space == other.ipc_space)
end
def destroy(opts = {})
ipc_space = opts[:ipc_space] || @ipc_space
mach_port_destroy(ipc_space, @port)
end
def deallocate(opts = {})
ipc_space = opts[:ipc_space] || @ipc_space
mach_port_deallocate(ipc_space, @port)
end
def insert_right(msg_type, opts = {})
ipc_space = opts[:ipc_space] || @ipc_space
port_name = opts[:port_name] || @port
mach_port_insert_right(ipc_space, port_name, @port, msg_type)
end
end
end