module Takumi::Packet
Constants
- VERSION
Public Instance Methods
decode(packet_type, packet)
click to toggle source
# File lib/takumi/packet.rb, line 7 def decode(packet_type, packet) packet_size, read = Packet::Varint.decode(packet) packet = packet[read, packet_size] fields = {} packet_type.fields.each do |field| case field[:type] when :varint data, read = ::Takumi::Packet::Varint.decode(packet) when :string data, read = ::Takumi::Packet::String.decode(packet) when :ushort data, read = ::Takumi::Packet::Ushort.decode(packet) else raise ::Takumi::Packet::UnknownField, field.inspect end fields[field[:name]] = data packet = packet[read..-1] end fields end
encode(packet_type, object)
click to toggle source
# File lib/takumi/packet.rb, line 29 def encode(packet_type, object) packet = "".encode(Encoding::BINARY) packet_type.fields.each do |field| val = object.send(field[:name]) case field[:type] when :varint packet << ::Takumi::Packet::Varint.new(val).to_s when :string packet << ::Takumi::Packet::String.new(val).to_s when :ushort packet << ::Takumi::Packet::Ushort.new(val).to_s else raise ::Takumi::Packet::UnknownField, field.inspect end end size = ::Takumi::Packet::Varint.new(packet.size).to_s size + packet end