ducts-client 0.1.0 → 0.3.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/ductsclient.gemspec +2 -2
- data/lib/ducts/client.rb +70 -20
- data/lib/ducts/client/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 462bf9fef3fa7a84f427eff39582c60f9f8128968ecc1df60e28f9bb21a34d0d
|
4
|
+
data.tar.gz: 21c0f5740793fb1438097cd6305c3d2db620e86870148384b2ad1b2c15ccd8e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '008a89071f257fe97c0b368d1a6e6ca2354cfd2735f38c183f4e9481176df7c74d7a7c96d618a2dae4d9587f5ce28db5a6cfdd0499f7b50cb1aa4af5109dbf88'
|
7
|
+
data.tar.gz: d1050d195567a46c6b40f59878c10d58227a49df173d01d3ea5de67e8c3a1d02e07b3043968d0cdc22ad3894c77c356211d8b2e10eb51c98b553f116b1afc419
|
data/ductsclient.gemspec
CHANGED
@@ -20,6 +20,6 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.
|
24
|
-
spec.
|
23
|
+
spec.add_dependency 'faye-websocket', '~> 0.11'
|
24
|
+
spec.add_dependency 'msgpack', '~> 1.4'
|
25
25
|
end
|
data/lib/ducts/client.rb
CHANGED
@@ -119,6 +119,7 @@ module Ducts
|
|
119
119
|
@_last_rid = nil
|
120
120
|
@_ws = nil
|
121
121
|
@_waiting_completion = Hash.new
|
122
|
+
@_loop_queues = Hash.new
|
122
123
|
end
|
123
124
|
|
124
125
|
def next_rid
|
@@ -130,19 +131,19 @@ module Ducts
|
|
130
131
|
next_id
|
131
132
|
end
|
132
133
|
|
133
|
-
def open(wsd_url, uuid = nil, **params
|
134
|
-
_open(wsd_url, uuid, **params
|
134
|
+
def open(wsd_url, uuid = nil, **params)
|
135
|
+
_open(wsd_url, uuid, **params)
|
135
136
|
end
|
136
137
|
|
137
138
|
def reconnect
|
138
139
|
_reconnect
|
139
140
|
end
|
140
141
|
|
141
|
-
def
|
142
|
+
def event_send(rid, eid, data)
|
142
143
|
_send(rid, eid, data)
|
143
144
|
end
|
144
145
|
|
145
|
-
def
|
146
|
+
def event_call(eid, data)
|
146
147
|
_call(eid, data)
|
147
148
|
end
|
148
149
|
|
@@ -239,20 +240,16 @@ module Ducts
|
|
239
240
|
@_time_offset = 0
|
240
241
|
@_time_latency = 0
|
241
242
|
@_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
|
243
|
+
set_event_handler(@EVENT['ALIVE_MONITORING'], &method(:_alive_monitoring_handler))
|
244
|
+
set_event_handler(@EVENT['LOOP_RESPONSE_START'], &method(:_loop_response_handler))
|
245
|
+
set_event_handler(@EVENT['LOOP_RESPONSE_NEXT'], &method(:_loop_response_handler))
|
246
|
+
set_event_handler(@EVENT['LOOP_RESPONSE_END'], &method(:_loop_response_end_handler))
|
247
|
+
set_event_handler(@EVENT['DIVIDED_RESPONSE_APPEND'], &method(:_divided_response_append_handler))
|
248
|
+
set_event_handler(@EVENT['DIVIDED_RESPONSE_END'], &method(:_divided_response_end_handler))
|
252
249
|
rid = next_rid
|
253
250
|
eid = @EVENT['ALIVE_MONITORING']
|
254
251
|
value = @_send_timestamp
|
255
|
-
|
252
|
+
_send(rid, eid, value)
|
256
253
|
end
|
257
254
|
|
258
255
|
def _onreconnect(connection_event)
|
@@ -267,7 +264,7 @@ module Ducts
|
|
267
264
|
def _call(eid, data)
|
268
265
|
rid = next_rid
|
269
266
|
_send(rid, eid, data)
|
270
|
-
|
267
|
+
warn Message.construct(Message::Level::WARNING, 'request ID is duplicated.') if @_waiting_completion.keys.include? rid
|
271
268
|
EM::Completion.new.tap { |completion| @_waiting_completion[rid] = completion }
|
272
269
|
end
|
273
270
|
|
@@ -285,14 +282,15 @@ module Ducts
|
|
285
282
|
begin
|
286
283
|
@catchall_event_handler.call(rid, eid, data)
|
287
284
|
handle = @_event_handler[eid]
|
288
|
-
handle
|
289
|
-
handle.call(rid, eid, data)
|
285
|
+
handle ||= @uncaught_event_handler
|
286
|
+
ret = handle.call(rid, eid, data)
|
287
|
+
ret ||= data
|
290
288
|
completion = @_waiting_completion.delete(rid)
|
291
289
|
if completion
|
292
290
|
if eid > 0
|
293
|
-
completion.succeed(
|
291
|
+
completion.succeed(ret)
|
294
292
|
else
|
295
|
-
completion.fail(DuctError.
|
293
|
+
completion.fail(DuctError.exception(ret))
|
296
294
|
end
|
297
295
|
end
|
298
296
|
rescue => error
|
@@ -302,5 +300,57 @@ module Ducts
|
|
302
300
|
@event_error_handler.call(-1, -1, nil, error)
|
303
301
|
end
|
304
302
|
end
|
303
|
+
|
304
|
+
def _alive_monitoring_handler(rid, eid, data)
|
305
|
+
client_received = Time.now.to_f
|
306
|
+
server_sent, server_received = data
|
307
|
+
client_sent = @_send_timestamp
|
308
|
+
new_offset = ((server_received - client_sent) - (client_received - server_sent)) / 2
|
309
|
+
new_latency = ((client_received - client_sent) - (server_sent - server_received)) / 2
|
310
|
+
@_time_offset = (@_time_offset * @_time_count + new_offset) / (@_time_count + 1)
|
311
|
+
@_time_latency = (@_time_latency * @_time_count + new_latency) / (@_time_count + 1)
|
312
|
+
@_time_count += 1
|
313
|
+
nil
|
314
|
+
end
|
315
|
+
|
316
|
+
def _loop_response_handler(rid, eid, data)
|
317
|
+
warn Message.construct(Message::Level::WARNING, 'loop response has error.') if eid.negative?
|
318
|
+
source_eid = data[1]
|
319
|
+
source_data = data[2]
|
320
|
+
@catchall_event_handler.call(rid, source_eid, source_data)
|
321
|
+
handle = @_event_handler[source_eid.abs]
|
322
|
+
handle ||= @uncaught_event_handler
|
323
|
+
handle.call(rid, source_eid, source_data)
|
324
|
+
@_loop_queues[rid] ||= EM::Queue.new
|
325
|
+
queue = @_loop_queues[rid]
|
326
|
+
queue.push(source_data) if source_data
|
327
|
+
queue
|
328
|
+
end
|
329
|
+
|
330
|
+
def _loop_response_end_handler(rid, eid, data)
|
331
|
+
warn Message.construct(Message::Level::WARNING, 'loop response end has error.') if eid.negative?
|
332
|
+
source_eid = data[1]
|
333
|
+
source_data = data[2]
|
334
|
+
warn Message.construct(Message::Level::WARNING, "loop response end has data: #{source_data}.") if source_data
|
335
|
+
@catchall_event_handler.call(rid, source_eid, source_data)
|
336
|
+
handle = @_event_handler[source_eid.abs]
|
337
|
+
handle ||= @uncaught_event_handler
|
338
|
+
handle.call(rid, source_eid, source_data)
|
339
|
+
queue = @_loop_queues.delete(rid)
|
340
|
+
queue.push(nil)
|
341
|
+
source_eid
|
342
|
+
end
|
343
|
+
|
344
|
+
def _divided_response_append_handler(rid, eid, data)
|
345
|
+
raise 'Not implemented.'
|
346
|
+
# TODO
|
347
|
+
nil
|
348
|
+
end
|
349
|
+
|
350
|
+
def _divided_response_end_handler(rid, eid, data)
|
351
|
+
raise 'Not implemented.'
|
352
|
+
# TODO
|
353
|
+
nil
|
354
|
+
end
|
305
355
|
end
|
306
356
|
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.3.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-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faye-websocket
|
@@ -17,7 +17,7 @@ dependencies:
|
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.11'
|
20
|
-
type: :
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.4'
|
34
|
-
type: :
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|