ulms_client 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ulms_client.rb +21 -41
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba52d6503b8fac72ae0ccba8658904532c4c8cc768c9cab9d1fefa74636fb87d
4
- data.tar.gz: feeaa8f3fa97611df57d9659c6cbdad15bc889f17b8efdd21dc7b8662b698170
3
+ metadata.gz: cce99c2fc29978656d0357a1b8f21ab17d9435b0acfd5405a6c49fac3d68ebf1
4
+ data.tar.gz: b0cce196c058ca68e613bde9a1d518bd021cdfcfccf5d4ece99cea8083e1b2d2
5
5
  SHA512:
6
- metadata.gz: e036739ad4c4b6e3892d7e568c155daa52aaa993b450c2212327e868105839b4eafea90c18fd1b6ded174e5beafaf70dd92d6a735822d3279a09bac10f97b07d
7
- data.tar.gz: 8914c2686be4477532d8a082c375e250d7034522ea012c3ec927c6da6e98949eb17bbc591d84b8fee3381d7c06855897db044024ec62cf65334d1d89f31ff482
6
+ metadata.gz: 44c9e62cc5a055bff6a5ce546f40dceca0b3884565cd60f15aea70dc544ff64d3149fdecb39627fccbefb2ccd4dfa1262c9f77726e46126369837aded5351f0a
7
+ data.tar.gz: a497e761a64ea4205cd7d276581ef85651843c99d233c1d41eec75c2d5bd6c114d2ac097d2dc1089e718796695bdb623acfb8605f6cbebee4695f2b176bdb512
data/lib/ulms_client.rb CHANGED
@@ -39,30 +39,17 @@ class Agent
39
39
  end
40
40
  end
41
41
 
42
- class Client
43
- attr_reader :version, :mode, :agent
44
-
45
- def initialize(version:, mode:, agent:)
46
- @version = version
47
- @mode = mode
48
- @agent = agent
49
- end
50
-
51
- def to_s
52
- "#{@version}/#{@mode}/#{@agent}"
53
- end
54
- end
55
-
56
42
  class Connection
57
- OPTIONS = [:username, :password, :clean_session, :keep_alive]
43
+ OPTIONS = [:password, :clean_session, :keep_alive]
58
44
 
59
- def initialize(host:, port:, client:, **kwargs)
60
- @client = client
45
+ def initialize(host:, port:, mode:, agent:, **kwargs)
46
+ @agent = agent
61
47
 
62
48
  @mqtt = MQTT::Client.new
63
49
  @mqtt.host = host
64
50
  @mqtt.port = port
65
- @mqtt.client_id = client.to_s
51
+ @mqtt.username = "v2::#{mode}"
52
+ @mqtt.client_id = agent.to_s
66
53
 
67
54
  OPTIONS.each do |option|
68
55
  @mqtt.send("#{option}=", kwargs[option]) if kwargs[option] != nil
@@ -72,13 +59,13 @@ class Connection
72
59
  # Establish the connection.
73
60
  def connect
74
61
  @mqtt.connect
75
- LOG.info("#{@client} connected")
62
+ LOG.info("#{@agent} connected")
76
63
  end
77
64
 
78
65
  # Disconnect from the broker.
79
66
  def disconnect
80
67
  @mqtt.disconnect
81
- LOG.info("#{@client} disconnected")
68
+ LOG.info("#{@agent} disconnected")
82
69
  end
83
70
 
84
71
  # Publish a message to the `topic`.
@@ -97,7 +84,7 @@ class Connection
97
84
  @mqtt.publish(topic, JSON.dump(envelope), retain, qos)
98
85
 
99
86
  LOG.info <<~EOF
100
- #{@client.agent} published to #{topic} (q#{qos}, r#{retain ? 1 : 0}):
87
+ #{@agent} published to #{topic} (q#{qos}, r#{retain ? 1 : 0}):
101
88
  Payload: #{JSON.pretty_generate(payload)}
102
89
  Properties: #{JSON.pretty_generate(properties)}
103
90
  EOF
@@ -109,7 +96,7 @@ class Connection
109
96
  # - `qos`: Subscriptions QoS. An interger 0..2.
110
97
  def subscribe(topic, qos: 0)
111
98
  @mqtt.subscribe([topic, qos])
112
- LOG.info("#{@client.agent} subscribed to #{topic} (q#{qos})")
99
+ LOG.info("#{@agent} subscribed to #{topic} (q#{qos})")
113
100
  end
114
101
 
115
102
  # Waits for an incoming message.
@@ -126,7 +113,7 @@ class Connection
126
113
  message = IncomingMessage.new(topic, payload, envelope['properties'])
127
114
 
128
115
  LOG.info <<~EOF
129
- #{@client.agent} received a message from topic #{topic}:
116
+ #{@agent} received a message from topic #{topic}:
130
117
  Payload: #{JSON.pretty_generate(message.payload)}
131
118
  Properties: #{JSON.pretty_generate(message.properties)}
132
119
  EOF
@@ -148,20 +135,21 @@ class Connection
148
135
  # Options:
149
136
  # - `to`: the destination service `Account` (required).
150
137
  # - `payload`: the publish message payload (required).
138
+ # - `api_version`: service API version.
151
139
  # - `properties`: additional MQTT properties hash.
152
140
  # - `qos`: Publish QoS. An integer 0..2.
153
141
  # - `timeout`: Timeout for the response awaiting.
154
- def make_request(method, to:, payload:, properties: {}, qos: 0, timeout: DEFAULT_TIMEOUT)
142
+ def make_request(method, to:, payload:, api_version: 'v1', properties: {}, qos: 0, timeout: DEFAULT_TIMEOUT)
155
143
  correlation_data = SecureRandom.hex
156
144
 
157
145
  properties.merge!({
158
146
  type: 'request',
159
147
  method: method,
160
148
  correlation_data: correlation_data,
161
- response_topic: "agents/#{@client.agent}/api/v1/in/#{to}"
149
+ response_topic: "agents/#{@agent}/api/#{api_version}/in/#{to}"
162
150
  })
163
151
 
164
- topic = "agents/#{@client.agent}/api/v1/out/#{to}"
152
+ topic = "agents/#{@agent}/api/#{api_version}/out/#{to}"
165
153
  publish(topic, payload: payload, properties: properties, qos: qos)
166
154
 
167
155
  receive(timeout) do |msg|
@@ -203,28 +191,20 @@ def account(label, audience)
203
191
  Account.new(label, audience)
204
192
  end
205
193
 
206
- # Builds a `Client` instance.
207
- #
208
- # Options:
209
- # - `mode`: Connection mode (required). Available values: `agents`, `service-agents`, `bridge-agents`, `observer-agents`.
210
- # - `version`: Always `v1` for now.
211
- def client(agent, mode:, version: 'v1')
212
- Client.new(version: version, mode: mode, agent: agent)
213
- end
214
-
215
194
  # Connects to the broker and subscribes to the client's inbox topics.
216
195
  #
217
196
  # Options:
218
197
  # - `host`: The broker's host (required).
219
198
  # - `port`: The broker's TCP port for MQTT connections (required).
220
- # - `client`: The `Client` object (required).
221
- # - `username`: If the broker has authn enabled this requires any non-empty string.
222
- # - `password`: If the broker has authn enalbed this requires the password for the `client`'s account.
199
+ # - `agent`: The `Agent` object (required).
200
+ # - `mode`: Connection mode: default | service | bridge | observer.
201
+ # - `api_version`: agent's API version.
202
+ # - `password`: If the broker has authn enalbed this requires the password for the `agent`'s account.
223
203
  # - `clean_session`: A boolean indicating whether the broker has to clean the previos session.
224
204
  # - `keep_alive`: Keep alive time in seconds.
225
- def connect(host: 'localhost', port: 1883, client:, **kwargs)
226
- conn = Connection.new(host: host, port: port, client: client, **kwargs)
205
+ def connect(host: 'localhost', port: 1883, mode: 'default', agent:, api_version: 'v1', **kwargs)
206
+ conn = Connection.new(host: host, port: port, mode: mode, agent: agent, **kwargs)
227
207
  conn.connect
228
- conn.subscribe("agents/#{client.agent}/api/v1/in/#")
208
+ conn.subscribe("agents/#{agent}/api/#{api_version}/in/#")
229
209
  conn
230
210
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ulms_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Timofey Martynov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-04 00:00:00.000000000 Z
11
+ date: 2019-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mqtt