class Lightstreamer::SendMessageOutcomeMessage

Helper class used by {Session} in order to parse incoming overflow send message outcome messages.

@private

Attributes

error[RW]

If an error occurred processing the message then it will be set here.

@return [LightstreamerError, nil]

numbers[RW]

The message number(s) this message outcome is for. There will always be exactly one entry in this array except in the case where {#error} is a {Errors::MessagesSkippedByTimeoutError} in which case there may be more than one entry if multiple messages were skipped.

@return [Array<Fixnum>]

sequence[RW]

The name of the sequence this message outcome is for.

@return [String]

Public Class Methods

parse(line) click to toggle source

Attempts to parses the specified line as a message outcome message and returns an instance of {SendMessageOutcomeMessage} on success, or `nil` on failure.

# File lib/lightstreamer/messages/send_message_outcome_message.rb, line 26
def parse(line)
  match = line.match Regexp.new '^MSG,([A-Za-z0-9_]+),(\d*),(?:DONE|ERR,(\d*),(.*))$'
  return unless match

  message = new

  message.sequence = match.captures[0]
  message.numbers = [match.captures[1].to_i]
  handle_error_outcome message, match.captures if match.captures.compact.size == 4

  message
end

Private Class Methods

handle_error_outcome(message, captures) click to toggle source
# File lib/lightstreamer/messages/send_message_outcome_message.rb, line 41
def handle_error_outcome(message, captures)
  message.error = LightstreamerError.build captures[3], captures[2]

  return unless captures[2].to_i == 39

  last_number = message.numbers[0]
  first_number = last_number - captures[3].to_i + 1

  message.numbers = Array(first_number..last_number)
end