Показать сообщение отдельно
Старый 21.04.2011, 07:05   #31
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Поигрался седня ночью с сериализацией/десериализацией, очень удобная штука

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>

Последний раз редактировалось TOM_RUS; 21.04.2011 в 07:17.
TOM_RUS вне форума   Ответить с цитированием