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.
@@ -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
- require File.dirname(__FILE__) + '/../lib/msgpack/rpc'
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.3.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-03-04 00:00:00 +09:00
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.3.1
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