From 1424ecf6cc0892cfcf135473a4f330453c22b5c2 Mon Sep 17 00:00:00 2001 From: prep Date: Wed, 2 Nov 2011 15:50:51 -0400 Subject: Initial stub for navmeshstation and test for navmeshposting to server --- indra/newview/llnavmeshstation.cpp | 94 ++++++++++++++++++++++++++++++++++++++ indra/newview/llnavmeshstation.h | 69 ++++++++++++++++++++++++++++ indra/newview/llviewermenufile.cpp | 41 ++++++++++++++--- 3 files changed, 198 insertions(+), 6 deletions(-) create mode 100644 indra/newview/llnavmeshstation.cpp create mode 100644 indra/newview/llnavmeshstation.h (limited to 'indra/newview') diff --git a/indra/newview/llnavmeshstation.cpp b/indra/newview/llnavmeshstation.cpp new file mode 100644 index 0000000000..2128411a07 --- /dev/null +++ b/indra/newview/llnavmeshstation.cpp @@ -0,0 +1,94 @@ +/** + * @file llnavmeshstation.cpp + * @brief + * + * $LicenseInfo:firstyear=2005&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$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llnavmeshstation.h" +#include "llcurl.h" +//=============================================================================== +LLNavMeshStation::LLNavMeshStation() +{ +} +//=============================================================================== +class LLNavMeshUploadResponder : public LLCurl::Responder +{ +public: + LLNavMeshUploadResponder( const LLHandle& observer_handle ) + : mObserverHandle( observer_handle ) + { + LLNavMeshObserver* pObserver = mObserverHandle.get(); + } + + void clearPendingRequests ( void ) + { + } + + void error( U32 statusNum, const std::string& reason ) + { + statusNum; + llwarns << "Transport error "< mObserverHandle; +}; + +//=============================================================================== +bool LLNavMeshStation::postNavMeshToServer( LLSD& data, const LLHandle& observerHandle ) +{ + mCurlRequest = new LLCurlRequest(); + + if ( mNavMeshUploadURL.empty() ) + { + llinfos << "Unable to upload navmesh because of missing URL" << llendl; + } + else + { + LLCurlRequest::headers_t headers; + mCurlRequest->post( mNavMeshUploadURL, headers, data, + new LLNavMeshUploadResponder(/*this, data,*/ observerHandle ) ); + do + { + mCurlRequest->process(); + //sleep for 10ms to prevent eating a whole core + apr_sleep(10000); + } while ( mCurlRequest->getQueued() > 0 ); + } + + delete mCurlRequest; + + mCurlRequest = NULL; + + return true; +} +//=============================================================================== + + diff --git a/indra/newview/llnavmeshstation.h b/indra/newview/llnavmeshstation.h new file mode 100644 index 0000000000..acb9a6932e --- /dev/null +++ b/indra/newview/llnavmeshstation.h @@ -0,0 +1,69 @@ +/** + * @file llnavmeshstation.h + * @brief Client-side navmesh support + * + * $LicenseInfo:firstyear=2001&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$ + */ + +#ifndef LL_NAV_MESH_STATION_H +#define LL_NAV_MESH_STATION_H + +//=============================================================================== +#include "llhandle.h" +//=============================================================================== +class LLCurlRequest; +//=============================================================================== +class LLNavMeshObserver +{ +public: + //Ctor + LLNavMeshObserver() { mObserverHandle.bind(this); } + //Dtor + virtual ~LLNavMeshObserver() {} + //Accessor for the observers handle + const LLHandle& getObserverHandle() const { return mObserverHandle; } + +protected: + LLRootHandle mObserverHandle; +}; +//=============================================================================== +class LLNavMeshStation : public LLSingleton, LLNavMeshObserver +{ +public: + //Ctor + LLNavMeshStation(); + //Facilitates the posting of a prepopulated llsd block to an existing url + bool postNavMeshToServer( LLSD& data, const LLHandle& observerHandle ); + //Setter for the navmesh upload url + void setNavMeshUploadURL( std::string& url ) { mNavMeshUploadURL = url; } + +protected: + //Curl object to facilitate posts to server + LLCurlRequest* mCurlRequest; + //Maximum time in seconds to execute an uploading request. + S32 mMeshUploadTimeOut ; + //URL used for uploading viewer generated navmesh + std::string mNavMeshUploadURL; + +}; +//=============================================================================== +#endif LL_NAV_MESH_STATION_H \ No newline at end of file diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 8359667821..df7f06a774 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -78,7 +78,10 @@ // system libraries #include +//prep# #include "LLPathingLib.h" +#include "llnavmeshstation.h" + class LLBuildNavMesh : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -88,20 +91,46 @@ class LLBuildNavMesh : public view_listener_t } }; -class LLFileUploadNavMesh : public view_listener_t +class LLFileUploadNavMesh : public view_listener_t, LLNavMeshObserver { bool handleEvent(const LLSD& userdata) { - llinfos<<"ok"<testNavMeshGenerationWithLocalAsset(); + LLSD data; + LLPLResult result = LLPathingLib::getInstance()->getNavMeshAsLLSD( data ); + if ( result == LLPL_OK ) + { + std::string capability = "NavMeshUpload"; + std::string url = gAgent.getRegion()->getCapability( capability ); + if ( !url.empty() ) + { + llinfos<< typeid(*this).name() <<"setNavMeshUploadURL "<< url <getRegionID(); + data["sim_host"] = "prepFIXME"; + data["sim_port"] = "prepFIXME"; + LLNavMeshStation::getInstance()->setNavMeshUploadURL( url ); + LLNavMeshStation::getInstance()->postNavMeshToServer( data, getObserverHandle() ); + } + else + { + llinfos<<"region contained no capability of type ["<