diff options
author | Steven Bennetts <steve@lindenlab.com> | 2007-11-07 22:55:27 +0000 |
---|---|---|
committer | Steven Bennetts <steve@lindenlab.com> | 2007-11-07 22:55:27 +0000 |
commit | 050dad0ce35207a4ac1562175e853590ad9b7681 (patch) | |
tree | be5dc291d2313112e5733d8c004edfe67da6fc54 /indra/newview/llappviewer.h | |
parent | 6fd04521d720a3a4904069d10e8ed970d870ba7f (diff) |
merge svn+ssh://steve@svn/svn/linden/branches/viewer-cleanup-3 -r 73026:73079
Diffstat (limited to 'indra/newview/llappviewer.h')
-rw-r--r-- | indra/newview/llappviewer.h | 298 |
1 files changed, 298 insertions, 0 deletions
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h new file mode 100644 index 0000000000..227a27a8ac --- /dev/null +++ b/indra/newview/llappviewer.h @@ -0,0 +1,298 @@ +/** + * @file llappviewer.h + * @brief The LLAppViewer class declaration + * + * $LicenseInfo:firstyear=2007&license=viewergpl$ + * + * Copyright (c) 2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLAPPVIEWER_H +#define LL_LLAPPVIEWER_H + +class LLTextureCache; +class LLWorkerThread; +class LLTextureFetch; + +class LLAppViewer : public LLApp +{ +public: + LLAppViewer(); + virtual ~LLAppViewer(); + + // *NOTE:Mani - Don't use this! + // Having + static LLAppViewer* instance() {return sInstance; } + + // + // Main application logic + // + virtual bool init(); // Override to do application initialization + virtual bool cleanup(); // Override to do application cleanup + virtual bool mainLoop(); // Override for the application main loop. Needs to at least gracefully notice the QUITTING state and exit. + + // Application control + void forceQuit(); // Puts the viewer into 'shutting down without error' mode. + void requestQuit(); // Request a quit. A kinder, gentler quit. + void userQuit(); // The users asks to quit. Confirm, then requestQuit() + void earlyExit(const LLString& msg); // Display an error dialog and forcibly quit. + void forceExit(S32 arg); // exit() immediately (after some cleanup). + void abortQuit(); // Called to abort a quit request. + + bool quitRequested() { return mQuitRequested; } + bool logoutRequestSent() { return mLogoutRequestSent; } + + // *FIX: This is meant to stay only until the command line issues are hashed out with repect to LLApp::parseCommandLine + // This version stores the argc and argv for later usage, make sure the params passed in last as long as this class. + bool tempStoreCommandOptions(int argc, char** argv); + + // write string to "debug_info.log", used for crash reporting. + void writeDebug(const char *str); + void writeDebug(const std::string& str) { writeDebug(str.c_str()); }; + void closeDebug(); + + const LLOSInfo& getOSInfo() const { return mSysOSInfo; } + + // Report true if under the control of a debugger. A null-op default. + virtual bool beingDebugged() { return false; } + + S32 getCrashBehavior() const { return mCrashBehavior; } + void setCrashBehavior(S32 cb); + virtual void handleCrashReporting() = 0; // What to do with crash report? + static void handleViewerCrash(); // Hey! The viewer crashed. Do this. + + // Thread accessors + static LLTextureCache* getTextureCache() { return sTextureCache; } + static LLWorkerThread* getImageDecodeThread() { return sImageDecodeThread; } + static LLTextureFetch* getTextureFetch() { return sTextureFetch; } + + const std::string& getSerialNumber() { return mSerialNumber; } + + // *FIX:Mani purgeCache was made public for parse_args(). + // If that beast is gone, make it private. + void purgeCache(); // Clear the local cache. + bool getPurgeCache() const { return mPurgeCache; } + + const LLString& getSecondLifeTitle() const; // The Second Life title. + const LLString& getWindowTitle() const; // The window display name. + + // Helpers for URIs + void addLoginURI(const std::string& uri); + void setHelperURI(const std::string& uri); + const std::vector<std::string>& getLoginURIs() const; + const std::string& getHelperURI() const; + void resetURIs() const; + + void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user. + void badNetworkHandler(); // Cause a crash state due to bad network packet. + + bool hasSavedFinalSnapshot() { return mSavedFinalSnapshot; } + void saveFinalSnapshot(); + + void loadNameCache(); + void saveNameCache(); + + // LLAppViewer testing helpers. + // *NOTE: These will potentially crash the viewer. Only for debugging. + virtual void forceErrorLLError(); + virtual void forceErrorBreakpoint(); + virtual void forceErrorBadMemoryAccess(); + virtual void forceErrorInifiniteLoop(); + virtual void forceErrorSoftwareException(); + +protected: + virtual bool initWindow(); // Initialize the viewer's window. + virtual bool initLogging(); // Initialize log files, logging system, return false on failure. + virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit. + + virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this. + + +private: + + bool initEarlyConfiguration(); // Initialize setting needed by crash reporting. + bool initThreads(); // Initialize viewer threads, return false on failure. + bool initConfiguration(); // Initialize settings from the command line/config file. + + bool initCache(); // Initialize local client cache. + + bool doConfigFromCommandLine(); // calls parse args. + + void cleanupSavedSettings(); // Sets some config data to current or default values during cleanup. + void removeCacheFiles(const char *filemask); // Deletes cached files the match the given wildcard. + + void writeSystemInfo(); // Write system info to "debug_info.log" + + bool anotherInstanceRunning(); + void initMarkerFile(); + void removeMarkerFile(); + + void idle(); + void idleShutdown(); + void idleNetwork(); + + void sendLogoutRequest(); + void disconnectViewer(); + + // *FIX: the app viewer class should be some sort of singleton, no? + // Perhaps its child class is the singleton and this should be an abstract base. + static LLAppViewer* sInstance; + + bool mSecondInstance; // Is this a second instance of the app? + + FILE *mMarkerFile; // A file created to indicate the app is running. + bool mLastExecFroze; // Set on init if the marker file was found. + + FILE* mDebugFile; // output stream written to via writeDebug() + + LLOSInfo mSysOSInfo; + S32 mCrashBehavior; + bool mReportedCrash; + + // Thread objects. + static LLTextureCache* sTextureCache; + static LLWorkerThread* sImageDecodeThread; + static LLTextureFetch* sTextureFetch; + + S32 mNumSessions; + + std::string mSerialNumber; + bool mPurgeCache; + bool mPurgeOnExit; + + bool mSavedFinalSnapshot; + + bool mQuitRequested; // User wants to quit, may have modified documents open. + bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim. +}; + +// consts from viewer.h +const S32 AGENT_UPDATES_PER_SECOND = 10; + +// Globals with external linkage. From viewer.h +// *NOTE:Mani - These will be removed as the Viewer App Cleanup project continues. +// +// "// llstartup" indicates that llstartup is the only client for this global. + +extern bool gVerifySSLCert; // parse_args setting used by llxmlrpctransaction.cpp +extern BOOL gHandleKeysAsync; // gSavedSettings used by llviewerdisplay.cpp & llviewermenu.cpp +extern BOOL gProbeHardware; +extern LLString gDisabledMessage; // llstartup +extern BOOL gHideLinks; // used by llpanellogin, lllfloaterbuycurrency, llstartup +extern BOOL gInProductionGrid; + +extern BOOL gAllowIdleAFK; +extern F32 gAFKTimeout; +extern BOOL gShowObjectUpdates; + +extern BOOL gLogMessages; // llstartup +extern std::string gChannelName; +extern BOOL gUseAudio; // llstartup + +extern LLString gCmdLineFirstName; // llstartup +extern LLString gCmdLineLastName; +extern LLString gCmdLinePassword; + +extern BOOL gAutoLogin; // llstartup +extern const char* DEFAULT_SETTINGS_FILE; // llstartup + +extern BOOL gRequestInventoryLibrary; // llstartup +extern BOOL gGodConnect; // llstartup + +extern BOOL gAcceptTOS; +extern BOOL gAcceptCriticalMessage; + +extern LLUUID gViewerDigest; // MD5 digest of the viewer's executable file. +extern BOOL gLastExecFroze; // llstartup + +extern U32 gFrameCount; +extern U32 gForegroundFrameCount; + +extern LLPumpIO* gServicePump; + +// Is the Pacific time zone (aka server time zone) +// currently in daylight savings time? +extern BOOL gPacificDaylightTime; + +extern U64 gFrameTime; // The timestamp of the most-recently-processed frame +extern F32 gFrameTimeSeconds; // Loses msec precision after ~4.5 hours... +extern F32 gFrameIntervalSeconds; // Elapsed time between current and previous gFrameTimeSeconds +extern F32 gFPSClamped; // Frames per second, smoothed, weighted toward last frame +extern F32 gFrameDTClamped; +extern U64 gStartTime; + +extern LLTimer gRenderStartTime; +extern LLFrameTimer gForegroundTime; + +extern F32 gLogoutMaxTime; +extern LLTimer gLogoutTimer; + +extern F32 gSimLastTime; +extern F32 gSimFrames; + +extern LLUUID gInventoryLibraryOwner; +extern LLUUID gInventoryLibraryRoot; + +extern BOOL gDisconnected; +extern BOOL gDisableVoice; + +// Map scale in pixels per region +extern F32 gMapScale; +extern F32 gMiniMapScale; + +extern LLFrameTimer gRestoreGLTimer; +extern BOOL gRestoreGL; +extern BOOL gUseWireframe; + +extern F32 gMouseSensitivity; +extern BOOL gInvertMouse; + +// VFS globals - gVFS is for general use +// gStaticVFS is read-only and is shipped w/ the viewer +// it has pre-cache data like the UI .TGAs +extern LLVFS *gStaticVFS; + +extern LLMemoryInfo gSysMemory; + +extern bool gPreloadImages; +extern bool gPreloadSounds; + +extern LLString gLastVersionChannel; + +extern LLVector3 gWindVec; +extern LLVector3 gRelativeWindVec; +extern U32 gPacketsIn; +extern BOOL gPrintMessagesThisFrame; + +extern LLUUID gSunTextureID; +extern LLUUID gMoonTextureID; + +extern BOOL gUseConsole; + +extern BOOL gRandomizeFramerate; +extern BOOL gPeriodicSlowFrame; + +extern BOOL gQAMode; +#endif // LL_LLAPPVIEWER_H |