Class: TD::Client
- Inherits:
-
Object
- Object
- TD::Client
- Defined in:
- lib/tdlib/client.rb
Overview
Simple client for TDLib.
Constant Summary collapse
- TIMEOUT =
10
Instance Method Summary collapse
-
#authorization_state ⇒ Hash
Returns current authorization state (it's offline request).
-
#broadcast(query) {|update| ... } ⇒ Object
Sends asynchronous request to the TDLib client.
-
#broadcast_and_receive(query) ⇒ Hash
Sends asynchronous request to the TDLib client and returns received update synchronously.
-
#close ⇒ Object
Stops update manager and destroys TDLib client.
-
#execute(query) ⇒ Object
Synchronously executes TDLib request Only a few requests can be executed synchronously.
-
#initialize(td_client = TD::Api.client_create, update_manager = TD::UpdateManager.new(td_client), **extra_config) ⇒ Client
constructor
A new instance of Client.
-
#on(update_type) {|update| ... } ⇒ Object
Binds passed block as a handler for updates with type of update_type.
Constructor Details
#initialize(td_client = TD::Api.client_create, update_manager = TD::UpdateManager.new(td_client), **extra_config) ⇒ Client
Returns a new instance of Client.
63 64 65 66 67 68 69 70 |
# File 'lib/tdlib/client.rb', line 63 def initialize(td_client = TD::Api.client_create, update_manager = TD::UpdateManager.new(td_client), **extra_config) @td_client = td_client @update_manager = update_manager @config = TD.config.client.to_h.merge(extra_config) end |
Instance Method Details
#authorization_state ⇒ Hash
Returns current authorization state (it's offline request)
118 119 120 |
# File 'lib/tdlib/client.rb', line 118 def broadcast_and_receive('@type' => 'getAuthorizationState') end |
#broadcast(query) {|update| ... } ⇒ Object
Sends asynchronous request to the TDLib client
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/tdlib/client.rb', line 75 def broadcast(query) if block_given? extra = TD::Utils.generate_extra(query) handler = ->(update) do return unless update['@extra'] == extra yield update @update_manager.remove_handler(handler) end @update_manager.add_handler(handler) query['@extra'] = extra end TD::Api.client_send(@td_client, query) end |
#broadcast_and_receive(query) ⇒ Hash
Sends asynchronous request to the TDLib client and returns received update synchronously
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/tdlib/client.rb', line 92 def broadcast_and_receive(query) result = nil extra = TD::Utils.generate_extra(query) handler = ->(update) { result = update if update['@extra'] == extra } @update_manager.add_handler(handler) query['@extra'] = extra TD::Api.client_send(@td_client, query) Timeout.timeout(TIMEOUT) do loop do if result @update_manager.remove_handler(handler) return result end end end end |
#close ⇒ Object
Stops update manager and destroys TDLib client
134 135 136 137 |
# File 'lib/tdlib/client.rb', line 134 def close @update_manager.stop TD::Api.client_destroy(@td_client) end |
#execute(query) ⇒ Object
Synchronously executes TDLib request Only a few requests can be executed synchronously
112 113 114 |
# File 'lib/tdlib/client.rb', line 112 def execute(query) TD::Api.client_execute(@td_client, query) end |
#on(update_type) {|update| ... } ⇒ Object
Binds passed block as a handler for updates with type of update_type
125 126 127 128 129 130 131 |
# File 'lib/tdlib/client.rb', line 125 def on(update_type, &_) handler = ->(update) do return unless update['@type'] == update_type yield update end @update_manager.add_handler(handler) end |