class Terminalwire::Client::Handler
def connect
def connect @adapter.write(event: "initialization", protocol: { version: VERSION }, entitlement: @entitlement.serialize, program: { name: @program_name, arguments: @program_arguments }) loop do handle @adapter.read end end
def handle(message)
def handle(message) case message in { event: "resource", action: "command", name:, parameters: } @resources.dispatch(**message) in { event: "exit", status: } exit Integer(status) end end
def initialize(adapter, arguments: ARGV, program_name: $0, entitlement:)
def initialize(adapter, arguments: ARGV, program_name: $0, entitlement:) @entitlement = entitlement @adapter = adapter @program_arguments = arguments @program_name = program_name @resources = Resource::Handler.new do |it| it << Resource::STDOUT.new("stdout", @adapter, entitlement:) it << Resource::STDIN.new("stdin", @adapter, entitlement:) it << Resource::STDERR.new("stderr", @adapter, entitlement:) it << Resource::Browser.new("browser", @adapter, entitlement:) it << Resource::File.new("file", @adapter, entitlement:) it << Resource::Directory.new("directory", @adapter, entitlement:) end end