cloudi 1.8.0 → 2.0.0

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.
Files changed (6) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +1 -2
  4. data/lib/cloudi.rb +68 -31
  5. metadata +11 -12
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 59b71b8a2fa7b91fdb4821fdfc37b81d80b042d1
4
- data.tar.gz: 78ed6318f5d76447519cef2d738717dcb34002d4
2
+ SHA256:
3
+ metadata.gz: 0471a083e2e81711a27b2efdd1779820cb687f50ea9b1cc8019cbad439c16b30
4
+ data.tar.gz: aa4a82edf6d025917958595bbc69cee9a72bfb04e4cd2f435f3aa47513b5795c
5
5
  SHA512:
6
- metadata.gz: 9516794ea7bd534e8f23438d1b5fcc4a508b710e3d27c73798940bb4c73600278fabd0ca3053fe1b8071da5fbeb569b420024fb3768e49af364b96d8e814f0b6
7
- data.tar.gz: 4e5a665ee7997d60291f1357a2257dad6c6e19970a483fe560190dd4e5f1784e7eea3d5325d6e8cb255525dd64a661d76cec2731f366d84417f45ffb7b3623ea
6
+ metadata.gz: 47603319fafe80c8af0ad85bc7e0189663d43d488d72439647b63653dd481474b9d5ff0a21d3eb9d6ba42ac770efe80418e51e69a7673f372f3db5bab7924e98
7
+ data.tar.gz: 724f8075fee5e275fed0d317604907b0e67e2ff51bd5f0be1e07f513fe85a15ca407db64f1d4bdbf38550c1d9c22ba75562987848d932ba13b54872db8d018be
Binary file
data.tar.gz.sig CHANGED
@@ -1,2 +1 @@
1
- ��}�v[�����C�&�$YI}�N4���qp^143
2
- �=� �v���� �s��Rl[@����P��J��p=(���e�n4�!�֘Y�ٙ�E�o�-|�ۛE�,�W�A�hIlӏ�����k��m��C,~- R�%bƻ<
1
+ ?��S���0��X����g���t(Y5U:�c)�|!�tZ`����j$��Vx�Fe�N��"��EOcqy%i�f��q��ߝ��I��A�|���9�}�!<�r�O���qx�_ɃiV4n�ҭoP}��LbSv-!$$�/H6|�����헙�YN;���b��y��mGdNn�Mq����|�����^j��Rh��(㫀4N?e?/2�۱� ���o�c �7��_�Ä<N�7��
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # MIT License
6
6
  #
7
- # Copyright (c) 2011-2019 Michael Truog <mjtruog at protonmail dot com>
7
+ # Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com>
8
8
  #
9
9
  # Permission is hereby granted, free of charge, to any person obtaining a
10
10
  # copy of this software and associated documentation files (the "Software"),
@@ -31,6 +31,7 @@ $stdout.sync = true
31
31
  $stderr.sync = true
32
32
 
33
33
  require 'erlang'
34
+ require 'stringio'
34
35
 
35
36
  module CloudI
36
37
  class API
@@ -62,7 +63,7 @@ module CloudI
62
63
  @terminate = false
63
64
  @size = buffer_size_str.to_i
64
65
  @callbacks = Hash.new
65
- @timeout_terminate = 1000 # TIMEOUT_TERMINATE_MIN
66
+ @timeout_terminate = 10 # TIMEOUT_TERMINATE_MIN
66
67
  send(Erlang.term_to_binary(:init))
67
68
  poll_request(nil, false)
68
69
  end
@@ -253,6 +254,7 @@ module CloudI
253
254
  function = function_queue.shift
254
255
  function_queue.push(function)
255
256
  end
257
+ return_null_response = false
256
258
  case command
257
259
  when MESSAGE_SEND_ASYNC
258
260
  begin
@@ -272,29 +274,31 @@ module CloudI
272
274
  if not response.kind_of?(String)
273
275
  response = ''
274
276
  end
275
- rescue InvalidInputException => e
276
- raise e
277
277
  rescue MessageDecodingException => e
278
- raise e
278
+ @terminate = true
279
+ return_null_response = true
279
280
  rescue TerminateException => e
280
- raise e
281
+ return_null_response = true
281
282
  rescue ReturnAsyncException
282
283
  return
283
- rescue ForwardAsyncException
284
- return
285
284
  rescue ReturnSyncException => e
285
+ @terminate = true
286
286
  $stderr.puts e.message
287
287
  $stderr.puts e.backtrace
288
- API.assert{false}
288
+ return
289
+ rescue ForwardAsyncException
289
290
  return
290
291
  rescue ForwardSyncException => e
292
+ @terminate = true
291
293
  $stderr.puts e.message
292
294
  $stderr.puts e.backtrace
293
- API.assert{false}
294
295
  return
295
296
  rescue
297
+ return_null_response = true
296
298
  $stderr.puts $!.message
297
299
  $stderr.puts $!.backtrace
300
+ end
301
+ if return_null_response
298
302
  response_info = ''
299
303
  response = ''
300
304
  end
@@ -321,29 +325,31 @@ module CloudI
321
325
  if not response.kind_of?(String)
322
326
  response = ''
323
327
  end
324
- rescue InvalidInputException => e
325
- raise e
326
328
  rescue MessageDecodingException => e
327
- raise e
329
+ @terminate = true
330
+ return_null_response = true
328
331
  rescue TerminateException => e
329
- raise e
332
+ return_null_response = true
330
333
  rescue ReturnSyncException
331
334
  return
332
- rescue ForwardSyncException
333
- return
334
335
  rescue ReturnAsyncException => e
336
+ @terminate = true
335
337
  $stderr.puts e.message
336
338
  $stderr.puts e.backtrace
337
- API.assert{false}
339
+ return
340
+ rescue ForwardSyncException
338
341
  return
339
342
  rescue ForwardAsyncException => e
343
+ @terminate = true
340
344
  $stderr.puts e.message
341
345
  $stderr.puts e.backtrace
342
- API.assert{false}
343
346
  return
344
347
  rescue
348
+ return_null_response = true
345
349
  $stderr.puts $!.message
346
350
  $stderr.puts $!.backtrace
351
+ end
352
+ if return_null_response
347
353
  response_info = ''
348
354
  response = ''
349
355
  end
@@ -402,7 +408,11 @@ module CloudI
402
408
 
403
409
  def poll_request(timeout, external)
404
410
  if @terminate
405
- return false
411
+ if external
412
+ return false
413
+ else
414
+ raise TerminateException.new(@timeout_terminate)
415
+ end
406
416
  elsif external and not @initialization_complete
407
417
  send(Erlang.term_to_binary(:polling))
408
418
  @initialization_complete = true
@@ -492,6 +502,9 @@ module CloudI
492
502
  callback(command, name, pattern, request_info, request,
493
503
  request_timeout, priority, trans_id,
494
504
  Erlang.binary_to_term(pid))
505
+ if @terminate
506
+ return false
507
+ end
495
508
  when MESSAGE_RECV_ASYNC, MESSAGE_RETURN_SYNC
496
509
  i += j; j = 4
497
510
  response_info_size = data[i, j].unpack('L')[0]
@@ -622,24 +635,47 @@ module CloudI
622
635
  send(Erlang.term_to_binary([:shutdown, reason]))
623
636
  end
624
637
 
625
- def text_key_value_parse(text)
626
- result = {}
627
- data = text.split(NULL.chr)
628
- (0...(data.length)).step(2).each do |i|
629
- value = result[data[i]]
638
+ def self.text_pairs_parse(text)
639
+ pairs = {}
640
+ text_segments = text.split(NULL.chr)
641
+ (0...(text_segments.length)).step(2).each do |i|
642
+ value = pairs[text_segments[i]]
630
643
  if value == nil
631
- result[data[i]] = data[i + 1]
644
+ pairs[text_segments[i]] = text_segments[i + 1]
632
645
  elsif value.kind_of?(Array)
633
- value << data[i + 1]
646
+ value << text_segments[i + 1]
647
+ else
648
+ pairs[text_segments[i]] = [value, text_segments[i + 1]]
649
+ end
650
+ end
651
+ return pairs
652
+ end
653
+
654
+ def self.text_pairs_new(pairs, response)
655
+ text_stream = StringIO.new
656
+ pairs.each do |key, values|
657
+ if values.kind_of?(String)
658
+ text_stream.write "#{key}\0#{values}\0"
634
659
  else
635
- result[data[i]] = [value, data[i + 1]]
660
+ values.each do |value|
661
+ text_stream.write "#{key}\0#{value}\0"
662
+ end
636
663
  end
637
664
  end
638
- return result
665
+ text = text_stream.string
666
+ if response and text == ''
667
+ return "\0"
668
+ else
669
+ return text
670
+ end
671
+ end
672
+
673
+ def self.info_key_value_parse(info)
674
+ return text_pairs_parse(info)
639
675
  end
640
676
 
641
- def info_key_value_parse(message_info)
642
- return text_key_value_parse(message_info)
677
+ def self.info_key_value_new(pairs, response = true)
678
+ return text_pairs_new(pairs, response)
643
679
  end
644
680
 
645
681
  def self.assert
@@ -650,7 +686,8 @@ module CloudI
650
686
  private :callback
651
687
  private :handle_events
652
688
  private :poll_request
653
- private :text_key_value_parse
689
+ private_class_method :text_pairs_parse
690
+ private_class_method :text_pairs_new
654
691
  private
655
692
 
656
693
  def send(data)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Truog
@@ -30,7 +30,7 @@ cert_chain:
30
30
  KH+3FIhF8jYeRqq/8g4k6zsZZwRewPjObe3Wm4yEv0f0dxdQRuWcuE7s7z0Bss5J
31
31
  YQYB6UQUREuP9rhSHKbAZd9CPR3XW+S7PkeQiWc8ceLFVsfK
32
32
  -----END CERTIFICATE-----
33
- date: 2019-11-28 00:00:00.000000000 Z
33
+ date: 2020-06-04 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: erlang_rb
@@ -38,40 +38,40 @@ dependencies:
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '1.8'
41
+ version: '2.0'
42
42
  - - ">="
43
43
  - !ruby/object:Gem::Version
44
- version: 1.8.0
44
+ version: 2.0.0
45
45
  type: :runtime
46
46
  prerelease: false
47
47
  version_requirements: !ruby/object:Gem::Requirement
48
48
  requirements:
49
49
  - - "~>"
50
50
  - !ruby/object:Gem::Version
51
- version: '1.8'
51
+ version: '2.0'
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 1.8.0
54
+ version: 2.0.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: erlang_rb
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.8'
61
+ version: '2.0'
62
62
  - - ">="
63
63
  - !ruby/object:Gem::Version
64
- version: 1.8.0
64
+ version: 2.0.0
65
65
  type: :development
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
69
  - - "~>"
70
70
  - !ruby/object:Gem::Version
71
- version: '1.8'
71
+ version: '2.0'
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: 1.8.0
74
+ version: 2.0.0
75
75
  description: Ruby CloudI API
76
76
  email: mjtruog@protonmail.com
77
77
  executables: []
@@ -100,8 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
100
  - !ruby/object:Gem::Version
101
101
  version: '0'
102
102
  requirements: []
103
- rubyforge_project:
104
- rubygems_version: 2.6.11
103
+ rubygems_version: 3.1.2
105
104
  signing_key:
106
105
  specification_version: 4
107
106
  summary: CloudI API
metadata.gz.sig CHANGED
Binary file