1# frozen_string_literal: false
2=begin
3 external service
4        Copyright (c) 2000,2002 Masatoshi SEKI
5=end
6
7require_relative 'drb'
8require 'monitor'
9
10module DRb
11  class ExtServ
12    include MonitorMixin
13    include DRbUndumped
14
15    def initialize(there, name, server=nil)
16      super()
17      @server = server || DRb::primary_server
18      @name = name
19      ro = DRbObject.new(nil, there)
20      synchronize do
21        @invoker = ro.regist(name, DRbObject.new(self, @server.uri))
22      end
23    end
24    attr_reader :server
25
26    def front
27      DRbObject.new(nil, @server.uri)
28    end
29
30    def stop_service
31      synchronize do
32        @invoker.unregist(@name)
33        server = @server
34        @server = nil
35        server.stop_service
36        true
37      end
38    end
39
40    def alive?
41      @server ? @server.alive? : false
42    end
43  end
44end
45