ducts-client 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ba367c428158d0baa377345220b10c67538329d4e0167b1d6dce86a29d732a0
4
- data.tar.gz: 72f19f903159044c7f88c04b8a60e45fdc64672c44c7583f82f4d81d3cc4b5e9
3
+ metadata.gz: 462bf9fef3fa7a84f427eff39582c60f9f8128968ecc1df60e28f9bb21a34d0d
4
+ data.tar.gz: 21c0f5740793fb1438097cd6305c3d2db620e86870148384b2ad1b2c15ccd8e5
5
5
  SHA512:
6
- metadata.gz: 6e4e8e33b10ee10c684a9f09b0a0871f2cef598b8f3a80c88cfec56bbcd8a952790ad79079201994ac09f840faebc0cdff6121324d6d753b3c6669da3f6ad1c2
7
- data.tar.gz: fa68f8a558a5a95826b0f0bcf3084d90582ccecfd072b4a8669b97645b43704065cf6c25f5d18f48f1712bb603c0d61ba9392950b7cb4688a9f0ea99a8c4d9bd
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.add_development_dependency 'faye-websocket', '~> 0.11'
24
- spec.add_development_dependency 'msgpack', '~> 1.4'
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, &proc)
134
- _open(wsd_url, uuid, **params, &proc)
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 send(rid, eid, data)
142
+ def event_send(rid, eid, data)
142
143
  _send(rid, eid, data)
143
144
  end
144
145
 
145
- def call(eid, data)
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']) do |rid, eid, data|
243
- client_received = Time.now.to_f
244
- server_sent, server_received = data
245
- client_sent = @_send_timestamp
246
- new_offset = ((server_received - client_sent) - (client_received - server_sent)) / 2
247
- new_latency = ((client_received - client_sent) - (server_sent - server_received)) / 2
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
- send(rid, eid, value)
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
- raise if @_waiting_completion.keys.include? rid
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 = @uncaught_event_handler unless 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(data)
291
+ completion.succeed(ret)
294
292
  else
295
- completion.fail(DuctError.execption(data))
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
@@ -4,7 +4,7 @@ module Ducts
4
4
  class Client
5
5
  module Version
6
6
  MAJOR = 0
7
- MINOR = 1
7
+ MINOR = 3
8
8
  PATCH = 0
9
9
  end
10
10
 
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.1.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-05-18 00:00:00.000000000 Z
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: :development
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: :development
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements: