elaios 0.1.3 → 0.2.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.
- checksums.yaml +4 -4
- data/README.md +51 -51
- data/lib/elaios.rb +8 -2
- data/lib/elaios/{client.rb → requester.rb} +1 -1
- data/lib/elaios/{server.rb → responder.rb} +1 -1
- data/lib/elaios/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92df35f3d7d3ddd6bf614acdc31e2ce7ea57bdb2
|
4
|
+
data.tar.gz: 0ee4087ffe877bb92659a07583e5bd46e503ecf3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4954219790cdeb9e7196b49e907bcb02bba951dd6074ef4802c5ea915b06d9ff6d121a1771cd5de148e39eaccf956bb56d139ccb689e37c0bd0d126ab0763345
|
7
|
+
data.tar.gz: 7d7a6b1bd9a18c950b5a6bed78e453af22f500da8c27f90312805aeec0b19f20c0f8c3d7c16fbf1683c26158b301e7aeaa152b9556603c766dd3300e29d17dbd
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Elaios
|
2
2
|
|
3
3
|
Elaios is a transport-agnostic library for writing JSON-RPC clients and servers.
|
4
|
-
It can be used over TCP, HTTP, STOMP, and other
|
4
|
+
It can be used over TCP, HTTP, STOMP, and other transports, and can be used with
|
5
5
|
threaded-, evented-, or fiber-based code.
|
6
6
|
|
7
7
|
Furthermore, it is thread-safe, has a very simple API, and well-tested.
|
@@ -34,32 +34,32 @@ From your Ruby code:
|
|
34
34
|
require 'elaios'
|
35
35
|
```
|
36
36
|
|
37
|
-
### Basic client usage
|
37
|
+
### Basic requester (client) usage
|
38
38
|
|
39
39
|
```ruby
|
40
|
-
|
40
|
+
elaios_requester = Elaios::Requester.new
|
41
41
|
|
42
42
|
# Call a JSON-RPC method and don't expect a response.
|
43
|
-
|
43
|
+
elaios_requester.foo(['some', 'args'])
|
44
44
|
|
45
45
|
# Call a JSON-RPC method and expect a response.
|
46
|
-
|
46
|
+
elaios_requester.bar(['some', 'other', 'args']) do |data|
|
47
47
|
# Do something with the response from the server...
|
48
48
|
end
|
49
49
|
|
50
|
-
request_1 =
|
51
|
-
request_2 =
|
50
|
+
request_1 = elaios_requester.pop
|
51
|
+
request_2 = elaios_requester.pop
|
52
52
|
# Send the requests to the server somehow (they will be JSON strings)...
|
53
53
|
|
54
54
|
# Get a response from the server somehow (it will be a JSON string). This will
|
55
55
|
# trigger the callback above to be called.
|
56
|
-
|
56
|
+
elaios_requester << response
|
57
57
|
```
|
58
58
|
|
59
|
-
### Basic server usage
|
59
|
+
### Basic responder (server) usage
|
60
60
|
|
61
61
|
```ruby
|
62
|
-
elaios_server = Elaios::
|
62
|
+
elaios_server = Elaios::Responder.new
|
63
63
|
|
64
64
|
elaios_server.foo do |data|
|
65
65
|
# Do some processing here...
|
@@ -85,12 +85,12 @@ response = elaios_server.pop
|
|
85
85
|
### API
|
86
86
|
|
87
87
|
```
|
88
|
-
#
|
89
|
-
# Elaios::
|
90
|
-
#
|
88
|
+
# -----------------
|
89
|
+
# Elaios::Responder
|
90
|
+
# -----------------
|
91
91
|
|
92
|
-
# Create a new Elaios server object.
|
93
|
-
Elaios::
|
92
|
+
# Create a new Elaios responder (server) object.
|
93
|
+
Elaios::Responder#new(options={})
|
94
94
|
|
95
95
|
`options` may consist of:
|
96
96
|
|
@@ -98,37 +98,37 @@ Elaios::Server#new(options={})
|
|
98
98
|
* `:logger` - An optional logger object.
|
99
99
|
|
100
100
|
# Push an object onto the server for processing.
|
101
|
-
Elaios::
|
102
|
-
Elaios::
|
103
|
-
Elaios::
|
101
|
+
Elaios::Responder#push(obj)
|
102
|
+
Elaios::Responder#<<(obj)
|
103
|
+
Elaios::Responder#enq(obj)
|
104
104
|
|
105
105
|
# Pop a response off of the server.
|
106
|
-
Elaios::
|
107
|
-
Elaios::
|
108
|
-
Elaios::
|
106
|
+
Elaios::Responder#pop
|
107
|
+
Elaios::Responder#deq
|
108
|
+
Elaios::Responder#shift
|
109
109
|
|
110
110
|
# Push an object onto the server, update, and then pop a response off.
|
111
|
-
Elaios::
|
112
|
-
Elaios::
|
113
|
-
Elaios::
|
111
|
+
Elaios::Responder#process(obj)
|
112
|
+
Elaios::Responder#pushpop(obj)
|
113
|
+
Elaios::Responder#push_pop(obj)
|
114
114
|
|
115
115
|
# Register a handler.
|
116
|
-
Elaios::
|
116
|
+
Elaios::Responder#method_missing(name, &block)
|
117
117
|
|
118
118
|
# Generate a success response for sending to the client.
|
119
|
-
Elaios::
|
120
|
-
Elaios::
|
119
|
+
Elaios::Responder#res(method, id, data)
|
120
|
+
Elaios::Responder#response(method, id, data)
|
121
121
|
|
122
122
|
# Generate an error response for sending to the client.
|
123
|
-
Elaios::
|
124
|
-
Elaios::
|
123
|
+
Elaios::Responder#err(method, id, data)
|
124
|
+
Elaios::Responder#error(method, id, data)
|
125
125
|
|
126
|
-
#
|
127
|
-
# Elaios::
|
128
|
-
#
|
126
|
+
# -----------------
|
127
|
+
# Elaios::Requester
|
128
|
+
# -----------------
|
129
129
|
|
130
|
-
# Create a new Elaios client object.
|
131
|
-
Elaios::
|
130
|
+
# Create a new Elaios requester (client) object.
|
131
|
+
Elaios::Requester.new(options={})
|
132
132
|
|
133
133
|
`options` may consist of:
|
134
134
|
|
@@ -136,17 +136,17 @@ Elaios::Client.new(options={})
|
|
136
136
|
* `:logger` - An optional logger object.
|
137
137
|
|
138
138
|
# Push an object onto the client for processing.
|
139
|
-
Elaios::
|
140
|
-
Elaios::
|
141
|
-
Elaios::
|
139
|
+
Elaios::Requester.push(obj)
|
140
|
+
Elaios::Requester.<<(obj)
|
141
|
+
Elaios::Requester.enq(obj)
|
142
142
|
|
143
143
|
# Pop a response off of the client.
|
144
|
-
Elaios::
|
145
|
-
Elaios::
|
146
|
-
Elaios::
|
144
|
+
Elaios::Requester#pop
|
145
|
+
Elaios::Requester#deq
|
146
|
+
Elaios::Requester#shift
|
147
147
|
|
148
148
|
# Call a JSON-RPC method.
|
149
|
-
Elaios::
|
149
|
+
Elaios::Requester#method_missing(name, args=nil, &block)
|
150
150
|
```
|
151
151
|
|
152
152
|
### Threaded TCP client usage
|
@@ -154,28 +154,28 @@ Elaios::Client#method_missing(name, args=nil, &block)
|
|
154
154
|
```ruby
|
155
155
|
# TCP client.
|
156
156
|
socket = TCPSocket.open('0.0.0.0', 5000)
|
157
|
-
|
157
|
+
elaios_requester = Elaios::Requester.new
|
158
158
|
|
159
159
|
# Incoming socket data.
|
160
160
|
Thread.new do
|
161
161
|
loop do
|
162
|
-
|
162
|
+
elaios_requester << socket.gets.chomp
|
163
163
|
end
|
164
164
|
end
|
165
165
|
|
166
166
|
# Outgoing socket data.
|
167
167
|
Thread.new do
|
168
168
|
loop do
|
169
|
-
result =
|
169
|
+
result = elaios_requester.pop
|
170
170
|
socket.puts(result) if result
|
171
171
|
end
|
172
172
|
end
|
173
173
|
|
174
174
|
# Make a service call and expect no response.
|
175
|
-
|
175
|
+
elaios_requester.ping('foo')
|
176
176
|
|
177
177
|
# Make a service call and expect a response.
|
178
|
-
|
178
|
+
elaios_requester.ping('foo') do |response|
|
179
179
|
# Do something with the response...
|
180
180
|
end
|
181
181
|
```
|
@@ -189,14 +189,14 @@ loop do
|
|
189
189
|
# New incoming socket connection.
|
190
190
|
Thread.fork(server.accept) do |socket|
|
191
191
|
# We need a new Elaios instance for every incoming connection.
|
192
|
-
|
192
|
+
elaios_responder = Elaios::Responder.new
|
193
193
|
|
194
194
|
# Create a server handler.
|
195
|
-
|
195
|
+
elaios_responder.ping do |data|
|
196
196
|
# Generate some sort of response. Note that we grab the method name and id
|
197
197
|
# from the `data` hash.
|
198
198
|
#
|
199
|
-
# Also note
|
199
|
+
# Also note within this block, `self` is the `elaios_responder` object.
|
200
200
|
#
|
201
201
|
res(data['method'], data['id'], { foo: 'bar' })
|
202
202
|
end
|
@@ -204,13 +204,13 @@ loop do
|
|
204
204
|
# Incoming socket data.
|
205
205
|
Thread.new do
|
206
206
|
loop do
|
207
|
-
|
207
|
+
elaios_responder << socket.gets.chomp
|
208
208
|
end
|
209
209
|
end
|
210
210
|
|
211
211
|
# Outgoing socket data.
|
212
212
|
loop do
|
213
|
-
result =
|
213
|
+
result = elaios_responder.pop
|
214
214
|
socket.puts(result) if result
|
215
215
|
sleep(Float::MIN)
|
216
216
|
end
|
data/lib/elaios.rb
CHANGED
@@ -8,5 +8,11 @@ require 'elaios/version'
|
|
8
8
|
module Elaios
|
9
9
|
end
|
10
10
|
|
11
|
-
require 'elaios/
|
12
|
-
require 'elaios/
|
11
|
+
require 'elaios/requester'
|
12
|
+
require 'elaios/responder'
|
13
|
+
|
14
|
+
module Elaios
|
15
|
+
# For backwards-compatibility.
|
16
|
+
Elaios::Client = Elaios::Requester
|
17
|
+
Elaios::Server = Elaios::Responder
|
18
|
+
end
|
data/lib/elaios/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elaios
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roger Jungemann
|
@@ -139,8 +139,8 @@ files:
|
|
139
139
|
- bin/setup
|
140
140
|
- elaios.gemspec
|
141
141
|
- lib/elaios.rb
|
142
|
-
- lib/elaios/
|
143
|
-
- lib/elaios/
|
142
|
+
- lib/elaios/requester.rb
|
143
|
+
- lib/elaios/responder.rb
|
144
144
|
- lib/elaios/version.rb
|
145
145
|
homepage: https://github.com/rjungemann/elaios
|
146
146
|
licenses: []
|