/** * @file llstartuplistener.cpp * @author Nat Goodspeed * @date 2009-12-08 * @brief Implementation for llstartuplistener. * * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ // Precompiled header #include "llviewerprecompiledheaders.h" // associated header #include "llstartuplistener.h" // STL headers // std headers // external library headers // other Linden headers #include "llstartup.h" #include "stringize.h" LLStartupListener::LLStartupListener(/* LLStartUp* instance */): LLEventAPI("LLStartUp", "Access e.g. LLStartup::postStartupState()") /* , mStartup(instance) */ { add("postStartupState", "Refresh \"StartupState\" listeners with current startup state", &LLStartupListener::postStartupState); add("getStateTable", "Reply with array of EStartupState string names", &LLStartupListener::getStateTable); } void LLStartupListener::postStartupState(const LLSD&) const { LLStartUp::postStartupState(); } void LLStartupListener::getStateTable(const LLSD& event) const { Response response(LLSD(), event); // This relies on our knowledge that STATE_STARTED is the very last // EStartupState value. If that ever stops being true, we're going to lie // without realizing it. I can think of no reliable way to test whether // the enum has been extended *beyond* STATE_STARTED. We could, of course, // test whether stuff has been inserted before it, by testing its // numerical value against the constant value as of the last time we // looked; but that's pointless, as values inserted before STATE_STARTED // will continue to work fine. The bad case is if new symbols get added // *after* it. LLSD table; // note <= comparison: we want to *include* STATE_STARTED. for (LLSD::Integer istate{0}; istate <= LLSD::Integer(STATE_STARTED); ++istate) { table.append(LLStartUp::startupStateToString(EStartupState(istate))); } response["table"] = table; }