ducts-client 0.4.0 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ducts/client.rb +68 -58
- data/lib/ducts/client/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4ed02a6ed450d3495ea4d27af20b735e50959f1d95042dccf7afcca9331e079
|
4
|
+
data.tar.gz: f8a5f500b92af0ff4a6f3fca4f4590b480534976c412c969944919ecb7d5c261
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7621536c5e0dafabfa1d6f47eb0d69a6f96188251e2c83ddc33aeb1d58abc8a32d5ff1b88d7c39dad1c0040d063f428457e2fde85aca1be8c3d4af541ed06e9
|
7
|
+
data.tar.gz: 611bd6b7d8bf79eef1abff322f98723e9239a5f63a6f94443baf0a104263eb937d626d06ddaf8cda5884144deb72f4c50c005ff439ce0ce3bd69c64441c919fd
|
data/lib/ducts/client.rb
CHANGED
@@ -120,7 +120,8 @@ module Ducts
|
|
120
120
|
|
121
121
|
@_last_rid = nil
|
122
122
|
@_ws = nil
|
123
|
-
@
|
123
|
+
@_waiting_message_completion = Hash.new
|
124
|
+
@_waiting_closed_completion = Array.new
|
124
125
|
@_loop_queues = Hash.new
|
125
126
|
end
|
126
127
|
|
@@ -133,29 +134,13 @@ module Ducts
|
|
133
134
|
next_id
|
134
135
|
end
|
135
136
|
|
136
|
-
def open(wsd_url, uuid = nil, **params)
|
137
|
-
_open(wsd_url, uuid, **params)
|
138
|
-
end
|
139
|
-
|
140
|
-
def reconnect
|
141
|
-
_reconnect
|
142
|
-
end
|
143
|
-
|
144
|
-
def event_send(rid, eid, data)
|
145
|
-
_send(rid, eid, data)
|
146
|
-
end
|
147
|
-
|
148
|
-
def event_call(eid, data)
|
149
|
-
_call(eid, data)
|
150
|
-
end
|
151
|
-
|
152
|
-
def close
|
153
|
-
_close
|
154
|
-
end
|
155
|
-
|
156
137
|
def set_event_handler(event_id, &handler)
|
157
138
|
@_event_handler ||= {}
|
158
|
-
|
139
|
+
if handler
|
140
|
+
@_event_handler.store(event_id, handler)
|
141
|
+
else
|
142
|
+
@_event_handler.delete(event_id)
|
143
|
+
end
|
159
144
|
end
|
160
145
|
|
161
146
|
def state
|
@@ -166,16 +151,16 @@ module Ducts
|
|
166
151
|
end
|
167
152
|
end
|
168
153
|
|
169
|
-
|
170
|
-
|
171
|
-
if
|
172
|
-
|
173
|
-
|
154
|
+
def reconnect
|
155
|
+
completion = EM::Completion.new
|
156
|
+
if @_ws
|
157
|
+
completion.succeed(self)
|
158
|
+
return completion;
|
174
159
|
end
|
175
|
-
return if @_ws
|
176
160
|
Faye::WebSocket::Client.new(@WSD['websocket_url_reconnect']).tap do |ws|
|
177
161
|
ws.on(:open) do |event|
|
178
162
|
@_ws = ws
|
163
|
+
completion.succeed(self)
|
179
164
|
connection_event = DuctConnectionEvent.new('onopen', event)
|
180
165
|
_onreconnect(connection_event)
|
181
166
|
@connection_listener.onopen(connection_event)
|
@@ -195,10 +180,15 @@ module Ducts
|
|
195
180
|
@connection_listener.onerror(connection_event)
|
196
181
|
end
|
197
182
|
end
|
183
|
+
completion
|
198
184
|
end
|
199
185
|
|
200
|
-
def
|
201
|
-
|
186
|
+
def open(wsd_url, uuid = nil, **params)
|
187
|
+
completion = EM::Completion.new
|
188
|
+
if @_ws
|
189
|
+
completion.succeed(self)
|
190
|
+
return completion;
|
191
|
+
end
|
202
192
|
begin
|
203
193
|
query = '?uuid=' + (uuid || 'dummy') + params.map{ |k, v| "&#{k}=#{v}" }.join
|
204
194
|
uri = URI.parse(wsd_url + query)
|
@@ -213,6 +203,7 @@ module Ducts
|
|
213
203
|
Faye::WebSocket::Client.new(@WSD['websocket_url']).tap do |ws|
|
214
204
|
ws.on(:open) do |event|
|
215
205
|
@_ws = ws
|
206
|
+
completion.succeed(self)
|
216
207
|
connection_event = DuctConnectionEvent.new('onopen', event)
|
217
208
|
_onopen(connection_event)
|
218
209
|
@connection_listener.onopen(connection_event)
|
@@ -228,6 +219,19 @@ module Ducts
|
|
228
219
|
@connection_listener.onerror(connection_event)
|
229
220
|
end
|
230
221
|
ws.on(:close) do |event|
|
222
|
+
@_ws = nil
|
223
|
+
case event.code
|
224
|
+
when 1000
|
225
|
+
@_waiting_closed_completion.each do |waiting_closed_completion|
|
226
|
+
waiting_closed_completion.succeed(event)
|
227
|
+
end
|
228
|
+
else
|
229
|
+
p event.code
|
230
|
+
@_waiting_closed_completion.each do |waiting_closed_completion|
|
231
|
+
waiting_closed_completion.fail(event)
|
232
|
+
end
|
233
|
+
end
|
234
|
+
@_waiting_closed_completion.clear
|
231
235
|
connection_event = DuctConnectionEvent.new('onclose', event)
|
232
236
|
@connection_listener.onclose(connection_event)
|
233
237
|
end
|
@@ -235,8 +239,34 @@ module Ducts
|
|
235
239
|
rescue => error
|
236
240
|
@connection_listener.onerror(DuctConnectionEvent.new('onerror', error))
|
237
241
|
end
|
242
|
+
completion
|
243
|
+
end
|
244
|
+
|
245
|
+
def event_send(rid, eid, data)
|
246
|
+
msgpack = [ rid, eid, data ].to_msgpack
|
247
|
+
@_ws.send(msgpack.chars.map(&:ord))
|
248
|
+
rid
|
249
|
+
end
|
250
|
+
|
251
|
+
def event_call(eid, data)
|
252
|
+
rid = next_rid
|
253
|
+
event_send(rid, eid, data)
|
254
|
+
warn Message.construct(Message::Level::WARNING, 'request ID is duplicated.') if @_waiting_message_completion.keys.include? rid
|
255
|
+
EM::Completion.new.tap { |completion| @_waiting_message_completion[rid] = completion }
|
256
|
+
end
|
257
|
+
|
258
|
+
def close
|
259
|
+
completion = EM::Completion.new
|
260
|
+
if @_ws
|
261
|
+
@_ws.close
|
262
|
+
@_waiting_closed_completion.push(completion)
|
263
|
+
else
|
264
|
+
completion.succeed(nil)
|
265
|
+
end
|
266
|
+
completion
|
238
267
|
end
|
239
268
|
|
269
|
+
private
|
240
270
|
def _onopen(event)
|
241
271
|
@_send_timestamp = Time.now.to_f
|
242
272
|
@_time_offset = 0
|
@@ -251,33 +281,12 @@ module Ducts
|
|
251
281
|
rid = next_rid
|
252
282
|
eid = @EVENT['ALIVE_MONITORING']
|
253
283
|
value = @_send_timestamp
|
254
|
-
|
284
|
+
event_send(rid, eid, value)
|
255
285
|
end
|
256
286
|
|
257
287
|
def _onreconnect(connection_event)
|
258
288
|
end
|
259
289
|
|
260
|
-
def _send(rid, eid, data)
|
261
|
-
msgpack = [ rid, eid, data ].to_msgpack
|
262
|
-
@_ws.send(msgpack.chars.map(&:ord))
|
263
|
-
rid
|
264
|
-
end
|
265
|
-
|
266
|
-
def _call(eid, data)
|
267
|
-
rid = next_rid
|
268
|
-
_send(rid, eid, data)
|
269
|
-
warn Message.construct(Message::Level::WARNING, 'request ID is duplicated.') if @_waiting_completion.keys.include? rid
|
270
|
-
EM::Completion.new.tap { |completion| @_waiting_completion[rid] = completion }
|
271
|
-
end
|
272
|
-
|
273
|
-
def _close
|
274
|
-
begin
|
275
|
-
@_ws.close if @_ws
|
276
|
-
ensure
|
277
|
-
@_ws = nil
|
278
|
-
end
|
279
|
-
end
|
280
|
-
|
281
290
|
def _onmessage(connection_event)
|
282
291
|
begin
|
283
292
|
rid, eid, data = %i(rid eid data).map{ |name| connection_event.source.public_send(name) }
|
@@ -286,13 +295,13 @@ module Ducts
|
|
286
295
|
handle = @_event_handler[eid]
|
287
296
|
handle ||= @uncaught_event_handler
|
288
297
|
ret = handle.call(rid, eid, data)
|
289
|
-
|
290
|
-
completion = @
|
298
|
+
handled_data = (ret.instance_of? DuctEventHandlerReturnValue)? ret.value : data
|
299
|
+
completion = @_waiting_message_completion.delete(rid)
|
291
300
|
if completion
|
292
301
|
if eid > 0
|
293
|
-
completion.succeed(
|
302
|
+
completion.succeed(handled_data)
|
294
303
|
else
|
295
|
-
completion.fail(DuctError.exception(
|
304
|
+
completion.fail(DuctError.exception(handled_data))
|
296
305
|
end
|
297
306
|
end
|
298
307
|
rescue => error
|
@@ -321,10 +330,11 @@ module Ducts
|
|
321
330
|
@catchall_event_handler.call(rid, source_eid, source_data)
|
322
331
|
handle = @_event_handler[source_eid.abs]
|
323
332
|
handle ||= @uncaught_event_handler
|
324
|
-
handle.call(rid, source_eid, source_data)
|
333
|
+
ret = handle.call(rid, source_eid, source_data)
|
334
|
+
handled_source_data = (ret.instance_of? DuctEventHandlerReturnValue)? ret.value : source_data
|
325
335
|
@_loop_queues[rid] ||= EM::Queue.new
|
326
336
|
queue = @_loop_queues[rid]
|
327
|
-
queue.push(
|
337
|
+
queue.push(handled_source_data) if handled_source_data
|
328
338
|
DuctEventHandlerReturnValue.new(queue)
|
329
339
|
end
|
330
340
|
|
data/lib/ducts/client/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ducts-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kenshiro Ueda
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faye-websocket
|