Sha256: f72c9180dbd6b193c194ac37778872a3609576db27cc7fdb5766115987a9c883

Contents?: true

Size: 1.82 KB

Versions: 2

Compression:

Stored size: 1.82 KB

Contents

require 'protobuf/rpc/connectors/base'

module Protobuf
  module Rpc
    module Connectors
      class Socket < Base
        include Protobuf::Rpc::Connectors::Common
        include Protobuf::Logger::LogMethods
        
        def send_request
          check_async
          initialize_stats
          connect_to_rpc_server
          post_init # calls _send_request
          read_response
        end

        private

        def check_async
          if async?
            log_error "[client-#{self.class}] Cannot run in async mode"
            raise "Cannot use Socket client in async mode" 
          else
            log_debug "[client-#{self.class}] Async check passed" 
         end
        end

        def close_connection
          @socket.close
          log_debug "[client-#{self.class}] Connector closed" 
        end

        def connect_to_rpc_server
          @socket = TCPSocket.new(options[:host], options[:port])
          log_debug "[client-#{self.class}] Connection established #{options[:host]}:#{options[:port]}" 
        end

        # Method to determine error state, must be used with Connector api
        def error?
          log_debug "[client-#{self.class}] Error state : #{@socket.closed?}" 
          @socket.closed?
        end

        def read_data
          size_io = StringIO.new

          while((size_reader = @socket.getc) != "-")
            size_io << size_reader
          end
          str_size_io = size_io.string

          "#{str_size_io}-#{@socket.read(str_size_io.to_i)}"
        end

        def read_response
          @buffer << read_data 
          parse_response if @buffer.flushed?
        end

        def send_data(data)
          @socket.write(data)
          @socket.flush
          @socket.close_write
          log_debug "[client-#{self.class}] write closed" 
        end

      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
protobuf-1.1.0.beta1 lib/protobuf/rpc/connectors/socket.rb
protobuf-1.1.0.beta0 lib/protobuf/rpc/connectors/socket.rb