mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-02 10:53:44 +00:00
Staff arm a packet capture on the dashboard; master passes MESSAGE_CAPTURE_CONTROL ARM to every world, auth and chat and arms its own. Each server's PacketCapture tap (dServer receive, and a send hook in RakPeer::Send so replica constructions are seen too) records into one preallocated chunk per server and ships sealed chunks through master on the main loop when capture_flush_bytes or capture_flush_interval_ms is reached; past capture_buffer_max_mb the oldest chunks are dropped and the dashboard records a gap. Nothing is armed: one flag check. - targets: an account (from its login; packets before the login are kept per connection and added once auth or the world knows whose they are), a character (from when it is picked), or everything; up to 8 at once (a bit each in the record mask) - worlds and auth record their clients' packets and the master link messages of a captured player (session keys by name, zone transfers by request, player added/removed, migration); chat finds the player in each packet; master records server traffic for everything - secrets are never recorded: structs that carry them (login request, login response user key, world validation session key, session key messages between servers) are read, blanked and written again before recording; auth keeps only the handshake and login - PacketDecoder: a registry by service and message id names every packet and decodes the registered structs; CaptureBundle is the file format (DLUBNDL1, metadata, records); CaptureTools orders records on one timeline, pulls movement out, makes bundles portable or anonymous and diffs replays - the dashboard keeps packet captures in message_capture_sessions (capture_kind 1) and their packets in a file under capture_dir, one write per batch; arming is audited - MESSAGE_CAPTURE_CONTROL/DATA only gain appended enum values and trailing fields Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
66 lines
2.2 KiB
CMake
66 lines
2.2 KiB
CMake
set(DGAMETEST_SOURCES
|
|
"GameDependencies.cpp"
|
|
"GuildManagerTests.cpp"
|
|
"LUBitStreamTests.cpp"
|
|
"MailIdPinTests.cpp"
|
|
"EconomyLedgerTests.cpp"
|
|
"PlayerReportsLimitTests.cpp"
|
|
"SlashCommandPermissionTests.cpp"
|
|
"StaleSaveGuardTests.cpp"
|
|
"ContrabandTests.cpp"
|
|
"KnockbackTests.cpp"
|
|
"CollisionFilterTests.cpp"
|
|
"MovementBlockerTests.cpp"
|
|
"ItemSetPassiveAbilityTests.cpp"
|
|
"PowerUpStatisticTests.cpp"
|
|
"PlayerStatisticTests.cpp"
|
|
"BrickByBrickTests.cpp"
|
|
"PropertyBuildersTests.cpp"
|
|
"ModularBuildTableTests.cpp"
|
|
"ModularBuildIdMigrationTests.cpp"
|
|
"UgcManifestTests.cpp"
|
|
"SceneGhostingTests.cpp"
|
|
"HolidayEventsTests.cpp"
|
|
"SetCurrencySourceTests.cpp"
|
|
"LootDropPositionTests.cpp"
|
|
"LootActivityCoinsTests.cpp"
|
|
"PreconditionItemCostTests.cpp"
|
|
"SpiderQueenTests.cpp"
|
|
"TacArcTests.cpp"
|
|
"CDFdbTests.cpp"
|
|
"CDFdbBenchmark.cpp"
|
|
)
|
|
|
|
add_subdirectory(dComponentsTests)
|
|
list(APPEND DGAMETEST_SOURCES ${DCOMPONENTS_TESTS})
|
|
|
|
add_subdirectory(dGameMessagesTests)
|
|
list(APPEND DGAMETEST_SOURCES ${DGAMEMESSAGES_TESTS})
|
|
|
|
add_subdirectory(dNetTests)
|
|
list(APPEND DGAMETEST_SOURCES ${DNET_TESTS})
|
|
|
|
file(COPY ${GAMEMESSAGE_TESTBITSTREAMS} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
|
file(COPY ${COMPONENT_TEST_DATA} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
# Add the executable. Remember to add all tests above this!
|
|
add_executable(dGameTests ${DGAMETEST_SOURCES})
|
|
target_include_directories(dGameTests PRIVATE "." "${PROJECT_SOURCE_DIR}/dChatServer" "${PROJECT_SOURCE_DIR}/dScripts")
|
|
# Tests against the live CDClient look for it in the source tree's build folder
|
|
target_compile_definitions(dGameTests PRIVATE PROJECT_SOURCE_DIR="${PROJECT_SOURCE_DIR}")
|
|
|
|
if(APPLE)
|
|
add_custom_target(dGameTestsLink
|
|
${CMAKE_COMMAND} -E copy $<TARGET_FILE:MariaDB::ConnCpp> ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
add_dependencies(dGameTests dGameTestsLink)
|
|
endif()
|
|
|
|
# Local capture fixtures (tests/fixtures-local, never committed) are found from the source folder
|
|
target_compile_definitions(dGameTests PRIVATE DLU_SOURCE_DIR="${PROJECT_SOURCE_DIR}")
|
|
target_link_libraries(dGameTests ${COMMON_LIBRARIES} sqlite3 GTest::gtest_main
|
|
dGame dScripts dPhysics Detour Recast tinyxml2 dWorldServer dZoneManager dChatFilter dChatServer dNavigation bcrypt MD5)
|
|
|
|
# Discover the tests
|
|
gtest_discover_tests(dGameTests)
|