ducts-client 0.2.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: c4c3b4b409de5782a0a17ff6be86f8a2a567508f7c6ac3c0baf6f4c0808301c2
4
- data.tar.gz: 628e413f6fe4399fb51c288850a36503b62e9ce810114bbf93d6cea8b9c479f9
3
+ metadata.gz: 462bf9fef3fa7a84f427eff39582c60f9f8128968ecc1df60e28f9bb21a34d0d
4
+ data.tar.gz: 21c0f5740793fb1438097cd6305c3d2db620e86870148384b2ad1b2c15ccd8e5
5
5
  SHA512:
6
- metadata.gz: caa94df4e3324917d66e1186dd158c8acf964eb5325f485e158ed5b1eee597d57ff5faef95dde812fe7a1d40a758a077f2cd8852c2f784657c9e9562861eced3
7
- data.tar.gz: 06111104f2f3a82de9586f57551de285f810a06b54034642638822087b3044edfc3db69cb5d89be420a0272a95da5c8aed53939f571f5febdb8d26b18f79e001
6
+ metadata.gz: '008a89071f257fe97c0b368d1a6e6ca2354cfd2735f38c183f4e9481176df7c74d7a7c96d618a2dae4d9587f5ce28db5a6cfdd0499f7b50cb1aa4af5109dbf88'
7
+ data.tar.gz: d1050d195567a46c6b40f59878c10d58227a49df173d01d3ea5de67e8c3a1d02e07b3043968d0cdc22ad3894c77c356211d8b2e10eb51c98b553f116b1afc419
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
@@ -239,16 +240,12 @@ 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
@@ -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.exception(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 = 2
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.2.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-21 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