msgpack_rpc_server 0.1.0 → 0.1.1

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.
data/README.rdoc CHANGED
@@ -8,6 +8,9 @@ Logger library seemed to be incompatible with Daemons library. Therefore logging
8
8
 
9
9
  Tests are not implemented at the moment. I created this for my own purposes and I'm running this in small-scale production use, but I'm not familiar with the internals of the MessagePack-RPC library, and there may be something that I have not taken into consideration. Feel free to send suggestions for improvement.
10
10
 
11
+ == Installation:
12
+
13
+ gem install msgpack_rpc_server
11
14
 
12
15
  == Contributing to msgpack_rpc_server
13
16
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -0,0 +1,8 @@
1
+ #/bin/env ruby
2
+
3
+ require 'msgpack/rpc'
4
+
5
+ sp = MessagePack::RPC::SessionPool.new
6
+ client = sp.get_session('127.0.0.1', 9000)
7
+ puts client.call(:ping, "ruby client calling.")
8
+
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+ #cabal install msgpack-rpc
3
+ ghc --make ping.hs
@@ -0,0 +1,9 @@
1
+ import Network.MessagePackRpc.Client
2
+
3
+ ping :: RpcMethod (String -> IO String)
4
+ ping = method "ping"
5
+
6
+ main = do
7
+ conn <- connect "127.0.0.1" 9000
8
+ print =<< ping conn "haskell client calling."
9
+
@@ -0,0 +1,29 @@
1
+ #!/bin/env ruby
2
+
3
+ require 'msgpack_rpc_server'
4
+
5
+ class Handler
6
+
7
+ def ping(arg)
8
+ log "ruby handler received: #{arg}"
9
+ "message from ruby handler: received '#{arg}'"
10
+ end
11
+
12
+ def close; nil; end
13
+ end
14
+
15
+ config = {:uid => 'nobody',
16
+ :gid => 'nobody',
17
+ :listen_ip => '127.0.0.1', # '0.0.0.0' for listening to all incoming connections
18
+ :port => 9000,
19
+ :dir => '.',
20
+ :app_name => 'rpc-server-template',
21
+ # see http://daemons.rubyforge.org/classes/Daemons.html
22
+ :ontop => false,
23
+ :backtrace => true,
24
+ :dir_mode => :system, # write to /var/run and /var/log
25
+ :log_output => true
26
+ }
27
+
28
+ MsgPackRPCServer.new(config, Handler.new).run
29
+
@@ -4,17 +4,65 @@ require 'msgpack/rpc'
4
4
  require 'etc'
5
5
  require 'daemons'
6
6
 
7
-
8
- def log(msg); puts "#{Time.new.to_s}: #{msg}"; end
9
-
7
+ # This class is a thin layer over MessagePack::RPC::Server,
8
+ # which implements privilege dropping and daemonizing.
9
+ #
10
+ # Signal handlers call a +close+ method, which the handler class must implement,
11
+ # and in which e.g. database connections are closed.
12
+ #
13
+ # Server example:
14
+ #
15
+ # require 'msgpack_rpc_server'
16
+ #
17
+ # msgpack_config = {:uid => 'nobody',
18
+ # :gid => 'nobody',
19
+ # :listen_ip => '127.0.0.1',
20
+ # :port => 12345,
21
+ # :dir => '.',
22
+ # :app_name => 'test_server',
23
+ # :ontop => false,
24
+ # :backtrace => true,
25
+ # :dir_mode => :script,
26
+ # :log_output => true }
27
+ #
28
+ # class Handler
29
+ # def ping(arg); "pong received #{arg}"; end
30
+ # def close; nil; end
31
+ # end
32
+ #
33
+ # MsgPackRPCServer.new(msgpack_config, Handler.new).run
34
+ #
35
+ # Client example:
36
+ #
37
+ # require 'msgpack/rpc'
38
+ #
39
+ # c = MessagePack::RPC::Client.new('127.0.0.1', 12345)
40
+ # puts c.call(:ping, "hello")
41
+ #
42
+ # MessagePack documentation: http://msgpack.org/
43
+ #
44
+ # Daemons documentation: http://daemons.rubyforge.org/
10
45
 
11
46
  class MsgPackRPCServer
12
47
 
48
+ # Returns a new instance. The first parameter is a hash containing configuration
49
+ # parameters.
50
+ #
51
+ # Refer to the example and the Daemons library documentation for the format and meanings of
52
+ # configuration parameters.
53
+ #
54
+ # The other parameter is an instance of the handler class.
55
+
13
56
  def initialize(config, handler)
14
57
  @config = config
15
58
  @handler = handler
16
59
  end
17
60
 
61
+ # Logger library seemed to be incompatible with Daemons library, which is why logging is implemented in this very simple way for now.
62
+
63
+ def log(msg); puts "#{Time.new.to_s}: #{msg}"; end
64
+
65
+ # Daemonizes this process according to the configuration parameters given to +new+.
18
66
  def daemonize
19
67
  Daemons.daemonize({:ontop => @config[:ontop], :backtrace => @config[:backtrace], :dir => @config[:dir],
20
68
  :app_name => @config[:app_name], :dir_mode => @config[:dir_mode],
@@ -22,6 +70,7 @@ class MsgPackRPCServer
22
70
  log "daemonized."
23
71
  end
24
72
 
73
+ # Drops privileges according to the configuration parameters given to +new+.
25
74
  def drop_privileges
26
75
  gid = Etc::getgrnam(@config[:gid])[:gid]
27
76
  uid = Etc::getpwnam(@config[:uid])[:uid]
@@ -30,14 +79,23 @@ class MsgPackRPCServer
30
79
  log "privileges dropped."
31
80
  end
32
81
 
33
- private :daemonize, :drop_privileges, :log
82
+ # Calls the +close+ method of the handler class.
83
+ def close
84
+ @handler.close
85
+ log "handler closed."
86
+ end
87
+
88
+ private :daemonize, :drop_privileges, :log, :close
34
89
 
90
+ # Starts the server after daemonizing and privilege dropping.
91
+ # Sets signal handlers for INT and TERM.
92
+
35
93
  def run
36
94
  daemonize
37
95
  drop_privileges
38
96
 
39
- Signal.trap('INT') { log "received INT signal; exiting."; exit }
40
- Signal.trap('TERM') { log "received TERM signal; exiting."; exit }
97
+ Signal.trap('INT') { log "received INT signal; exiting."; close; exit }
98
+ Signal.trap('TERM') { log "received TERM signal; exiting."; close; exit }
41
99
 
42
100
  svr = MessagePack::RPC::Server.new
43
101
  svr.listen @config[:listen_ip], @config[:port], @handler
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: msgpack_rpc_server
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 0
9
- segments_generated: true
10
- version: 0.1.0
4
+ prerelease:
5
+ version: 0.1.1
11
6
  platform: ruby
12
7
  authors:
13
8
  - opiskelijarekisteri-devel
@@ -15,8 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-10-04 00:00:00 +03:00
19
- default_executable:
13
+ date: 2011-11-30 00:00:00 Z
20
14
  dependencies:
21
15
  - !ruby/object:Gem::Dependency
22
16
  name: msgpack-rpc
@@ -25,11 +19,6 @@ dependencies:
25
19
  requirements:
26
20
  - - ">="
27
21
  - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- - 4
31
- - 5
32
- segments_generated: true
33
22
  version: 0.4.5
34
23
  type: :runtime
35
24
  prerelease: false
@@ -41,11 +30,6 @@ dependencies:
41
30
  requirements:
42
31
  - - ">="
43
32
  - !ruby/object:Gem::Version
44
- segments:
45
- - 1
46
- - 1
47
- - 4
48
- segments_generated: true
49
33
  version: 1.1.4
50
34
  type: :runtime
51
35
  prerelease: false
@@ -57,11 +41,6 @@ dependencies:
57
41
  requirements:
58
42
  - - ~>
59
43
  - !ruby/object:Gem::Version
60
- segments:
61
- - 1
62
- - 0
63
- - 0
64
- segments_generated: true
65
44
  version: 1.0.0
66
45
  type: :development
67
46
  prerelease: false
@@ -73,11 +52,6 @@ dependencies:
73
52
  requirements:
74
53
  - - ~>
75
54
  - !ruby/object:Gem::Version
76
- segments:
77
- - 1
78
- - 6
79
- - 4
80
- segments_generated: true
81
55
  version: 1.6.4
82
56
  type: :development
83
57
  prerelease: false
@@ -98,10 +72,13 @@ files:
98
72
  - README.rdoc
99
73
  - Rakefile
100
74
  - VERSION
75
+ - examples/client.rb
76
+ - examples/haskell/compile.sh
77
+ - examples/haskell/ping.hs
78
+ - examples/server.rb
101
79
  - lib/msgpack_rpc_server.rb
102
80
  - test/helper.rb
103
81
  - test/test_msgpack_rpc_server.rb
104
- has_rdoc: true
105
82
  homepage: http://github.com/opiskelijarekisteri-devel/msgpack_rpc_server
106
83
  licenses:
107
84
  - GPLv3
@@ -115,24 +92,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
92
  requirements:
116
93
  - - ">="
117
94
  - !ruby/object:Gem::Version
118
- hash: 4066221359959899943
95
+ hash: 2202355589262301225
119
96
  segments:
120
97
  - 0
121
- segments_generated: true
122
98
  version: "0"
123
99
  required_rubygems_version: !ruby/object:Gem::Requirement
124
100
  none: false
125
101
  requirements:
126
102
  - - ">="
127
103
  - !ruby/object:Gem::Version
128
- segments:
129
- - 0
130
- segments_generated: true
131
104
  version: "0"
132
105
  requirements: []
133
106
 
134
107
  rubyforge_project:
135
- rubygems_version: 1.3.7
108
+ rubygems_version: 1.8.11
136
109
  signing_key:
137
110
  specification_version: 3
138
111
  summary: MessagePack-RPC server template.