summaryrefslogtreecommitdiff
path: root/indra/newview/llnavmeshstation.h
blob: 5436694b4160d5076dfd156b5e110fa8f18dbea6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/** 
 * @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 LLMessageSystem;
//===============================================================================
class LLNavMeshObserver
{
public:
	//Ctor
	LLNavMeshObserver() { mObserverHandle.bind(this); }
	//Dtor
	virtual ~LLNavMeshObserver() {}
	//Accessor for the observers handle
	const LLHandle<LLNavMeshObserver>& getObserverHandle() const { return mObserverHandle; }

protected:
	LLRootHandle<LLNavMeshObserver> mObserverHandle;	
};
//===============================================================================
//prep#TODO# determine if a name change is needed?
class LLNavMeshDownloadObserver
{
public:
	//Ctor
	LLNavMeshDownloadObserver() { mObserverHandle.bind(this); }
	//Dtor
	virtual ~LLNavMeshDownloadObserver() {}
	//Accessor for the observers handle
	const LLHandle<LLNavMeshDownloadObserver>& getObserverHandle() const { return mObserverHandle; }

protected:
	LLRootHandle<LLNavMeshDownloadObserver> mObserverHandle;	
};
//===============================================================================
class LLNavMeshStation : public LLSingleton<LLNavMeshStation>
{
public:
	//Ctor
	LLNavMeshStation();
	//Facilitates the posting of a prepopulated llsd block to an existing url
	bool postNavMeshToServer( LLSD& data, const LLHandle<LLNavMeshObserver>& observerHandle );
	//Setter for the navmesh upload url
	void setNavMeshUploadURL( std::string& url ) { mNavMeshUploadURL = url; }
	//Setter for the navmesh download url
	void setNavMeshDownloadURL( std::string& url ) { mNavMeshDownloadURL = url; }
	//Callback to handle the requested src data for this regions navmesh src
	static void processNavMeshSrc( LLMessageSystem* msg, void** );
	//Initiate download of the navmesh source from the server
	void downloadNavMeshSrc( const LLHandle<LLNavMeshDownloadObserver>& observerHandle );

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;
	//URL used for download the src data for a navmesh
	std::string		mNavMeshDownloadURL;

};
//===============================================================================
#endif LL_NAV_MESH_STATION_H