#!/usr/bin/env php #include CPP; // Generate enum $header .= "enum class MessageType : uint8_t {\n"; // Sort keys for consistent output $names = array_keys($packets['opcodes']); sort($names); foreach ($names as $i => $name) { $packet = $packets['opcodes'][$name]; $header .= sprintf(" %s = %s", $name, $packet['id']); if ($i < count($names) - 1) { $header .= ","; } $header .= "\n"; } $header .= "};\n\n"; // Generate packet structures $header .= "// Packet structure definitions\n"; $header .= "namespace Packets {\n\n"; foreach ($names as $name) { $packet = $packets['opcodes'][$name]; if (!empty($packet['fields'])) { $header .= sprintf("struct %s {\n", $name); $header .= sprintf(" static constexpr MessageType TYPE = MessageType::%s;\n", $name); foreach ($packet['fields'] as $field) { $cpp_type = ''; switch ($field['type']) { case 'string': $cpp_type = 'std::string'; break; case 'uint8': $cpp_type = 'uint8_t'; break; case 'uint32': $cpp_type = 'uint32_t'; break; case 'float32': $cpp_type = 'float'; break; case 'array': $header .= sprintf(" // Array field: %s - requires custom handling\n", $field['name']); continue 2; } $header .= sprintf(" %s %s;\n", $cpp_type, $field['name']); } $header .= "};\n\n"; } } $header .= "} // namespace Packets\n"; return $header; } /** * Generate Go file with packet definitions */ function generate_go_file($packets) { $go_file = <<getMessage() . "\n"; exit(1); }