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 +4 -4
- data/lib/ducts/client.rb +28 -12
- data/lib/ducts/client/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74c85c4fbbb4e225d647251a22a526545a3f4921b88921fb6fb779705b1fe4f1
|
4
|
+
data.tar.gz: f5396e8363fb5c31159be810b0631d45bfaca068143f136beb8a52e82f54ba93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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(:
|
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
|
-
|
298
|
-
|
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(
|
310
|
+
completion.succeed(data)
|
303
311
|
else
|
304
|
-
completion.fail(DuctError.exception(
|
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.
|
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
|
-
|
357
|
-
|
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
|
-
|
362
|
-
|
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
|
data/lib/ducts/client/version.rb
CHANGED
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
|
+
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-
|
11
|
+
date: 2021-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faye-websocket
|