Class: TigerBeetle::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/tigerbeetle/client.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cluster_id = 0, address = '3000') ⇒ Client

Returns a new instance of Client.

Raises:



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/tigerbeetle/client.rb', line 20

def initialize(cluster_id = 0, address = '3000')
  @inflight_requests = {}
  # Keep a pointer to prevent proc from getting GCed
  @callback = Proc.new { |*args| callback(*args) }
  @client_id = self.class.next_id
  @client = TBClient::Client.new

  # FFI::MemoryPointer.new(:pointer, 1) # **void
  cluster_id_ptr = serialize([cluster_id], Converters::UInt128)

  status = TBClient.tb_client_init(
    @client,
    cluster_id_ptr,
    address,
    address.length,
    @client_id,
    &@callback
  )
  raise ClientError, "Unable to initialize native client: #{status}" unless status == :SUCCESS

  # Make sure to deinitialize all clients when the process terminates
  at_exit { deinit }
end

Instance Attribute Details

#logger=(logger) ⇒ Object

Raises:



44
45
46
47
48
49
50
# File 'lib/tigerbeetle/client.rb', line 44

def logger=(logger)
  @logger = logger
  @log_callback = @logger ? Proc.new { |*args| log_callback(*args) } : nil

  status = TBClient.tb_client_register_log_callback(@log_callback, true)
  raise ClientError, "Unable to register logger: #{status}" unless status == :SUCCESS
end

Class Method Details

.next_idObject



15
16
17
18
# File 'lib/tigerbeetle/client.rb', line 15

def self.next_id
  @counter ||= AtomicCounter.new
  @counter.increment
end

Instance Method Details

#create_accounts(*accounts, &block) ⇒ Object



52
53
54
55
56
57
58
59
60
# File 'lib/tigerbeetle/client.rb', line 52

def create_accounts(*accounts, &block)
  submit_request(
    :CREATE_ACCOUNTS,
    accounts,
    Converters::Account,
    Converters::CreateAccountsResult,
    &block
  )
end

#create_transfers(*transfers, &block) ⇒ Object



62
63
64
65
66
67
68
69
70
# File 'lib/tigerbeetle/client.rb', line 62

def create_transfers(*transfers, &block)
  submit_request(
    :CREATE_TRANSFERS,
    transfers,
    Converters::Transfer,
    Converters::CreateTransfersResult,
    &block
  )
end

#deinitObject



132
133
134
135
136
137
138
# File 'lib/tigerbeetle/client.rb', line 132

def deinit
  return unless client
  return unless inflight_requests.empty?

  TBClient.tb_client_deinit(client)
  @client = nil
end

#get_account_balances(filter, &block) ⇒ Object



102
103
104
105
106
107
108
109
110
# File 'lib/tigerbeetle/client.rb', line 102

def (filter, &block)
  submit_request(
    :GET_ACCOUNT_BALANCES,
    [filter],
    Converters::AccountFilter,
    Converters::AccountBalance,
    &block
  )
end

#get_account_transfers(filter, &block) ⇒ Object



92
93
94
95
96
97
98
99
100
# File 'lib/tigerbeetle/client.rb', line 92

def (filter, &block)
  submit_request(
    :GET_ACCOUNT_TRANSFERS,
    [filter],
    Converters::AccountFilter,
    Converters::Transfer,
    &block
  )
end

#lookup_accounts(*account_ids, &block) ⇒ Object



72
73
74
75
76
77
78
79
80
# File 'lib/tigerbeetle/client.rb', line 72

def lookup_accounts(*, &block)
  submit_request(
    :LOOKUP_ACCOUNTS,
    ,
    Converters::UInt128,
    Converters::Account,
    &block
  )
end

#lookup_transfers(*transfer_ids, &block) ⇒ Object



82
83
84
85
86
87
88
89
90
# File 'lib/tigerbeetle/client.rb', line 82

def lookup_transfers(*transfer_ids, &block)
  submit_request(
    :LOOKUP_TRANSFERS,
    transfer_ids,
    Converters::UInt128,
    Converters::Transfer,
    &block
  )
end

#query_accounts(filter, &block) ⇒ Object



112
113
114
115
116
117
118
119
120
# File 'lib/tigerbeetle/client.rb', line 112

def query_accounts(filter, &block)
  submit_request(
    :QUERY_ACCOUNTS,
    [filter],
    Converters::QueryFilter,
    Converters::Account,
    &block
  )
end

#query_transfers(filter, &block) ⇒ Object



122
123
124
125
126
127
128
129
130
# File 'lib/tigerbeetle/client.rb', line 122

def query_transfers(filter, &block)
  submit_request(
    :QUERY_TRANSFERS,
    [filter],
    Converters::QueryFilter,
    Converters::Transfer,
    &block
  )
end