class Strum::Server::Packet::Template

A Generic Packet object.

Constants

Data

A structure for the internals of our Packet.

Public Class Methods

new(data = {op_code: 0, size: -1, headless: false}) click to toggle source

Creates a new Packet object

# File lib/strum/server/packet/template.rb, line 20
def initialize(data = {op_code: 0, size: -1, headless: false})
  self[:Buffer] = Async::IO::Buffer.new
  self[:Data] = Data.new(
      data[:headless] ? false : Header.new(op_code: data[:op_code], size: data[:size]),
      Payload.new(data[:data] ? data[:data] : nil),
      data[:Terminator] ? Terminator.new(data[:Terminator]) : nil)
end

Public Instance Methods

build() click to toggle source

Builds this Packet object.

# File lib/strum/server/packet/template.rb, line 30
def build
  validate
  ## Add the Header
  unless self[:Data][:Header] == false
    if self[:Data][:Header][:PacketSize].positive?
      self[:Buffer] << self[:Data][:Header].build(:Byte)
    else
      self[:Buffer] << self[:Data][:Header].build(:Short)
    end
  end

  ## Add the Payload
  self[:Buffer] << self[:Data][:Payload].build

  ## Add the Terminator
  unless self[:Data][:Terminator].nil?
    self[:Buffer] << self[:Data][:Terminator][:Buffer].force_encoding(Encoding::BINARY)
  end

  ## Return buffer
  self[:Buffer]
end
validate() click to toggle source

Validates this packet before building.

# File lib/strum/server/packet/template.rb, line 55
def validate
  unless self[:Data][:Header] == false
    raise Strum::Errors::PacketSizeConflict.new(self) if self[:Data][:Payload][:Buffer].size != self[:Data][:Header][:PacketSize]
  end
  raise Strum::Errors::ClosedGenericBuild if closed?
end
w!(template_part, &block)
Alias for: write
write(template_part, &block) click to toggle source

Writes data to this Packet's buffer.

# File lib/strum/server/packet/template.rb, line 64
def write(template_part, &block)
  if block_given?
    if template_part
      raise Strum::Errors::InvalidTemplatePart.new(template_part) unless [:Header, :Payload, :Terminator].include?(template_part)

      block.call(self[:Data][template_part])
    else
      block.call(self)
    end
  else
    raise Strum::Errors::NilWriteBlock
  end
end
Also aliased as: w!