Developer SDK

Ruby examples

Install the SDK · View source on GitHub ↗

integration/client.rb

require "urnetwork"

# Owned bootstrap shared by sockets and messages. Credentials come from the backend.
class UrSession
  attr_reader :device
  def initialize(connect: true)
    @handles = []
    @manager = 0
    jwt, id = ENV.fetch("URNETWORK_CLIENT_JWT"), ENV.fetch("URNETWORK_INSTANCE_ID")
    raise "URNETWORK_INSTANCE_ID must be a persistent UUID" unless /\A[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}\z/.match?(id)
    raw = URnetwork::Raw
    begin
      @manager = raw.urnet_new_network_space_manager_no_storage
      @handles << URnetwork::Handle.new(@manager)
      space = raw.urnet_network_space_manager_update_network_space_values(@manager,
        JSON.generate(host_name: "ur.network", env_name: "main"), JSON.generate(migration_host_name: "bringyour.com"))
      @handles << URnetwork::Handle.new(space)
      api = raw.urnet_network_space_get_api(space)
      @handles << URnetwork::Handle.new(api)
      raw.urnet_api_set_by_jwt(api, jwt)
      error = FFI::MemoryPointer.new(:pointer)
      handle = raw.urnet_new_device_local_with_defaults(space, jwt, "Ruby example", "ruby", "1", id, false, error)
      message = URnetwork.take_string(error.read_pointer)
      raise message if message
      @device = URnetwork::Device.new(handle)
      raw.urnet_device_set_connect_location(handle, JSON.generate(connect_location_id: {best_available: true})) if connect
    rescue Exception
      close
      raise
    end
  end
  def close
    @device&.close
    URnetwork::Raw.urnet_network_space_manager_close(@manager) if @manager != 0
    @manager = 0
    @handles.reverse_each(&:close)
  end
end