msgpack-rpc 0.3.0 → 0.4.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.
@@ -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