mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-14 12:08:20 +00:00
ChillerDragon
732798444c
The method CSnapShot::DebugDump() used to print just the raw snap items. Without item names or field names: ``` 2024-04-07 09:10:01 I snapshot: data_size=356 num_items=10 2024-04-07 09:10:01 I snapshot: type=0 id=32767 2024-04-07 09:10:01 I snapshot: 0 -1824658838 933dea6a 2024-04-07 09:10:01 I snapshot: 1 -629591830 da7930ea 2024-04-07 09:10:01 I snapshot: 2 -1450210576 a98f8af0 2024-04-07 09:10:01 I snapshot: 3 914991429 3689a945 2024-04-07 09:10:01 I snapshot: type=0 id=32766 2024-04-07 09:10:01 I snapshot: 0 583701389 22ca938d 2024-04-07 09:10:01 I snapshot: 1 327171627 13803e2b 2024-04-07 09:10:01 I snapshot: 2 -1636052395 9e7bd255 2024-04-07 09:10:01 I snapshot: 3 -1901674991 8ea6be11 2024-04-07 09:10:01 I snapshot: type=0 id=32765 2024-04-07 09:10:01 I snapshot: 0 1993229659 76ce455b 2024-04-07 09:10:01 I snapshot: 1 -102024632 f9eb3a48 2024-04-07 09:10:01 I snapshot: 2 -1378361269 add7e04b 2024-04-07 09:10:01 I snapshot: 3 -1810037668 941d045c 2024-04-07 09:10:01 I snapshot: type=6 id=0 2024-04-07 09:10:01 I snapshot: 0 0 00000000 2024-04-07 09:10:01 I snapshot: 1 0 00000000 2024-04-07 09:10:01 I snapshot: 2 0 00000000 2024-04-07 09:10:01 I snapshot: 3 0 00000000 2024-04-07 09:10:01 I snapshot: 4 0 00000000 2024-04-07 09:10:01 I snapshot: 5 0 00000000 2024-04-07 09:10:01 I snapshot: 6 0 00000000 2024-04-07 09:10:01 I snapshot: 7 1 00000001 2024-04-07 09:10:01 I snapshot: type=32767 id=0 2024-04-07 09:10:01 I snapshot: 0 247983155 0ec7ec33 2024-04-07 09:10:01 I snapshot: 1 9 00000009 2024-04-07 09:10:01 I snapshot: 2 64 00000040 2024-04-07 09:10:01 I snapshot: type=11 id=0 2024-04-07 09:10:01 I snapshot: 0 -1008145940 c3e8e9ec 2024-04-07 09:10:01 I snapshot: 1 -320474428 ece5f2c4 2024-04-07 09:10:01 I snapshot: 2 -220076049 f2e1e7ef 2024-04-07 09:10:01 I snapshot: 3 -293568512 ee808000 2024-04-07 09:10:01 I snapshot: 4 -1330727040 b0aeb780 2024-04-07 09:10:01 I snapshot: 5 -2139062144 80808080 2024-04-07 09:10:01 I snapshot: 6 -2139062272 80808000 2024-04-07 09:10:01 I snapshot: 7 64 00000040 2024-04-07 09:10:01 I snapshot: 8 -403511835 e7f2e5e5 2024-04-07 09:10:01 I snapshot: 9 -286001183 eef3f7e1 2024-04-07 09:10:01 I snapshot: 10 -219905920 f2e48080 2024-04-07 09:10:01 I snapshot: 11 -2139062144 80808080 2024-04-07 09:10:01 I snapshot: 12 -2139062144 80808080 2024-04-07 09:10:01 I snapshot: 13 -2139062272 80808000 2024-04-07 09:10:01 I snapshot: 14 0 00000000 2024-04-07 09:10:01 I snapshot: 15 7199301 006dda45 2024-04-07 09:10:01 I snapshot: 16 2345678 0023cace 2024-04-07 09:10:01 I snapshot: type=10 id=0 2024-04-07 09:10:01 I snapshot: 0 1 00000001 2024-04-07 09:10:01 I snapshot: 1 0 00000000 2024-04-07 09:10:01 I snapshot: 2 0 00000000 2024-04-07 09:10:01 I snapshot: 3 -9999 ffffd8f1 2024-04-07 09:10:01 I snapshot: 4 0 00000000 2024-04-07 09:10:01 I snapshot: type=32766 id=0 2024-04-07 09:10:01 I snapshot: 0 1 00000001 2024-04-07 09:10:01 I snapshot: 1 0 00000000 2024-04-07 09:10:01 I snapshot: type=9 id=0 2024-04-07 09:10:01 I snapshot: 0 438 000001b6 2024-04-07 09:10:01 I snapshot: 1 1968 000007b0 2024-04-07 09:10:01 I snapshot: 2 913 00000391 2024-04-07 09:10:01 I snapshot: 3 0 00000000 2024-04-07 09:10:01 I snapshot: 4 0 00000000 2024-04-07 09:10:01 I snapshot: 5 0 00000000 2024-04-07 09:10:01 I snapshot: 6 0 00000000 2024-04-07 09:10:01 I snapshot: 7 0 00000000 2024-04-07 09:10:01 I snapshot: 8 -1 ffffffff 2024-04-07 09:10:01 I snapshot: 9 0 00000000 2024-04-07 09:10:01 I snapshot: 10 0 00000000 2024-04-07 09:10:01 I snapshot: 11 1968 000007b0 2024-04-07 09:10:01 I snapshot: 12 913 00000391 2024-04-07 09:10:01 I snapshot: 13 0 00000000 2024-04-07 09:10:01 I snapshot: 14 0 00000000 2024-04-07 09:10:01 I snapshot: 15 1 00000001 2024-04-07 09:10:01 I snapshot: 16 10 0000000a 2024-04-07 09:10:01 I snapshot: 17 10 0000000a 2024-04-07 09:10:01 I snapshot: 18 0 00000000 2024-04-07 09:10:01 I snapshot: 19 1 00000001 2024-04-07 09:10:01 I snapshot: 20 5 00000005 2024-04-07 09:10:01 I snapshot: 21 0 00000000 2024-04-07 09:10:01 I snapshot: type=32765 id=0 2024-04-07 09:10:01 I snapshot: 0 49152 0000c000 2024-04-07 09:10:01 I snapshot: 1 0 00000000 2024-04-07 09:10:01 I snapshot: 2 2 00000002 2024-04-07 09:10:01 I snapshot: 3 0 00000000 2024-04-07 09:10:01 I snapshot: 4 0 00000000 2024-04-07 09:10:01 I snapshot: 5 0 00000000 2024-04-07 09:10:01 I snapshot: 6 0 00000000 2024-04-07 09:10:01 I snapshot: 7 0 00000000 2024-04-07 09:10:01 I snapshot: 8 1 00000001 2024-04-07 09:10:01 I snapshot: 9 0 00000000 ``` Now there is also `CNetObjHandler::DebugDumpSnapshot(const CSnapshot *pSnap)` which prints the name of the snap item and also the names of all fields: ``` 2024-04-07 09:21:42 I snapshot: data_size=356 num_items=10 2024-04-07 09:21:42 I snapshot: EX/UUID type=0 id=32767 size=16 2024-04-07 09:21:42 I snapshot: 0 -1824658838 933dea6a 2024-04-07 09:21:42 I snapshot: 1 -629591830 da7930ea 2024-04-07 09:21:42 I snapshot: 2 -1450210576 a98f8af0 2024-04-07 09:21:42 I snapshot: 3 914991429 3689a945 2024-04-07 09:21:42 I snapshot: EX/UUID type=0 id=32766 size=16 2024-04-07 09:21:42 I snapshot: 0 583701389 22ca938d 2024-04-07 09:21:42 I snapshot: 1 327171627 13803e2b 2024-04-07 09:21:42 I snapshot: 2 -1636052395 9e7bd255 2024-04-07 09:21:42 I snapshot: 3 -1901674991 8ea6be11 2024-04-07 09:21:42 I snapshot: EX/UUID type=0 id=32765 size=16 2024-04-07 09:21:42 I snapshot: 0 1993229659 76ce455b 2024-04-07 09:21:42 I snapshot: 1 -102024632 f9eb3a48 2024-04-07 09:21:42 I snapshot: 2 -1378361269 add7e04b 2024-04-07 09:21:42 I snapshot: 3 -1810037668 941d045c 2024-04-07 09:21:42 I snapshot: GameInfo type=6 id=0 size=32 2024-04-07 09:21:42 I snapshot: 0 0 00000000 m_GameFlags=0 (min=0 max=256) 2024-04-07 09:21:42 I snapshot: 1 0 00000000 m_GameStateFlags=0 (min=0 max=256) 2024-04-07 09:21:42 I snapshot: 2 0 00000000 m_RoundStartTick=0 (NetTick) 2024-04-07 09:21:42 I snapshot: 3 0 00000000 m_WarmupTimer=0 (min=min_int(-2147483648) max=max_int(2147483647)) 2024-04-07 09:21:42 I snapshot: 4 0 00000000 m_ScoreLimit=0 (min=0 max=max_int(2147483647)) 2024-04-07 09:21:42 I snapshot: 5 0 00000000 m_TimeLimit=0 (min=0 max=max_int(2147483647)) 2024-04-07 09:21:42 I snapshot: 6 0 00000000 m_RoundNum=0 (min=0 max=max_int(2147483647)) 2024-04-07 09:21:42 I snapshot: 7 1 00000001 m_RoundCurrent=1 (min=0 max=max_int(2147483647)) 2024-04-07 09:21:42 I snapshot: (out of range) type=32767 id=0 size=12 2024-04-07 09:21:42 I snapshot: 0 247983155 0ec7ec33 2024-04-07 09:21:42 I snapshot: 1 9 00000009 2024-04-07 09:21:42 I snapshot: 2 64 00000040 2024-04-07 09:21:42 I snapshot: ClientInfo type=11 id=0 size=68 2024-04-07 09:21:42 I snapshot: 0 -1008145940 c3e8e9ec m_Name0=-1008145940 IntsToStr: Chil 2024-04-07 09:21:42 I snapshot: 1 -320474428 ece5f2c4 m_Name1=-320474428 IntsToStr: lerD 2024-04-07 09:21:42 I snapshot: 2 -220076049 f2e1e7ef m_Name2=-220076049 IntsToStr: rago 2024-04-07 09:21:42 I snapshot: 3 -293568512 ee808000 m_Name3=-293568512 IntsToStr: n 2024-04-07 09:21:42 I snapshot: 4 -1330727040 b0aeb780 m_Clan0=-1330727040 IntsToStr: 0.7 2024-04-07 09:21:42 I snapshot: 5 -2139062144 80808080 m_Clan1=-2139062144 IntsToStr: 2024-04-07 09:21:42 I snapshot: 6 -2139062272 80808000 m_Clan2=-2139062272 IntsToStr: 2024-04-07 09:21:42 I snapshot: 7 64 00000040 m_Country=64 2024-04-07 09:21:42 I snapshot: 8 -403511835 e7f2e5e5 m_Skin0=-403511835 IntsToStr: gree 2024-04-07 09:21:42 I snapshot: 9 -286001183 eef3f7e1 m_Skin1=-286001183 IntsToStr: nswa 2024-04-07 09:21:42 I snapshot: 10 -219905920 f2e48080 m_Skin2=-219905920 IntsToStr: rd 2024-04-07 09:21:42 I snapshot: 11 -2139062144 80808080 m_Skin3=-2139062144 IntsToStr: 2024-04-07 09:21:42 I snapshot: 12 -2139062144 80808080 m_Skin4=-2139062144 IntsToStr: 2024-04-07 09:21:42 I snapshot: 13 -2139062272 80808000 m_Skin5=-2139062272 IntsToStr: 2024-04-07 09:21:42 I snapshot: 14 0 00000000 m_UseCustomColor=0 (min=0 max=1) 2024-04-07 09:21:42 I snapshot: 15 7199301 006dda45 m_ColorBody=7199301 2024-04-07 09:21:42 I snapshot: 16 2345678 0023cace m_ColorFeet=2345678 2024-04-07 09:21:42 I snapshot: PlayerInfo type=10 id=0 size=20 2024-04-07 09:21:42 I snapshot: 0 1 00000001 m_Local=1 (min=0 max=1) 2024-04-07 09:21:42 I snapshot: 1 0 00000000 m_ClientId=0 (min=0 max=MAX_CLIENTS-1(63)) 2024-04-07 09:21:42 I snapshot: 2 0 00000000 m_Team=0 (min=TEAM_SPECTATORS(-1) max=TEAM_BLUE(1)) 2024-04-07 09:21:42 I snapshot: 3 -9999 ffffd8f1 m_Score=-9999 2024-04-07 09:21:42 I snapshot: 4 0 00000000 m_Latency=0 2024-04-07 09:21:42 I snapshot: (out of range) type=32766 id=0 size=8 2024-04-07 09:21:42 I snapshot: 0 1 00000001 2024-04-07 09:21:42 I snapshot: 1 0 00000000 2024-04-07 09:21:42 I snapshot: Character type=9 id=0 size=88 2024-04-07 09:21:42 I snapshot: 0 176 000000b0 m_Tick=176 2024-04-07 09:21:42 I snapshot: 1 1968 000007b0 m_X=1968 2024-04-07 09:21:42 I snapshot: 2 913 00000391 m_Y=913 2024-04-07 09:21:42 I snapshot: 3 0 00000000 m_VelX=0 2024-04-07 09:21:42 I snapshot: 4 0 00000000 m_VelY=0 2024-04-07 09:21:42 I snapshot: 5 0 00000000 m_Angle=0 2024-04-07 09:21:42 I snapshot: 6 0 00000000 m_Direction=0 (min=-1 max=1) 2024-04-07 09:21:42 I snapshot: 7 0 00000000 m_Jumped=0 (min=0 max=3) 2024-04-07 09:21:42 I snapshot: 8 -1 ffffffff m_HookedPlayer=-1 (min=-1 max=MAX_CLIENTS-1(63)) 2024-04-07 09:21:42 I snapshot: 9 0 00000000 m_HookState=0 (min=-1 max=5) 2024-04-07 09:21:42 I snapshot: 10 0 00000000 m_HookTick=0 (NetTick) 2024-04-07 09:21:42 I snapshot: 11 1968 000007b0 m_HookX=1968 2024-04-07 09:21:42 I snapshot: 12 913 00000391 m_HookY=913 2024-04-07 09:21:42 I snapshot: 13 0 00000000 m_HookDx=0 2024-04-07 09:21:42 I snapshot: 14 0 00000000 m_HookDy=0 2024-04-07 09:21:42 I snapshot: 15 1 00000001 m_PlayerFlags=1 (min=0 max=256) 2024-04-07 09:21:42 I snapshot: 16 10 0000000a m_Health=10 (min=0 max=10) 2024-04-07 09:21:42 I snapshot: 17 10 0000000a m_Armor=10 (min=0 max=10) 2024-04-07 09:21:42 I snapshot: 18 0 00000000 m_AmmoCount=0 (min=0 max=10) 2024-04-07 09:21:42 I snapshot: 19 1 00000001 m_Weapon=1 (min=0 max=NUM_WEAPONS-1(5)) 2024-04-07 09:21:42 I snapshot: 20 5 00000005 m_Emote=5 (min=0 max=6) 2024-04-07 09:21:42 I snapshot: 21 0 00000000 m_AttackTick=0 (min=0 max=max_int(2147483647)) 2024-04-07 09:21:42 I snapshot: (out of range) type=32765 id=0 size=40 2024-04-07 09:21:42 I snapshot: 0 49152 0000c000 2024-04-07 09:21:42 I snapshot: 1 0 00000000 2024-04-07 09:21:42 I snapshot: 2 2 00000002 2024-04-07 09:21:42 I snapshot: 3 0 00000000 2024-04-07 09:21:42 I snapshot: 4 0 00000000 2024-04-07 09:21:42 I snapshot: 5 0 00000000 2024-04-07 09:21:42 I snapshot: 6 0 00000000 2024-04-07 09:21:42 I snapshot: 7 0 00000000 2024-04-07 09:21:42 I snapshot: 8 1 00000001 2024-04-07 09:21:42 I snapshot: 9 0 00000000 ```
361 lines
10 KiB
Python
361 lines
10 KiB
Python
import sys
|
|
from .datatypes import EmitDefinition
|
|
from . import content # pylint: disable=no-name-in-module
|
|
from . import network # pylint: disable=no-name-in-module
|
|
|
|
def create_enum_table(names, num):
|
|
lines = []
|
|
lines += ["enum", "{"]
|
|
lines += [f"\t{names[0]}=0,"]
|
|
for name in names[1:]:
|
|
lines += [f"\t{name},"]
|
|
lines += [f"\t{num}", "};"]
|
|
return lines
|
|
|
|
def create_flags_table(names):
|
|
lines = []
|
|
lines += ["enum", "{"]
|
|
i = 0
|
|
for name in names:
|
|
lines += [f"\t{name} = 1<<{int(i)},"]
|
|
i += 1
|
|
lines += ["};"]
|
|
return lines
|
|
|
|
def EmitEnum(names, num):
|
|
print("enum")
|
|
print("{")
|
|
print(f"\t{names[0]}=0,")
|
|
for name in names[1:]:
|
|
print(f"\t{name},")
|
|
print(f"\t{num}")
|
|
print("};")
|
|
|
|
def EmitFlags(names):
|
|
print("enum")
|
|
print("{")
|
|
i = 0
|
|
for name in names:
|
|
print(f"\t{name} = 1<<{int(i)},")
|
|
i += 1
|
|
print("};")
|
|
|
|
def main():
|
|
gen_network_header = "network_header" in sys.argv
|
|
gen_network_source = "network_source" in sys.argv
|
|
gen_client_content_header = "client_content_header" in sys.argv
|
|
gen_client_content_source = "client_content_source" in sys.argv
|
|
gen_server_content_header = "server_content_header" in sys.argv
|
|
gen_server_content_source = "server_content_source" in sys.argv
|
|
|
|
if gen_client_content_header:
|
|
print("#ifndef CLIENT_CONTENT7_HEADER")
|
|
print("#define CLIENT_CONTENT7_HEADER")
|
|
|
|
if gen_server_content_header:
|
|
print("#ifndef SERVER_CONTENT7_HEADER")
|
|
print("#define SERVER_CONTENT7_HEADER")
|
|
|
|
|
|
if gen_client_content_header or gen_server_content_header:
|
|
# print some includes
|
|
print('#include <engine/graphics.h>')
|
|
print('#include "data_types.h"')
|
|
print("namespace client_data7 {")
|
|
|
|
# the container pointer
|
|
print('extern CDataContainer *g_pData;')
|
|
|
|
# enums
|
|
EmitEnum([f"IMAGE_{i.name.value.upper()}" for i in content.container.images.items], "NUM_IMAGES")
|
|
EmitEnum([f"ANIM_{i.name.value.upper()}" for i in content.container.animations.items], "NUM_ANIMS")
|
|
EmitEnum([f"SPRITE_{i.name.value.upper()}" for i in content.container.sprites.items], "NUM_SPRITES")
|
|
|
|
if gen_client_content_source or gen_server_content_source:
|
|
if gen_client_content_source:
|
|
print('#include "client_data7.h"')
|
|
if gen_server_content_source:
|
|
print('#include "server_data.h"')
|
|
print("namespace client_data7 {")
|
|
EmitDefinition(content.container, "datacontainer")
|
|
print('CDataContainer *g_pData = &datacontainer;')
|
|
print("}")
|
|
|
|
# NETWORK
|
|
if gen_network_header:
|
|
|
|
print("#ifndef GAME_GENERATED_PROTOCOL7_H")
|
|
print("#define GAME_GENERATED_PROTOCOL7_H")
|
|
print("class CUnpacker;")
|
|
print("class CSnapshot;")
|
|
print("#include <engine/message.h>")
|
|
print("namespace protocol7 {")
|
|
print(network.RawHeader)
|
|
|
|
for e in network.Enums:
|
|
for l in create_enum_table([f"{e.name}_{v}" for v in e.values], f'NUM_{e.name}S'):
|
|
print(l)
|
|
print("")
|
|
|
|
for e in network.Flags:
|
|
for l in create_flags_table([f"{e.name}_{v}" for v in e.values]):
|
|
print(l)
|
|
print("")
|
|
|
|
for l in create_enum_table(["NETOBJ_INVALID"]+[o.enum_name for o in network.Objects], "NUM_NETOBJTYPES"):
|
|
print(l)
|
|
print("")
|
|
for l in create_enum_table(["NETMSG_INVALID"]+[o.enum_name for o in network.Messages], "NUM_NETMSGTYPES"):
|
|
print(l)
|
|
print("")
|
|
|
|
print("""
|
|
template<typename... Ts> struct make_void { typedef void type;};
|
|
template<typename... Ts> using void_t = typename make_void<Ts...>::type;
|
|
|
|
template<typename T, typename = void>
|
|
struct is_sixup {
|
|
constexpr static bool value = false;
|
|
};
|
|
|
|
template<typename T>
|
|
struct is_sixup<T, void_t<typename T::is_sixup>> {
|
|
constexpr static bool value = true;
|
|
};
|
|
""")
|
|
|
|
for item in network.Objects + network.Messages:
|
|
for line in item.emit_declaration():
|
|
print(line)
|
|
print("")
|
|
|
|
EmitEnum([f"SOUND_{i.name.value.upper()}" for i in content.container.sounds.items], "NUM_SOUNDS")
|
|
EmitEnum([f"WEAPON_{i.name.value.upper()}" for i in content.container.weapons.id.items], "NUM_WEAPONS")
|
|
|
|
print("""
|
|
|
|
class CNetObjHandler
|
|
{
|
|
const char *m_pMsgFailedOn;
|
|
char m_aMsgData[1024];
|
|
const char *m_pObjFailedOn;
|
|
int m_NumObjFailures;
|
|
bool CheckInt(const char *pErrorMsg, int Value, int Min, int Max);
|
|
bool CheckFlag(const char *pErrorMsg, int Value, int Mask);
|
|
|
|
static const char *ms_apObjNames[];
|
|
static int ms_aObjSizes[];
|
|
static const char *ms_apMsgNames[];
|
|
|
|
public:
|
|
CNetObjHandler();
|
|
|
|
int ValidateObj(int Type, const void *pData, int Size);
|
|
void DebugDumpSnapshot(const CSnapshot *pSnap) const;
|
|
int DumpObj(int Type, const void *pData, int Size) const;
|
|
const char *GetObjName(int Type) const;
|
|
int GetObjSize(int Type) const;
|
|
const char *FailedObjOn() const;
|
|
int NumObjFailures() const;
|
|
|
|
const char *GetMsgName(int Type) const;
|
|
void *SecureUnpackMsg(int Type, CUnpacker *pUnpacker);
|
|
const char *FailedMsgOn() const;
|
|
};
|
|
|
|
""")
|
|
|
|
print("}")
|
|
print("#endif // GAME_GENERATED_PROTOCOL7_H")
|
|
|
|
|
|
if gen_network_source:
|
|
# create names
|
|
lines = []
|
|
|
|
lines += ['#include "protocol7.h"']
|
|
lines += ['#include <base/system.h>']
|
|
lines += ['#include <engine/shared/packer.h>']
|
|
lines += ['#include <engine/shared/protocol.h>']
|
|
lines += ['#include <engine/shared/snapshot.h>']
|
|
|
|
lines += ['namespace protocol7 {']
|
|
|
|
lines += ['CNetObjHandler::CNetObjHandler()']
|
|
lines += ['{']
|
|
lines += ['\tm_pMsgFailedOn = "";']
|
|
lines += ['\tm_pObjFailedOn = "";']
|
|
lines += ['\tm_NumObjFailures = 0;']
|
|
lines += ['}']
|
|
lines += ['']
|
|
lines += ['const char *CNetObjHandler::FailedObjOn() const { return m_pObjFailedOn; }']
|
|
lines += ['int CNetObjHandler::NumObjFailures() const { return m_NumObjFailures; }']
|
|
lines += ['const char *CNetObjHandler::FailedMsgOn() const { return m_pMsgFailedOn; }']
|
|
lines += ['']
|
|
lines += ['']
|
|
lines += ['']
|
|
lines += ['']
|
|
|
|
lines += ['static const int max_int = 0x7fffffff;']
|
|
lines += ['']
|
|
|
|
lines += ['bool CNetObjHandler::CheckInt(const char *pErrorMsg, int Value, int Min, int Max)']
|
|
lines += ['{']
|
|
lines += ['\tif(Value < Min || Value > Max) { m_pObjFailedOn = pErrorMsg; m_NumObjFailures++; return false; }']
|
|
lines += ['\treturn true;']
|
|
lines += ['}']
|
|
lines += ['']
|
|
|
|
lines += ['bool CNetObjHandler::CheckFlag(const char *pErrorMsg, int Value, int Mask)']
|
|
lines += ['{']
|
|
lines += ['\tif((Value&Mask) != Value) { m_pObjFailedOn = pErrorMsg; m_NumObjFailures++; return false; }']
|
|
lines += ['\treturn true;']
|
|
lines += ['}']
|
|
lines += ['']
|
|
|
|
lines += ["const char *CNetObjHandler::ms_apObjNames[] = {"]
|
|
lines += ['\t"invalid",']
|
|
lines += [f'\t"{o.name}",' for o in network.Objects]
|
|
lines += ['\t""', "};", ""]
|
|
|
|
lines += ["int CNetObjHandler::ms_aObjSizes[] = {"]
|
|
lines += ['\t0,']
|
|
lines += [f'\tsizeof({o.struct_name}),' for o in network.Objects]
|
|
lines += ['\t0', "};", ""]
|
|
|
|
|
|
lines += ['const char *CNetObjHandler::ms_apMsgNames[] = {']
|
|
lines += ['\t"invalid",']
|
|
for msg in network.Messages:
|
|
lines += [f'\t"{msg.name}",']
|
|
lines += ['\t""']
|
|
lines += ['};']
|
|
lines += ['']
|
|
|
|
lines += ['const char *CNetObjHandler::GetObjName(int Type) const']
|
|
lines += ['{']
|
|
lines += ['\tif(Type < 0 || Type >= NUM_NETOBJTYPES) return "(out of range)";']
|
|
lines += ['\treturn ms_apObjNames[Type];']
|
|
lines += ['};']
|
|
lines += ['']
|
|
|
|
lines += ['int CNetObjHandler::GetObjSize(int Type) const']
|
|
lines += ['{']
|
|
lines += ['\tif(Type < 0 || Type >= NUM_NETOBJTYPES) return 0;']
|
|
lines += ['\treturn ms_aObjSizes[Type];']
|
|
lines += ['};']
|
|
lines += ['']
|
|
|
|
|
|
lines += ['const char *CNetObjHandler::GetMsgName(int Type) const']
|
|
lines += ['{']
|
|
lines += ['\tif(Type < 0 || Type >= NUM_NETMSGTYPES) return "(out of range)";']
|
|
lines += ['\treturn ms_apMsgNames[Type];']
|
|
lines += ['};']
|
|
lines += ['']
|
|
|
|
|
|
for l in lines:
|
|
print(l)
|
|
|
|
lines = []
|
|
lines += ['int CNetObjHandler::ValidateObj(int Type, const void *pData, int Size)']
|
|
lines += ['{']
|
|
lines += ['\tswitch(Type)']
|
|
lines += ['\t{']
|
|
|
|
for item in network.Objects:
|
|
for line in item.emit_validate(network.Objects):
|
|
lines += ["\t" + line]
|
|
lines += ['\t']
|
|
lines += ['\t}']
|
|
lines += ['\treturn -1;']
|
|
lines += ['};']
|
|
lines += ['']
|
|
|
|
for l in lines:
|
|
print(l)
|
|
|
|
print("""\
|
|
void CNetObjHandler::DebugDumpSnapshot(const ::CSnapshot *pSnap) const
|
|
{
|
|
dbg_msg("snapshot", "data_size=%d num_items=%d", pSnap->DataSize(), pSnap->NumItems());
|
|
for(int i = 0; i < pSnap->NumItems(); i++)
|
|
{
|
|
const CSnapshotItem *pItem = pSnap->GetItem(i);
|
|
int Size = pSnap->GetItemSize(i);
|
|
int Type = pSnap->GetItemType(i);
|
|
const char *pName = GetObjName(pItem->Type());
|
|
if(Type > OFFSET_UUID && Type < g_UuidManager.NumUuids() + OFFSET_UUID)
|
|
pName = g_UuidManager.GetName(Type);
|
|
dbg_msg("snapshot", "\\t%s type=%d id=%d size=%d", pName, pItem->Type(), pItem->Id(), Size);
|
|
if(!DumpObj(Type, pItem->Data(), Size))
|
|
continue;
|
|
|
|
for(size_t b = 0; b < Size / sizeof(int32_t); b++)
|
|
dbg_msg("snapshot", "\\t\\t%3d %12d\\t%08x", (int)b, pItem->Data()[b], pItem->Data()[b]);
|
|
}
|
|
}\n""")
|
|
|
|
lines = []
|
|
lines += ['int CNetObjHandler::DumpObj(int Type, const void *pData, int Size) const']
|
|
lines += ['{']
|
|
lines += ["\tchar aRawData[512];"]
|
|
lines += ['\tswitch(Type)']
|
|
lines += ['\t{']
|
|
|
|
for item in network.Objects:
|
|
for line in item.emit_dump(network.Objects):
|
|
lines += ["\t" + line]
|
|
lines += ['\t']
|
|
lines += ['\t}']
|
|
lines += ['\treturn -1;']
|
|
lines += ['};']
|
|
lines += ['']
|
|
|
|
lines += ['void *CNetObjHandler::SecureUnpackMsg(int Type, CUnpacker *pUnpacker)']
|
|
lines += ['{']
|
|
lines += ['\tm_pMsgFailedOn = 0;']
|
|
lines += ['\tm_pObjFailedOn = 0;']
|
|
lines += ['\tswitch(Type)']
|
|
lines += ['\t{']
|
|
|
|
|
|
for item in network.Messages:
|
|
for line in item.emit_unpack():
|
|
lines += ["\t" + line]
|
|
lines += ['\t']
|
|
|
|
lines += ['\tdefault:']
|
|
lines += ['\t\tm_pMsgFailedOn = "(type out of range)";']
|
|
lines += ['\t\tbreak;']
|
|
lines += ['\t}']
|
|
lines += ['\t']
|
|
lines += ['\tif(pUnpacker->Error())']
|
|
lines += ['\t\tm_pMsgFailedOn = "(unpack error)";']
|
|
lines += ['\t']
|
|
lines += ['\tif(m_pMsgFailedOn || m_pObjFailedOn) {']
|
|
lines += ['\t\tif(!m_pMsgFailedOn)']
|
|
lines += ['\t\t\tm_pMsgFailedOn = "";']
|
|
lines += ['\t\tif(!m_pObjFailedOn)']
|
|
lines += ['\t\t\tm_pObjFailedOn = "";']
|
|
lines += ['\t\treturn 0;']
|
|
lines += ['\t}']
|
|
lines += ['\tm_pMsgFailedOn = "";']
|
|
lines += ['\tm_pObjFailedOn = "";']
|
|
lines += ['\treturn m_aMsgData;']
|
|
lines += ['};']
|
|
lines += ['}']
|
|
lines += ['']
|
|
|
|
|
|
for l in lines:
|
|
print(l)
|
|
|
|
if gen_client_content_header or gen_server_content_header:
|
|
print("}")
|
|
print("#endif")
|
|
|
|
if __name__ == '__main__':
|
|
main()
|