ducts-client 0.4.4 → 0.4.5

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: 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