ducts-client 0.1.1 → 0.4.0
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 -19
- data/lib/ducts/client/version.rb +2 -2
- 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: de6d875bf28e0042c19c44dbbffa9fbef3f02baebc6038fb0cdbeab5582e14c3
|
4
|
+
data.tar.gz: c731e1c5f040b2c1615f6515c678f6d2f8736378c04bbeffc6a588346dedeca3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92fedce71a7ba385eb3115fbc38e8a77d360ec06d31ce4079ca177d01f2dfba9c32ffb9a3c1326aed4579820a6cd8772b2ff114bd33e77471ef0234e53be1d0e
|
7
|
+
data.tar.gz: 173051b649d8358550a24bec88437d469f99e3f5e8e086611e0a4b83359144454351a8c60700c66486a02023bfbf9079a12a8f31fe75449cb4389cf5a82ff365
|
data/lib/ducts/client.rb
CHANGED
@@ -56,6 +56,8 @@ module Ducts
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
DuctEventHandlerReturnValue = Struct.new(:value)
|
60
|
+
|
59
61
|
class ConnectionEventListener < DuctEventListener
|
60
62
|
attr_writer :onopen, :onclose, :onerror, :onmessage
|
61
63
|
def onopen(event)
|
@@ -119,6 +121,7 @@ module Ducts
|
|
119
121
|
@_last_rid = nil
|
120
122
|
@_ws = nil
|
121
123
|
@_waiting_completion = Hash.new
|
124
|
+
@_loop_queues = Hash.new
|
122
125
|
end
|
123
126
|
|
124
127
|
def next_rid
|
@@ -130,19 +133,19 @@ module Ducts
|
|
130
133
|
next_id
|
131
134
|
end
|
132
135
|
|
133
|
-
def open(wsd_url, uuid = nil, **params
|
134
|
-
_open(wsd_url, uuid, **params
|
136
|
+
def open(wsd_url, uuid = nil, **params)
|
137
|
+
_open(wsd_url, uuid, **params)
|
135
138
|
end
|
136
139
|
|
137
140
|
def reconnect
|
138
141
|
_reconnect
|
139
142
|
end
|
140
143
|
|
141
|
-
def
|
144
|
+
def event_send(rid, eid, data)
|
142
145
|
_send(rid, eid, data)
|
143
146
|
end
|
144
147
|
|
145
|
-
def
|
148
|
+
def event_call(eid, data)
|
146
149
|
_call(eid, data)
|
147
150
|
end
|
148
151
|
|
@@ -239,20 +242,16 @@ module Ducts
|
|
239
242
|
@_time_offset = 0
|
240
243
|
@_time_latency = 0
|
241
244
|
@_time_count = 0
|
242
|
-
set_event_handler(@EVENT['ALIVE_MONITORING']
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
@_time_offset = (@_time_offset * @_time_count + new_offset) / (@_time_count + 1)
|
249
|
-
@_time_latency = (@_time_latency * @_time_count + new_latency) / (@_time_count + 1)
|
250
|
-
@_time_count += 1
|
251
|
-
end
|
245
|
+
set_event_handler(@EVENT['ALIVE_MONITORING'], &method(:_alive_monitoring_handler))
|
246
|
+
set_event_handler(@EVENT['LOOP_RESPONSE_START'], &method(:_loop_response_handler))
|
247
|
+
set_event_handler(@EVENT['LOOP_RESPONSE_NEXT'], &method(:_loop_response_handler))
|
248
|
+
set_event_handler(@EVENT['LOOP_RESPONSE_END'], &method(:_loop_response_end_handler))
|
249
|
+
set_event_handler(@EVENT['DIVIDED_RESPONSE_APPEND'], &method(:_divided_response_append_handler))
|
250
|
+
set_event_handler(@EVENT['DIVIDED_RESPONSE_END'], &method(:_divided_response_end_handler))
|
252
251
|
rid = next_rid
|
253
252
|
eid = @EVENT['ALIVE_MONITORING']
|
254
253
|
value = @_send_timestamp
|
255
|
-
|
254
|
+
_send(rid, eid, value)
|
256
255
|
end
|
257
256
|
|
258
257
|
def _onreconnect(connection_event)
|
@@ -267,7 +266,7 @@ module Ducts
|
|
267
266
|
def _call(eid, data)
|
268
267
|
rid = next_rid
|
269
268
|
_send(rid, eid, data)
|
270
|
-
|
269
|
+
warn Message.construct(Message::Level::WARNING, 'request ID is duplicated.') if @_waiting_completion.keys.include? rid
|
271
270
|
EM::Completion.new.tap { |completion| @_waiting_completion[rid] = completion }
|
272
271
|
end
|
273
272
|
|
@@ -285,14 +284,15 @@ module Ducts
|
|
285
284
|
begin
|
286
285
|
@catchall_event_handler.call(rid, eid, data)
|
287
286
|
handle = @_event_handler[eid]
|
288
|
-
handle
|
289
|
-
handle.call(rid, eid, data)
|
287
|
+
handle ||= @uncaught_event_handler
|
288
|
+
ret = handle.call(rid, eid, data)
|
289
|
+
data = ret.value if ret.instance_of? DuctEventHandlerReturnValue
|
290
290
|
completion = @_waiting_completion.delete(rid)
|
291
291
|
if completion
|
292
292
|
if eid > 0
|
293
293
|
completion.succeed(data)
|
294
294
|
else
|
295
|
-
completion.fail(DuctError.
|
295
|
+
completion.fail(DuctError.exception(data))
|
296
296
|
end
|
297
297
|
end
|
298
298
|
rescue => error
|
@@ -302,5 +302,54 @@ module Ducts
|
|
302
302
|
@event_error_handler.call(-1, -1, nil, error)
|
303
303
|
end
|
304
304
|
end
|
305
|
+
|
306
|
+
def _alive_monitoring_handler(rid, eid, data)
|
307
|
+
client_received = Time.now.to_f
|
308
|
+
server_sent, server_received = data
|
309
|
+
client_sent = @_send_timestamp
|
310
|
+
new_offset = ((server_received - client_sent) - (client_received - server_sent)) / 2
|
311
|
+
new_latency = ((client_received - client_sent) - (server_sent - server_received)) / 2
|
312
|
+
@_time_offset = (@_time_offset * @_time_count + new_offset) / (@_time_count + 1)
|
313
|
+
@_time_latency = (@_time_latency * @_time_count + new_latency) / (@_time_count + 1)
|
314
|
+
@_time_count += 1
|
315
|
+
end
|
316
|
+
|
317
|
+
def _loop_response_handler(rid, eid, data)
|
318
|
+
warn Message.construct(Message::Level::WARNING, 'loop response has error.') if eid.negative?
|
319
|
+
source_eid = data[1]
|
320
|
+
source_data = data[2]
|
321
|
+
@catchall_event_handler.call(rid, source_eid, source_data)
|
322
|
+
handle = @_event_handler[source_eid.abs]
|
323
|
+
handle ||= @uncaught_event_handler
|
324
|
+
handle.call(rid, source_eid, source_data)
|
325
|
+
@_loop_queues[rid] ||= EM::Queue.new
|
326
|
+
queue = @_loop_queues[rid]
|
327
|
+
queue.push(source_data) if source_data
|
328
|
+
DuctEventHandlerReturnValue.new(queue)
|
329
|
+
end
|
330
|
+
|
331
|
+
def _loop_response_end_handler(rid, eid, data)
|
332
|
+
warn Message.construct(Message::Level::WARNING, 'loop response end has error.') if eid.negative?
|
333
|
+
source_eid = data[1]
|
334
|
+
source_data = data[2]
|
335
|
+
warn Message.construct(Message::Level::WARNING, "loop response end has data: #{source_data}.") if source_data
|
336
|
+
@catchall_event_handler.call(rid, source_eid, source_data)
|
337
|
+
handle = @_event_handler[source_eid.abs]
|
338
|
+
handle ||= @uncaught_event_handler
|
339
|
+
handle.call(rid, source_eid, source_data)
|
340
|
+
queue = @_loop_queues.delete(rid)
|
341
|
+
queue.push(nil)
|
342
|
+
DuctEventHandlerReturnValue.new(source_eid)
|
343
|
+
end
|
344
|
+
|
345
|
+
def _divided_response_append_handler(rid, eid, data)
|
346
|
+
raise 'Not implemented.'
|
347
|
+
# TODO
|
348
|
+
end
|
349
|
+
|
350
|
+
def _divided_response_end_handler(rid, eid, data)
|
351
|
+
raise 'Not implemented.'
|
352
|
+
# TODO
|
353
|
+
end
|
305
354
|
end
|
306
355
|
end
|
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
|
+
version: 0.4.0
|
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-
|
11
|
+
date: 2021-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faye-websocket
|