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