Module: DRCtrl
- Defined in:
- lib/drctrl.rb,
lib/drctrl/client.rb,
lib/drctrl/version.rb
Overview
Namespace module. Contains server-side methods if you use
require 'drctrl'
and client-side methods if you use
require 'drctrl/client'
Defined Under Namespace
Classes: Server
Constant Summary collapse
- VERSION =
Version of drctrl gem without build number.
[0, 1, 1]
Server-side Module Attributes collapse
-
.server ⇒ DRb::DRbServer
readonly
DRCtrl server.
Server-side Module Methods collapse
-
.start_service(uri: nil, **opts) { ... } ⇒ DRb::DRbServer
Start control service with provided or default URI.
-
.wait ⇒ void
(also: join)
Wait when control service will be stopped.
Client-side Module Methods collapse
-
.connect(uri: nil, path: nil, name: nil, pid: nil) ⇒ DRb::DRbObject, ...
Connect to dRuby socket(-s).
-
.detect(name, pid = nil) ⇒ String, ...
Find socket path for name and process ID.
Class Attribute Details
.server ⇒ DRb::DRbServer (readonly)
DRCtrl server.
51 52 53 |
# File 'lib/drctrl.rb', line 51 def server @server end |
Class Method Details
.connect(uri: nil, path: nil, name: nil, pid: nil) ⇒ DRb::DRbObject, ...
Connect to dRuby socket(-s).
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/drctrl/client.rb', line 48 def connect uri: nil, path: nil, name: nil, pid: nil if uri DRbObject.new nil, uri elsif path DRbObject.new nil, "drbunix:#{path}" elsif name socket = detect name, pid case socket when String DRbObject.new nil, "drbunix:#{socket}" when Array socket.map { |s| DRbObject.new nil, "drbunix:#{s}" } else raise RuntimeError, "Socket for { name: #{name.inspect}," + " pid: #{pid.inspect} } not found!", caller end else raise ArgumentError, "One of this arguments: uri, path or name must be setted!", caller end end |
.detect(name, pid = nil) ⇒ String, ...
Find socket path for name and process ID.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/drctrl/client.rb', line 18 def detect name, pid = nil if pid result = "/tmp/#{name}-#{pid}" if File.socket? result return result else return nil end else files = Dir["/tmp/#{name}*"] result = files.select { |f| File.socket? f } if result.length == 0 return nil elsif result.length == 1 return result[0] else return result end end end |
.start_service(uri: nil, **opts) { ... } ⇒ DRb::DRbServer
Start control service with provided or default URI. Create a Server instance and start it as a front object of dRuby service.
66 67 68 69 70 71 72 73 74 |
# File 'lib/drctrl.rb', line 66 def start_service uri: nil, **opts, &block if uri.nil? uri = "drbunix:/tmp/#{File.basename($0, '.rb')}-#{Process.pid}" end oldprim = DRb.primary_server @server = DRb.start_service uri, Server.new(&block), opts DRb.primary_server = oldprim if oldprim @server end |
.wait ⇒ void Also known as: join
This method returns an undefined value.
Wait when control service will be stopped.
79 80 81 |
# File 'lib/drctrl.rb', line 79 def wait @server.thread.join if @server end |