msgpack-rpc 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/NOTICE +5 -1
- data/lib/msgpack/rpc.rb +144 -1430
- data/lib/msgpack/rpc/address.rb +144 -0
- data/lib/msgpack/rpc/client.rb +80 -0
- data/lib/msgpack/rpc/dispatcher.rb +111 -0
- data/lib/msgpack/rpc/exception.rb +53 -0
- data/lib/msgpack/rpc/future.rb +116 -0
- data/lib/msgpack/rpc/loop.rb +87 -0
- data/lib/msgpack/rpc/message.rb +31 -0
- data/lib/msgpack/rpc/server.rb +111 -0
- data/lib/msgpack/rpc/session.rb +157 -0
- data/lib/msgpack/rpc/session_pool.rb +91 -0
- data/lib/msgpack/rpc/transport/base.rb +48 -0
- data/lib/msgpack/rpc/transport/tcp.rb +242 -0
- data/lib/msgpack/rpc/transport/udp.rb +192 -0
- data/lib/msgpack/rpc/transport/unix.rb +165 -0
- data/test/test_helper.rb +2 -2
- metadata +17 -3
@@ -0,0 +1,165 @@
|
|
1
|
+
#
|
2
|
+
# MessagePack-RPC for Ruby UNIX transport
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010 FURUHASHI Sadayuki
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module MessagePack
|
19
|
+
module RPC
|
20
|
+
|
21
|
+
|
22
|
+
class UNIXTransport
|
23
|
+
def initialize
|
24
|
+
end
|
25
|
+
|
26
|
+
# Transport interface
|
27
|
+
def build_transport(session, address)
|
28
|
+
UNIXClientTransport.new(session, address)
|
29
|
+
end
|
30
|
+
|
31
|
+
class BasicSocket < Rev::UNIXSocket
|
32
|
+
def initialize(io)
|
33
|
+
super(io)
|
34
|
+
@pac = MessagePack::Unpacker.new
|
35
|
+
end
|
36
|
+
|
37
|
+
# from Rev::UNIXSocket
|
38
|
+
def on_read(data)
|
39
|
+
@pac.feed(data)
|
40
|
+
@pac.each {|obj|
|
41
|
+
on_message(obj)
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
include MessageReceiver
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
class UNIXClientTransport
|
51
|
+
def initialize(session, address)
|
52
|
+
io = UNIXSocket.new(address)
|
53
|
+
|
54
|
+
begin
|
55
|
+
@sock = ClientSocket.new(io, session)
|
56
|
+
rescue
|
57
|
+
io.close
|
58
|
+
raise
|
59
|
+
end
|
60
|
+
|
61
|
+
begin
|
62
|
+
session.loop.attach(@sock)
|
63
|
+
rescue
|
64
|
+
@sock.close
|
65
|
+
raise
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# ClientTransport interface
|
70
|
+
def send_data(data)
|
71
|
+
@sock.send_data(data)
|
72
|
+
end
|
73
|
+
|
74
|
+
# ClientTransport interface
|
75
|
+
def close
|
76
|
+
@sock.detach if @sock.attached?
|
77
|
+
@sock.close
|
78
|
+
end
|
79
|
+
|
80
|
+
class ClientSocket < UNIXTransport::BasicSocket
|
81
|
+
def initialize(io, session)
|
82
|
+
super(io)
|
83
|
+
@s = session
|
84
|
+
end
|
85
|
+
|
86
|
+
# MessageSendable interface
|
87
|
+
def send_data(data)
|
88
|
+
write data
|
89
|
+
end
|
90
|
+
|
91
|
+
# MessageReceiver interface
|
92
|
+
def on_request(msgid, method, param)
|
93
|
+
raise RPCError.new("request message on client session")
|
94
|
+
end
|
95
|
+
|
96
|
+
# MessageReceiver interface
|
97
|
+
def on_notify(method, param)
|
98
|
+
raise RPCError.new("notify message on client session")
|
99
|
+
end
|
100
|
+
|
101
|
+
# MessageReceiver interface
|
102
|
+
def on_response(msgid, error, result)
|
103
|
+
@s.on_response(self, msgid, error, result)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
class UNIXServerTransport
|
110
|
+
def initialize(address)
|
111
|
+
@address = address
|
112
|
+
@sock = nil
|
113
|
+
end
|
114
|
+
|
115
|
+
# ServerTransport interface
|
116
|
+
def listen(server)
|
117
|
+
@server = server
|
118
|
+
@lsock = Rev::UNIXServer.new(@address, ServerSocket, @server)
|
119
|
+
begin
|
120
|
+
@server.loop.attach(@lsock)
|
121
|
+
rescue
|
122
|
+
@lsock.close
|
123
|
+
raise
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# ServerTransport interface
|
128
|
+
def close
|
129
|
+
return unless @lsock
|
130
|
+
@lsock.detach if @lsock.attached?
|
131
|
+
@lsock.close
|
132
|
+
end
|
133
|
+
|
134
|
+
private
|
135
|
+
class ServerSocket < UNIXTransport::BasicSocket
|
136
|
+
def initialize(io, server)
|
137
|
+
super(io)
|
138
|
+
@server = server
|
139
|
+
end
|
140
|
+
|
141
|
+
# MessageSendable interface
|
142
|
+
def send_data(data)
|
143
|
+
write data
|
144
|
+
end
|
145
|
+
|
146
|
+
# MessageReceiver interface
|
147
|
+
def on_request(msgid, method, param)
|
148
|
+
@server.on_request(self, msgid, method, param)
|
149
|
+
end
|
150
|
+
|
151
|
+
# MessageReceiver interface
|
152
|
+
def on_notify(method, param)
|
153
|
+
@server.on_notify(method, param)
|
154
|
+
end
|
155
|
+
|
156
|
+
# MessageReceiver interface
|
157
|
+
def on_response(msgid, error, result)
|
158
|
+
raise RPCError.new("response message on server session")
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
|
164
|
+
end
|
165
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
require 'test/unit'
|
2
|
-
|
3
|
-
|
2
|
+
$LOAD_PATH.unshift File.dirname(__FILE__)+'/../lib'
|
3
|
+
require 'msgpack/rpc'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: msgpack-rpc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- FURUHASHI Sadayuki
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-05-29 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.
|
23
|
+
version: 0.4.1
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rev
|
@@ -41,6 +41,20 @@ extensions: []
|
|
41
41
|
extra_rdoc_files: []
|
42
42
|
|
43
43
|
files:
|
44
|
+
- lib/msgpack/rpc/address.rb
|
45
|
+
- lib/msgpack/rpc/client.rb
|
46
|
+
- lib/msgpack/rpc/dispatcher.rb
|
47
|
+
- lib/msgpack/rpc/exception.rb
|
48
|
+
- lib/msgpack/rpc/future.rb
|
49
|
+
- lib/msgpack/rpc/loop.rb
|
50
|
+
- lib/msgpack/rpc/message.rb
|
51
|
+
- lib/msgpack/rpc/server.rb
|
52
|
+
- lib/msgpack/rpc/session.rb
|
53
|
+
- lib/msgpack/rpc/session_pool.rb
|
54
|
+
- lib/msgpack/rpc/transport/base.rb
|
55
|
+
- lib/msgpack/rpc/transport/tcp.rb
|
56
|
+
- lib/msgpack/rpc/transport/udp.rb
|
57
|
+
- lib/msgpack/rpc/transport/unix.rb
|
44
58
|
- lib/msgpack/rpc.rb
|
45
59
|
- test/msgpack_rpc_test.rb
|
46
60
|
- test/test_helper.rb
|