class Docker::Messages

This class represents all the messages either received by chunks from attach

Attributes

all_messages[RW]
buffer[RW]
stderr_messages[RW]
stdout_messages[RW]

Public Class Methods

new(stdout_messages=[], stderr_messages=[], all_messages=[], buffer="") click to toggle source
# File lib/docker/messages.rb, line 6
def initialize(stdout_messages=[],
               stderr_messages=[],
               all_messages=[],
               buffer="")
  @stdout_messages = stdout_messages
  @stderr_messages = stderr_messages
  @all_messages = all_messages
  @buffer = buffer
end

Public Instance Methods

add_message(source, message) click to toggle source
# File lib/docker/messages.rb, line 16
def add_message(source, message)
  case source
  when 1
    stdout_messages << message
  when 2
    stderr_messages << message
  end
  all_messages << message
end
append(messages) click to toggle source
# File lib/docker/messages.rb, line 42
def append(messages)
  @stdout_messages += messages.stdout_messages
  @stderr_messages += messages.stderr_messages
  @all_messages += messages.all_messages
  messages.clear

  @all_messages
end
clear() click to toggle source
# File lib/docker/messages.rb, line 51
def clear
  stdout_messages.clear
  stderr_messages.clear
  all_messages.clear
end
decipher_messages(body) click to toggle source

Method to break apart application/vnd.docker.raw-stream headers

# File lib/docker/messages.rb, line 58
def decipher_messages(body)
  raw_text = buffer + body.dup
  messages = Docker::Messages.new
  while !raw_text.empty?
    messages.get_message(raw_text)
  end

  messages
end
get_message(raw_text) click to toggle source
# File lib/docker/messages.rb, line 26
def get_message(raw_text)
  header = raw_text.slice!(0,8)
  if header.length < 8
    @buffer = header
    return
  end
  type, length = header.unpack("CxxxN")

  message = raw_text.slice!(0,length)
  if message.length < length
    @buffer = header + message
  else
    add_message(type, message)
  end
end