Sha256: 34233d7bd5f1b5ca10e2b6fb769d9cad729476d5b1ba3b93ea36835a2efe5189
Contents?: true
Size: 1.38 KB
Versions: 4
Compression:
Stored size: 1.38 KB
Contents
module Specjour class Connection include Protocol extend Forwardable attr_reader :uri attr_writer :socket def_delegators :socket, :flush, :closed?, :gets, :each def self.wrap(established_connection) host, port = established_connection.peeraddr.values_at(3,1) connection = new URI::Generic.build(:host => host, :port => port) connection.socket = established_connection connection end def initialize(uri) @uri = uri end alias to_str to_s def connect timeout { connect_socket } end def disconnect socket.close end def socket @socket ||= connect end def timeout(&block) Timeout.timeout(2, &block) rescue Timeout::Error raise Error, "Connection to dispatcher timed out" end def print(arg) socket.print dump_object(arg) rescue SystemCallError => error reconnect retry end def puts(arg) print(arg << "\n") end def send_message(method_name, *args) print([method_name, *args]) flush end protected def connect_socket @socket = TCPSocket.open(uri.host, uri.port) rescue Errno::ECONNREFUSED => error Specjour.logger.debug "Could not connect to #{uri.to_s}\n#{error.inspect}" retry end def reconnect socket.close unless socket.closed? connect end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
specjour-0.2.3 | lib/specjour/connection.rb |
specjour-0.2.2 | lib/specjour/connection.rb |
specjour-0.2.1 | lib/specjour/connection.rb |
specjour-0.2.0 | lib/specjour/connection.rb |