Method: Gearman::Connection#next

Defined in:
lib/gearman/connection.rb

#next(*expected_packet_types) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/gearman/connection.rb', line 50

def next(*expected_packet_types)
  connect if disconnected?

  header = read(HEADER_SIZE)
  magic, type, length = header.unpack(HEADER_FORMAT)

  body = read(length)
  arguments = String(body).split(NULL_BYTE)

  @repository.load(type).new(arguments).tap do |packet|
    debug "Read #{packet.inspect}"

    if packet.is_a?(Packet::ERROR)
      message = "server sent error #{packet.error_code}: #{packet.text}"

      raise ServerError, message
    end

    verify packet, expected_packet_types
  end
end