Start working on ddnet snap items
This commit is contained in:
parent
90a9b0fc39
commit
353059a47a
|
@ -28,11 +28,38 @@ class Snapshot
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class DDNetSnapItem
|
||||||
|
attr_accessor :notes, :name
|
||||||
|
|
||||||
|
def initialize(u, _id)
|
||||||
|
@name = 'ddnet_uuid'
|
||||||
|
@notes = []
|
||||||
|
len = u.get_int
|
||||||
|
p = u.parsed.last
|
||||||
|
@notes.push([:green, p[:pos], p[:len], "len=#{len}"])
|
||||||
|
(0...len).each do |i|
|
||||||
|
val = u.get_int
|
||||||
|
p = u.parsed.last
|
||||||
|
col = (i % 2).zero? ? :bg_pink : :bg_yellow
|
||||||
|
@notes.push([col, p[:pos], p[:len], "val=#{val}"])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class SnapshotUnpacker
|
class SnapshotUnpacker
|
||||||
def initialize(client)
|
def initialize(client)
|
||||||
@client = client
|
@client = client
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def unpack_ddnet_item(u, notes)
|
||||||
|
id = u.get_int
|
||||||
|
p = u.parsed.last
|
||||||
|
notes.push([:cyan, p[:pos], p[:len], "id=#{id}"])
|
||||||
|
return nil if id < 0x4000 # ddnet offset uuid type
|
||||||
|
|
||||||
|
DDNetSnapItem.new(u, id)
|
||||||
|
end
|
||||||
|
|
||||||
def snap_single(chunk)
|
def snap_single(chunk)
|
||||||
u = Unpacker.new(chunk.data)
|
u = Unpacker.new(chunk.data)
|
||||||
msg_id = u.get_int
|
msg_id = u.get_int
|
||||||
|
@ -162,6 +189,7 @@ class SnapshotUnpacker
|
||||||
elsif @verbose
|
elsif @verbose
|
||||||
puts "no match #{item_type}"
|
puts "no match #{item_type}"
|
||||||
end
|
end
|
||||||
|
obj = unpack_ddnet_item(u, notes) if !obj && item_type.zero?
|
||||||
if obj
|
if obj
|
||||||
snap_items.push(obj)
|
snap_items.push(obj)
|
||||||
notes += obj.notes
|
notes += obj.notes
|
||||||
|
|
Loading…
Reference in a new issue