Sha256: 67057f24db10168e0f74e1bd565a438804cb1f9393c95b881cbad60ff557d320

Contents?: true

Size: 1.82 KB

Versions: 7

Compression:

Stored size: 1.82 KB

Contents

module Protobuf
  module Rpc
    module Socket

      class Worker
        include ::Protobuf::Rpc::Server
        include ::Protobuf::Logger::LogMethods

        def initialize(sock, &complete_cb)
          @did_response = false
          @socket = sock
          @request = Protobuf::Socketrpc::Request.new
          @response = Protobuf::Socketrpc::Response.new
          request_buffer = Protobuf::Rpc::Buffer.new(:read)
          @stats = Protobuf::Rpc::Stat.new(:SERVER, true)
          @complete_cb = complete_cb
          log_debug { "[#{log_signature}] Post init, new read buffer created" }

          @stats.client = ::Socket.unpack_sockaddr_in(@socket.getpeername)
          log_debug { "stats are #{@stats.to_s}" }
          request_buffer << read_data
          @request_data = request_buffer.data

          @stats.request_size = request_buffer.size

          log_debug { "[#{log_signature}] handling request" }
          handle_client if request_buffer.flushed?
        end

        def log_signature
          @log_signature ||= "server-#{self.class}-#{object_id}"
        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 send_data
          raise 'Socket closed unexpectedly' if(@socket.nil? || @socket.closed?)
          response_buffer = Protobuf::Rpc::Buffer.new(:write)
          response_buffer.set_data(@response)
          @stats.response_size = response_buffer.size
          log_debug { "[#{log_signature}] sending data : %s" % response_buffer.data }
          @socket.write(response_buffer.write)
          @socket.flush
          @complete_cb.call(@socket)
        end
      end

    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
protobuf-2.0.0.rc3 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-2.0.0.rc2 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-2.0.0.rc1 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-1.4.2 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-1.4.1 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-1.4.0 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-1.3.0 lib/protobuf/rpc/servers/socket/worker.rb