Sha256: 0efef9068e9f8aaf1dc035be86be76d56ee86722e9768fd22f112da1fdd50752

Contents?: true

Size: 1.28 KB

Versions: 17

Compression:

Stored size: 1.28 KB

Contents

require 'protobuf/rpc/server'
require 'protobuf/logger'

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

        def initialize(sock, &complete_cb)
          @socket = sock
          @complete_cb = complete_cb

          data = read_data
          return unless data

          gc_pause do
            encoded_response = handle_request(data)
            send_data(encoded_response)
          end
        end

        def read_data
          size_io = StringIO.new

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

          @socket.read(str_size_io.to_i)
        end

        def send_data(data)
          raise 'Socket closed unexpectedly' unless socket_writable?
          response_buffer = Protobuf::Rpc::Buffer.new(:write)
          response_buffer.set_data(data)

          @socket.write(response_buffer.write)
          @socket.flush

          @complete_cb.call(@socket)
        end

        def log_signature
          @_log_signature ||= "server-#{self.class}-#{object_id}"
        end

        def socket_writable?
          ! @socket.nil? && ! @socket.closed?
        end
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 2 rubygems

Version Path
protobuffy-3.6.0 lib/protobuf/rpc/servers/socket/worker.rb
protobuffy-3.5.1 lib/protobuf/rpc/servers/socket/worker.rb
protobuffy-3.4.0 lib/protobuf/rpc/servers/socket/worker.rb
protobuffy-3.3.0 lib/protobuf/rpc/servers/socket/worker.rb
protobuffy-3.2.0 lib/protobuf/rpc/servers/socket/worker.rb
protobuffy-3.1.0 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-3.2.1 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-3.2.0 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-3.1.0 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-3.0.5 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-3.0.4 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-3.0.3 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-3.0.2 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-3.0.1 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-3.0.0 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-3.0.0.rc2 lib/protobuf/rpc/servers/socket/worker.rb
protobuf-3.0.0.rc1 lib/protobuf/rpc/servers/socket/worker.rb