Files
DarkflameServer/dDashboardServer/routes/CMakeLists.txt
Aaron Kimbrell 17689cd663 feat: build a zone's 3D data on worker threads
Opening a zone the first time built its terrain, scene objects and manifests
and ran ImageMagick on the web thread, stalling the dashboard for seconds.

- Workers: the shared pool plus Workers::Reply (answer at once when built,
  else from a worker via Web::Defer).
- terrain_chunks/terrain_layers/scene/paths/scenery/flairs (world3d, property
  and showcase routes) and terrain textures go through it; results are built
  once in OnceCaches, the .raw is read once per zone for chunks, layers and
  flairs, deflated bodies are cached thread-safely.
- ImageMagick conversions are deduplicated and written under a temporary name.
- Workers don't query the CDClient, read settings or call mongoose: ZoneTable,
  render components, flairs, object names, LOT kinds and terrain texture names
  are read at startup; client_location is read once; base64 is plain C++.
- Logger writes one line at a time (mutex; localtime's buffer is shared).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 22:30:51 -05:00

95 lines
2.7 KiB
CMake

set(DASHBOARDROUTES_SOURCES
"APIRoutes.cpp"
"StaticRoutes.cpp"
"DashboardRoutes.cpp"
"WSRoutes.cpp"
"AuthRoutes.cpp"
"RouteUtils.cpp"
"PlayerActions.cpp"
"AccountRoutes.cpp"
"ClientAssets.cpp"
"MaintenanceRoutes.cpp"
"ReportRoutes.cpp"
"EconomyPlaces.cpp"
"SecurityRoutes.cpp"
"WebhookRoutes.cpp"
"EconomyJobs.cpp"
"LiveWorld.cpp"
"SettingsRoutes.cpp"
"Background.cpp"
"Scheduler.cpp"
"SettingsCatalog.cpp"
"BackupRoutes.cpp"
"BackupFiles.cpp"
"ReportViews.cpp"
"CharacterTools.cpp"
"CharacterRestore.cpp"
"MissionTools.cpp"
"CharacterProgress.cpp"
"ServerRoutes.cpp"
"LeaderboardRoutes.cpp"
"VanityRoutes.cpp"
"ChatRoutes.cpp"
"Strikes.cpp"
"Inspector.cpp"
"CDClientBrowser.cpp"
"SettingsHistory.cpp"
"Announcements.cpp"
"EventsCalendar.cpp"
"LiveEventRoutes.cpp"
"ChallengeRoutes.cpp"
"InstanceLoad.cpp"
"WorldView.cpp"
"NifFile.cpp"
"Scenery.cpp"
"WorkerPool.cpp"
"Workers.cpp"
"AccountModeration.cpp"
"ModerationTools.cpp"
"ModeratorHelper.cpp"
"../ai/ClaudeClient.cpp"
"../ai/ModeratorPrompt.cpp"
"PublicRoutes.cpp"
"Showcase.cpp"
"FeaturedProperties.cpp"
"PasswordRecovery.cpp"
"PrometheusMetrics.cpp"
"../email/SmtpClient.cpp"
"../email/EmailService.cpp"
"../email/OAuth2.cpp"
"../notify/WebhookFormat.cpp"
"../notify/Alerts.cpp"
# Shared with the world servers, which add items and models the same way
"${PROJECT_SOURCE_DIR}/dGame/dUtilities/ObjectIDManager.cpp"
)
add_library(DashboardRoutes STATIC ${DASHBOARDROUTES_SOURCES})
target_include_directories(DashboardRoutes PRIVATE
"${PROJECT_SOURCE_DIR}/dCommon"
"${PROJECT_SOURCE_DIR}/dCommon/dClient"
"${PROJECT_SOURCE_DIR}/dCommon/dEnums"
"${PROJECT_SOURCE_DIR}/dDatabase"
"${PROJECT_SOURCE_DIR}/dDatabase/CDClientDatabase"
"${PROJECT_SOURCE_DIR}/dDatabase/CDClientDatabase/CDClientTables"
"${PROJECT_SOURCE_DIR}/dDatabase/GameDatabase"
"${PROJECT_SOURCE_DIR}/dDatabase/GameDatabase/ITables"
"${PROJECT_SOURCE_DIR}/dDatabase/GameDatabase/MySQL"
"${PROJECT_SOURCE_DIR}/dNet"
"${PROJECT_SOURCE_DIR}/dWeb"
"${PROJECT_SOURCE_DIR}/dServer"
"${PROJECT_SOURCE_DIR}/thirdparty"
"${PROJECT_SOURCE_DIR}/thirdparty/nlohmann"
"${PROJECT_SOURCE_DIR}/thirdparty/libbcrypt/include"
"${PROJECT_SOURCE_DIR}/dDashboardServer/auth"
"${PROJECT_SOURCE_DIR}/dDashboardServer/routes"
"${PROJECT_SOURCE_DIR}/dDashboardServer/email"
"${PROJECT_SOURCE_DIR}/dDashboardServer/notify"
"${PROJECT_SOURCE_DIR}/dDashboardServer/ai"
"${PROJECT_SOURCE_DIR}/dChatFilter" # word rules for the chat filter page
"${PROJECT_SOURCE_DIR}/dGame/dUtilities" # ObjectIDManager.h
)
target_compile_definitions(DashboardRoutes PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"")
target_link_libraries(DashboardRoutes PRIVATE ${COMMON_LIBRARIES} dWeb dServer sqlite3 OpenSSL::Crypto CURL::libcurl)