Files
DarkflameServer/dDashboardServer/routes/CMakeLists.txt
Aaron Kimbrell 23e803280f feat: convert 3D scenery models on worker threads with deferred replies
The dashboard's web server answers one request at a time, so converting a big
.nif (glom files up to tens of MB) held up every other request, flairs included.

- dWeb: Web::Defer hands a request to another thread; the reply is sent from the
  web thread on its next poll (DeferredQueue). A client that leaves first cancels
  it and the late reply is dropped. The synchronous route API is unchanged.
- Web::Shutdown closes connections while the state their close events touch is
  still alive; the destructor no longer runs handlers during static destruction
  (stopping the dashboard aborted in ~WSClient).
- WorkerPool: priority lanes, with one thread only for urgent work (flairs,
  small models, textures), and limited background work.
- Scenery: mesh and texture routes (and the showcase's) convert on the pool;
  thread-safe memory and disk caches, one conversion per model at a time with
  waiters sharing it; zones are converted ahead onto the disk cache while viewed.
- Setting scenery_workers (0: half the cores, 2 to 4).

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

94 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"
"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)