ducts-client 0.4.4 → 0.4.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e4ed02a6ed450d3495ea4d27af20b735e50959f1d95042dccf7afcca9331e079
4
- data.tar.gz: f8a5f500b92af0ff4a6f3fca4f4590b480534976c412c969944919ecb7d5c261
3
+ metadata.gz: 74c85c4fbbb4e225d647251a22a526545a3f4921b88921fb6fb779705b1fe4f1
4
+ data.tar.gz: f5396e8363fb5c31159be810b0631d45bfaca068143f136beb8a52e82f54ba93
5
5
  SHA512:
6
- metadata.gz: e7621536c5e0dafabfa1d6f47eb0d69a6f96188251e2c83ddc33aeb1d58abc8a32d5ff1b88d7c39dad1c0040d063f428457e2fde85aca1be8c3d4af541ed06e9
7
- data.tar.gz: 611bd6b7d8bf79eef1abff322f98723e9239a5f63a6f94443baf0a104263eb937d626d06ddaf8cda5884144deb72f4c50c005ff439ce0ce3bd69c64441c919fd
6
+ metadata.gz: 2627825a0174c77e7070ae62a57bd6a74563fc35fb2882bc53fcee11434cb3341145c4735fc2deb7c2fc88bb5f624a776bff7e3110d0ca273b3fc93784882fb3
7
+ data.tar.gz: 040e53690914465287f0f59e275f9711454c46994cef7aaa68c9687c9e2d87e6d53bb31500aff28fa73aee1315581738dab025bc80ac06519838b24bdd72217e
data/lib/ducts/client.rb CHANGED
@@ -6,6 +6,7 @@ require 'timeout'
6
6
  require 'uri'
7
7
  require 'net/http'
8
8
  require 'json'
9
+ require 'stringio'
9
10
  require 'faye/websocket'
10
11
  require 'faye/websocket/api/event'
11
12
  require 'msgpack'
@@ -56,7 +57,7 @@ module Ducts
56
57
  end
57
58
  end
58
59
 
59
- DuctEventHandlerReturnValue = Struct.new(:value)
60
+ DuctEventHandlerReturnValue = Struct.new(:source_rid, :source_eid, :source_data)
60
61
 
61
62
  class ConnectionEventListener < DuctEventListener
62
63
  attr_writer :onopen, :onclose, :onerror, :onmessage
@@ -123,6 +124,7 @@ module Ducts
123
124
  @_waiting_message_completion = Hash.new
124
125
  @_waiting_closed_completion = Array.new
125
126
  @_loop_queues = Hash.new
127
+ @_divided_buffers = Hash.new
126
128
  end
127
129
 
128
130
  def next_rid
@@ -294,14 +296,20 @@ module Ducts
294
296
  @catchall_event_handler.call(rid, eid, data)
295
297
  handle = @_event_handler[eid]
296
298
  handle ||= @uncaught_event_handler
297
- ret = handle.call(rid, eid, data)
298
- handled_data = (ret.instance_of? DuctEventHandlerReturnValue)? ret.value : data
299
+ handle.call(rid, eid, data).tap do |ret|
300
+ if ret.instance_of? DuctEventHandlerReturnValue
301
+ rid = ret.source_rid
302
+ eid = ret.source_eid
303
+ data = ret.source_data
304
+ end
305
+ end
306
+ return if rid.nil?
299
307
  completion = @_waiting_message_completion.delete(rid)
300
308
  if completion
301
309
  if eid > 0
302
- completion.succeed(handled_data)
310
+ completion.succeed(data)
303
311
  else
304
- completion.fail(DuctError.exception(handled_data))
312
+ completion.fail(DuctError.exception(data))
305
313
  end
306
314
  end
307
315
  rescue => error
@@ -331,11 +339,11 @@ module Ducts
331
339
  handle = @_event_handler[source_eid.abs]
332
340
  handle ||= @uncaught_event_handler
333
341
  ret = handle.call(rid, source_eid, source_data)
334
- handled_source_data = (ret.instance_of? DuctEventHandlerReturnValue)? ret.value : source_data
342
+ handled_source_data = (ret.instance_of? DuctEventHandlerReturnValue)? ret.source_data : source_data
335
343
  @_loop_queues[rid] ||= EM::Queue.new
336
344
  queue = @_loop_queues[rid]
337
345
  queue.push(handled_source_data) if handled_source_data
338
- DuctEventHandlerReturnValue.new(queue)
346
+ DuctEventHandlerReturnValue.new(rid, source_eid, queue)
339
347
  end
340
348
 
341
349
  def _loop_response_end_handler(rid, eid, data)
@@ -349,17 +357,25 @@ module Ducts
349
357
  handle.call(rid, source_eid, source_data)
350
358
  queue = @_loop_queues.delete(rid)
351
359
  queue.push(nil)
352
- DuctEventHandlerReturnValue.new(source_eid)
360
+ DuctEventHandlerReturnValue.new(rid, source_eid, source_eid)
353
361
  end
354
362
 
355
363
  def _divided_response_append_handler(rid, eid, data)
356
- raise 'Not implemented.'
357
- # TODO
364
+ @_divided_buffers[rid] ||= StringIO.new('', 'wb').set_encoding(Encoding::ASCII_8BIT)
365
+ divided_buffer = @_divided_buffers[rid]
366
+ divided_buffer.write(data)
367
+ DuctEventHandlerReturnValue.new(nil, eid, nil)
358
368
  end
359
369
 
360
370
  def _divided_response_end_handler(rid, eid, data)
361
- raise 'Not implemented.'
362
- # TODO
371
+ divided_buffer = @_divided_buffers.delete(rid)
372
+ divided_buffer.write(data)
373
+ source_rid, source_eid, source_data = MessagePack.unpack(divided_buffer.string)
374
+ @catchall_event_handler.call(source_rid, source_eid, source_data)
375
+ handle = @_event_handler[source_eid]
376
+ handle ||= @uncaught_event_handler
377
+ handle.call(source_rid, source_eid, source_data)
378
+ DuctEventHandlerReturnValue.new(source_rid, source_eid, source_data)
363
379
  end
364
380
  end
365
381
  end
@@ -5,7 +5,7 @@ module Ducts
5
5
  module Version
6
6
  MAJOR = 0
7
7
  MINOR = 4
8
- PATCH = 4
8
+ PATCH = 5
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.4.4
4
+ version: 0.4.5
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-06-11 00:00:00.000000000 Z
11
+ date: 2021-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faye-websocket