ducts-client 0.1.1 → 0.4.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: 3344b83d9bc5c7da3cbfcc870dfe4a1dbefffd041e38e911d04bb58e59018c00
4
- data.tar.gz: 891fe145f30a3ba1bd7eb989a80fb464025f2dc84e79cb4b2c4111008454b36e
3
+ metadata.gz: de6d875bf28e0042c19c44dbbffa9fbef3f02baebc6038fb0cdbeab5582e14c3
4
+ data.tar.gz: c731e1c5f040b2c1615f6515c678f6d2f8736378c04bbeffc6a588346dedeca3
5
5
  SHA512:
6
- metadata.gz: 2e29a2e545614cd0131e7213148e51da1f6588849a401ef242030591bb445bf9cded5a3cf9746710b41e79ff473251cd22efab64c6accfc7502d30aef134c697
7
- data.tar.gz: f5147cc164268cd0d544e9a98261719665ff6d9b41b93f202489ec90746f7c77fe0b2286dad2c0046b1546b449c0ac106783433cc3691ffbe23b503d86f7671f
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, &proc)
134
- _open(wsd_url, uuid, **params, &proc)
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 send(rid, eid, data)
144
+ def event_send(rid, eid, data)
142
145
  _send(rid, eid, data)
143
146
  end
144
147
 
145
- def call(eid, data)
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']) 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
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
- send(rid, eid, value)
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
- raise if @_waiting_completion.keys.include? rid
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 = @uncaught_event_handler unless 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.execption(data))
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
@@ -4,8 +4,8 @@ module Ducts
4
4
  class Client
5
5
  module Version
6
6
  MAJOR = 0
7
- MINOR = 1
8
- PATCH = 1
7
+ MINOR = 4
8
+ PATCH = 0
9
9
  end
10
10
 
11
11
  VERSION = [ Version::MAJOR, Version::MINOR, Version::PATCH ].map(&:to_s).join('.')
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.1
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-05-19 00:00:00.000000000 Z
11
+ date: 2021-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faye-websocket