jrpc 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/jrpc.gemspec +4 -3
- data/lib/jrpc/base_client.rb +3 -3
- data/lib/jrpc/tcp_client.rb +25 -10
- data/lib/jrpc/utils.rb +9 -0
- data/lib/jrpc/version.rb +1 -1
- data/lib/jrpc.rb +1 -0
- metadata +29 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9700f88f401f9dc3008b7eb259e1033f2d33720e
|
4
|
+
data.tar.gz: 2fce76c9f94d75a47ae4b762df834ca66e54e2df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5807025e3121cdf27a558da1f08d27cd9eb3c28c818a9a2c61b79256f0bffd964c61396c623200dafa7a9e462d7d3228511d5ae589c3d399e843ce884aec4489
|
7
|
+
data.tar.gz: 09401f47a4c06eb8e932ce4b16f1cb17dbbca466c7d5bea246dbc3a614e5f654b8ef6c0b81531da0f9e345370b5f7796133c1c7542fb99b4798900927fe5f7aa
|
data/jrpc.gemspec
CHANGED
@@ -17,10 +17,11 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
|
-
spec.add_dependency 'netstring'
|
21
|
-
spec.add_dependency 'net_tcp_client', '>= 1.0.2'
|
20
|
+
spec.add_dependency 'netstring', '~> 0'
|
21
|
+
spec.add_dependency 'net_tcp_client', '~> 1.0', '>= 1.0.2'
|
22
|
+
spec.add_dependency 'oj', '~> 2.0'
|
22
23
|
|
23
24
|
spec.add_development_dependency 'bundler', '~> 1.10'
|
24
25
|
spec.add_development_dependency 'rake', '~> 10.0'
|
25
|
-
spec.add_development_dependency 'rspec'
|
26
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
26
27
|
end
|
data/lib/jrpc/base_client.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'oj'
|
2
2
|
require 'forwardable'
|
3
3
|
module JRPC
|
4
4
|
class BaseClient
|
@@ -22,8 +22,8 @@ module JRPC
|
|
22
22
|
id = generate_id
|
23
23
|
request['id'] = id
|
24
24
|
|
25
|
-
response = send_command
|
26
|
-
response =
|
25
|
+
response = send_command Oj.dump(request)
|
26
|
+
response = Oj.load(response)
|
27
27
|
|
28
28
|
validate_response(response, id)
|
29
29
|
parse_error(response['error']) if response.has_key?('error')
|
data/lib/jrpc/tcp_client.rb
CHANGED
@@ -1,32 +1,47 @@
|
|
1
1
|
require 'net/tcp_client'
|
2
2
|
require 'netstring'
|
3
|
+
require 'logger'
|
4
|
+
require 'benchmark'
|
3
5
|
module JRPC
|
4
6
|
class TcpClient < BaseClient
|
5
|
-
attr_reader :namespace
|
6
|
-
|
7
|
+
attr_reader :namespace, :transport
|
8
|
+
attr_accessor :logger
|
9
|
+
def_delegators :@transport, :close, :closed?, :connect
|
10
|
+
|
11
|
+
MAX_LOGGED_MESSAGE_LENGTH = 255
|
7
12
|
|
8
13
|
def initialize(uri, options = {})
|
9
14
|
super
|
15
|
+
@logger = @options.delete(:logger) || Logger.new($null)
|
10
16
|
@namespace = @options.delete(:namespace).to_s
|
11
17
|
t = @options.fetch(:timeout, 5)
|
12
18
|
|
13
|
-
@
|
19
|
+
@transport = Net::TCPClient.new server: @uri,
|
14
20
|
connect_retry_count: t,
|
15
21
|
connect_timeout: t,
|
16
22
|
read_timeout: t, # write_timeout: t,
|
17
|
-
buffered: false
|
18
|
-
logger: @options.delete(:logger)
|
23
|
+
buffered: false # recommended for RPC
|
19
24
|
end
|
20
25
|
|
21
26
|
private
|
22
27
|
|
23
28
|
def send_command(request)
|
24
|
-
|
25
|
-
|
29
|
+
response = nil
|
30
|
+
t = Benchmark.realtime do
|
31
|
+
logger.debug "Request address: #{uri}"
|
32
|
+
logger.debug "Request message: #{Utils.truncate(request, MAX_LOGGED_MESSAGE_LENGTH)}"
|
33
|
+
send_request(request)
|
34
|
+
response = receive_response
|
35
|
+
end
|
36
|
+
logger.debug "(#{'%.2f' % (t * 1000)}ms) Response message: #{Utils.truncate(response, MAX_LOGGED_MESSAGE_LENGTH)}"
|
37
|
+
response
|
26
38
|
end
|
27
39
|
|
28
40
|
def send_notification(request)
|
41
|
+
logger.debug "Request address: #{uri}"
|
42
|
+
logger.debug "Request message: #{Utils.truncate(request, MAX_LOGGED_MESSAGE_LENGTH)}"
|
29
43
|
send_request(request)
|
44
|
+
logger.debug 'No response required'
|
30
45
|
end
|
31
46
|
|
32
47
|
def create_message(method, params)
|
@@ -34,12 +49,12 @@ module JRPC
|
|
34
49
|
end
|
35
50
|
|
36
51
|
def send_request(request)
|
37
|
-
@
|
52
|
+
@transport.write Netstring.dump(request.to_s)
|
38
53
|
end
|
39
54
|
|
40
55
|
def receive_response
|
41
56
|
length = get_msg_length
|
42
|
-
response = @
|
57
|
+
response = @transport.read(length+1)
|
43
58
|
raise ClientError.new('invalid response. missed comma as terminator') if response[-1] != ','
|
44
59
|
response.chomp(',')
|
45
60
|
end
|
@@ -47,7 +62,7 @@ module JRPC
|
|
47
62
|
def get_msg_length
|
48
63
|
length = ''
|
49
64
|
while true do
|
50
|
-
character = @
|
65
|
+
character = @transport.read(1)
|
51
66
|
break if character == ':'
|
52
67
|
length += character
|
53
68
|
end
|
data/lib/jrpc/utils.rb
ADDED
data/lib/jrpc/version.rb
CHANGED
data/lib/jrpc.rb
CHANGED
metadata
CHANGED
@@ -1,33 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jrpc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Talakevich
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: netstring
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: net_tcp_client
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
31
34
|
- - ">="
|
32
35
|
- !ruby/object:Gem::Version
|
33
36
|
version: 1.0.2
|
@@ -35,9 +38,26 @@ dependencies:
|
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '1.0'
|
38
44
|
- - ">="
|
39
45
|
- !ruby/object:Gem::Version
|
40
46
|
version: 1.0.2
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: oj
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2.0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '2.0'
|
41
61
|
- !ruby/object:Gem::Dependency
|
42
62
|
name: bundler
|
43
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,16 +90,16 @@ dependencies:
|
|
70
90
|
name: rspec
|
71
91
|
requirement: !ruby/object:Gem::Requirement
|
72
92
|
requirements:
|
73
|
-
- - "
|
93
|
+
- - "~>"
|
74
94
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
95
|
+
version: '3.0'
|
76
96
|
type: :development
|
77
97
|
prerelease: false
|
78
98
|
version_requirements: !ruby/object:Gem::Requirement
|
79
99
|
requirements:
|
80
|
-
- - "
|
100
|
+
- - "~>"
|
81
101
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
102
|
+
version: '3.0'
|
83
103
|
description: JSON RPC client over TCP
|
84
104
|
email:
|
85
105
|
- senid231@gmail.com
|
@@ -108,6 +128,7 @@ files:
|
|
108
128
|
- lib/jrpc/error/server_error.rb
|
109
129
|
- lib/jrpc/error/unknown_error.rb
|
110
130
|
- lib/jrpc/tcp_client.rb
|
131
|
+
- lib/jrpc/utils.rb
|
111
132
|
- lib/jrpc/version.rb
|
112
133
|
homepage: https://github.com/senid231/jrpc
|
113
134
|
licenses:
|