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
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!