Sha256: 243958b8491d2a90fbf2101a4886bf84bf3cdc17a0854bcd7e99332fbd954599

Contents?: true

Size: 852 Bytes

Versions: 1

Compression:

Stored size: 852 Bytes

Contents

module Kamerling class Message
  UnknownType = Class.new RuntimeError

  def self.[] client: req(:client), payload: req(:payload),
              project: req(:project), task: req(:task), type: req(:type)
    new "#{type}\0\0\0\0\0\0\0\0\0\0\0\0" + UUID.bin(client.uuid) +
      UUID.bin(project.uuid) + UUID.bin(task.uuid) + payload
  end

  def initialize raw
    @raw = raw
    type = raw[0..3]
    known_types = %w(DATA PING RGST RSLT)
    fail UnknownType, type unless known_types.include? type or type.empty?
  end

  def == other
    raw == other.raw
  end

  def client_uuid
    UUID[raw[16..31]]
  end

  def payload
    raw[64..-1]
  end

  def project_uuid
    UUID[raw[32..47]]
  end

  def task_uuid
    UUID[raw[48..63]]
  end

  def to_s
    raw
  end

  def type
    raw[0..3].to_sym
  end

  attr_reader :raw
  private     :raw
end end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kamerling-0.0.2 lib/kamerling/message.rb