Поигрался седня ночью с сериализацией/десериализацией, очень удобная штука
http://paste2.org/p/1375139
Допустим есть пакет:
Код:
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
Если например он имеет структуру:
Код:
uint32
uint32
uint32
то XML для него получается что-то типа:
Код:
<Definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Opcode="CMSG_TEST_ACTION">
<Fields xsi:type="Simple" Name="Field1" DataType="UInt32"/>
<Fields xsi:type="Simple" Name="Field2" DataType="UInt32"/>
<Fields xsi:type="Simple" Name="Field3" DataType="UInt32"/>
</Fields>
</Definition>
если например структура:
Код:
uint32
uint32
switch(uint32)
{
case 3:
break;
}
Код:
<Definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Opcode="CMSG_TEST_ACTION">
<Fields xsi:type="Simple" Name="Field1" DataType="UInt32"/>
<Fields xsi:type="Simple" Name="Field2" DataType="UInt32"/>
<Fields xsi:type="Switch" Name="Switch1" DataType="UInt32">
<Fields xsi:type="Case" Name="Case2" DataType="UInt32" CaseValue="3"/>
</Fields>
</Definition>
Код:
for(uint32)
{
uint32
uint32
}
Код:
<Definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Opcode="CMSG_TEST_ACTION">
<Fields xsi:type="DynamicLoop" Name="Loop1" DataType="UInt32">
<Fields xsi:type="Simple" Name="LoopField1" DataType="UInt32"/>
<Fields xsi:type="Simple" Name="LoopField2" DataType="UInt32"/>
</Fields>
</Definition>
Код:
for(1)
{
uint32
uint32
}
Код:
<Definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Opcode="CMSG_TEST_ACTION">
<Fields xsi:type="StaticLoop" Name="Loop1" DataType="UInt32" LoopLength="1">
<Fields xsi:type="Simple" Name="LoopField1" DataType="UInt32"/>
<Fields xsi:type="Simple" Name="LoopField2" DataType="UInt32"/>
</Fields>
</Definition>
Код:
if(uint32 == 1)
{
uint32
uint32
}
Код:
<Definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Opcode="CMSG_TEST_ACTION">
<Fields xsi:type="Condition" Name="Condition1" DataType="UInt32" ConditionType="Equal" ConditionValue="1">
<Fields xsi:type="Simple" Name="ConditionField1" DataType="UInt32"/>
<Fields xsi:type="Simple" Name="ConditionField2" DataType="UInt32"/>
</Fields>
</Definition>