Sha256: c298d3a64abe5b42bd548c986ee4b655060bb49d8e1fd5af3526378b6e1eac9f

Contents?: true

Size: 1.62 KB

Versions: 3

Compression:

Stored size: 1.62 KB

Contents

require 'socket'

module DRbQS
  # The class of connection to s.erver.
  class ConnectionClient
    def initialize(message, logger = nil)
      @message = message
      @logger = logger
      @id_number = nil
      @id_string = create_id_string
    end

    def create_id_string
      t = Time.now
      sprintf("#{Socket.gethostname}:%d", Process.pid)
    end
    private :create_id_string

    def get_id
      unless @id_number
        @message.write([:server, :connect, @id_string])
        @id_number = @message.take([@id_string, Fixnum])[1]
        @logger.info("Get node id: #{@id_number}") if @logger
      end
      @id_number
    end

    def get_special_task(label)
      begin
        ary = @message.read([label, nil, Symbol, nil], 0)
        ary[1..-1]
      rescue Rinda::RequestExpiredError
        nil
      end
    end
    private :get_special_task

    def get_initialization
      get_special_task(:initialize)
    end

    def get_finalization
      get_special_task(:finalize)
    end

    def respond_signal
      begin
        node_id, sym = @message.take([@id_number, Symbol], 0)
        @logger.info("Get signal: #{sym.inspect}") if @logger
        case sym
        when :alive_p
          @message.write([:server, :alive, @id_number])
          @logger.info("Send alive signal of node id #{@id_number}") if @logger
        when :exit, :finalize
          return sym
        else
          raise "Get invalid signal: #{sym.inspect}"
        end
      rescue Rinda::RequestExpiredError
      end
    end

    def send_node_error(error_message)
      @message.write([:server, :node_error, [@id_number, error_message]])
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
drbqs-0.0.13 lib/drbqs/connection.rb
drbqs-0.0.12 lib/drbqs/connection.rb
drbqs-0.0.11 lib/drbqs/connection.rb