Class: Canopus::Plugins::Host
- Inherits:
-
Object
- Object
- Canopus::Plugins::Host
- Defined in:
- lib/canopus/plugins/host.rb,
sig/canopus.rbs
Overview
Canopus vocabulary on top of the generic out-of-process host.
Constant Summary collapse
- API_VERSION =
2
Instance Attribute Summary collapse
-
#runtime ⇒ Object
readonly
Returns the value of attribute runtime.
Instance Method Summary collapse
- #activate(id, reason:) ⇒ Object?
- #add(manifest) ⇒ Object
- #deactivate(id) ⇒ Object
- #discover(directories) ⇒ Array[untyped]
-
#initialize(workspace, sandbox: true, limits: {}) ⇒ Host
constructor
A new instance of Host.
- #instances ⇒ Array[untyped]
- #shutdown ⇒ Object
- #status_items ⇒ Hash[untyped, untyped]
Constructor Details
#initialize(workspace, sandbox: true, limits: {}) ⇒ Host
Returns a new instance of Host.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/canopus/plugins/host.rb', line 20 def initialize(workspace, sandbox: true, limits: {}) require_gienah @workspace = workspace @sandbox = sandbox @runtime = Gienah::Host.new(api_version: API_VERSION, sandbox: sandbox, limits: limits) @surfaces = {} @subscriptions = {} @decorations = {} @completion_sources = {} @status_items = {} @storage_lock = Mutex.new @activation_threads = {} @subscribed_instances = {} @selection_subscriptions = {} @selection_threads = {} @event_lock = Mutex.new register_buffer_api register_workspace_api register_ui_api @runtime.on_contribution { |id, contributes| register_contributions(id, contributes) } @workspace_event_subscription = @workspace.on_plugin_event { |method, payload| handle_workspace_event(method, payload) } @runtime.on_error do |error, instance| cleanup_instance(instance.id) if instance&.state == :failed @workspace. = error. end end |
Instance Attribute Details
#runtime ⇒ Object (readonly)
Returns the value of attribute runtime.
18 19 20 |
# File 'lib/canopus/plugins/host.rb', line 18 def runtime @runtime end |
Instance Method Details
#activate(id, reason:) ⇒ Object?
50 51 52 53 54 |
# File 'lib/canopus/plugins/host.rb', line 50 def activate(id, reason:) raise PermissionDenied, "workspace is not trusted" unless @workspace.trust.trusted? @runtime.activate(id, reason: reason) end |
#add(manifest) ⇒ Object
48 |
# File 'lib/canopus/plugins/host.rb', line 48 def add(manifest) = @runtime.add(manifest) |
#deactivate(id) ⇒ Object
56 57 58 59 |
# File 'lib/canopus/plugins/host.rb', line 56 def deactivate(id) cleanup_instance(id) @runtime.deactivate(id) end |
#discover(directories) ⇒ Array[untyped]
47 |
# File 'lib/canopus/plugins/host.rb', line 47 def discover(directories) = @runtime.discover(directories) |
#instances ⇒ Array[untyped]
60 |
# File 'lib/canopus/plugins/host.rb', line 60 def instances = @runtime.instances |
#shutdown ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/canopus/plugins/host.rb', line 61 def shutdown @activation_threads.values.each { |thread| thread.kill unless thread.equal?(Thread.current) } @activation_threads.clear @workspace_event_subscription&.detach @selection_threads.each_value { |thread| thread.kill unless thread.equal?(Thread.current) } @selection_threads.clear @selection_subscriptions.each_value { |_editor, subscription| subscription.detach } @selection_subscriptions.clear @subscriptions.each_value(&:detach) @subscriptions.clear @subscribed_instances.clear @runtime.shutdown end |
#status_items ⇒ Hash[untyped, untyped]
75 76 77 |
# File 'lib/canopus/plugins/host.rb', line 75 def status_items @status_items.dup end |