phoenix-firestorm/indra/newview/fslslbridgerequest.cpp

128 lines
3.8 KiB
C++

/**
* @fslslbridgerequest.cpp
* @FSLSLBridgerequest implementation
*
* $LicenseInfo:firstyear=2011&license=fsviewerlgpl$
* Phoenix Firestorm Viewer Source Code
* Copyright (C) 2011, The Phoenix Firestorm Project, 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
*
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "fslslbridgerequest.h"
#include "fslslbridge.h"
#include "llagent.h" // for gAgent
#include "llhttpclient.h"
#include <string>
#include <boost/tokenizer.hpp> // for radar
#include "llpanel.h"
#include "llpanelpeople.h"
#include "llavatarlist.h"
#include "llavatarlistitem.h"
#include "llfloatersidepanelcontainer.h"
#ifdef LL_STANDALONE
#include <expat.h>
#else
#include "expat/expat.h"
#endif
//
//-TT Client LSL Bridge File
//
FSLSLBridgeRequestManager::FSLSLBridgeRequestManager()
{
}
FSLSLBridgeRequestManager::~FSLSLBridgeRequestManager()
{
}
void FSLSLBridgeRequestManager::initSingleton()
{
}
void FSLSLBridgeRequestManager::processBridgeCall(const LLSD& content)
{
std::string strContent = content.asString();
llinfos << "Got info: " << strContent << llendl;
}
FSLSLBridgeRequestResponder::FSLSLBridgeRequestResponder()
{
//FSLSLBridgeRequestManager::instance().initSingleton();
}
//If we get back a normal response, handle it here
void FSLSLBridgeRequestResponder::result(const LLSD& content)
{
//FSLSLBridgeRequestManager::instance().processBridgeCall(content);
std::string strContent = content.asString();
llinfos << "Got info: " << strContent << llendl;
//do not use - infinite loop, only here for testing.
//FSLSLBridge::instance().viewerToLSL("Response_to_response|" + strContent);
}
//If we get back an error (not found, etc...), handle it here
void FSLSLBridgeRequestResponder::error(U32 status, const std::string& reason)
{
llwarns << "FSLSLBridgeRequest::error("
<< status << ": " << reason << ")" << llendl;
}
// AO: The below handler is used to parse return data from the bridge, requesting bulk ZOffset updates.
FSLSLBridgeRequestRadarPosResponder::FSLSLBridgeRequestRadarPosResponder()
{
}
void FSLSLBridgeRequestRadarPosResponder::result(const LLSD& content)
{
LLPanel* panel_people = LLFloaterSidePanelContainer::getPanel("people", "panel_people");
if (panel_people)
{
LLAvatarList* nearbyList = ((LLPanelPeople*)panel_people)->getNearbyList();
std::string strContent = content.asString();
//llinfos << "Got info: " << strContent << llendl;
// AO: parse content into pairs of [agent UUID,agent zHeight] , update our peoplepanel radar for each one
LLUUID targetAv;
F32 targetZ;
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
boost::char_separator<char> sep(", ");
tokenizer tokens(strContent,sep);
for (tokenizer::iterator tok_iter=tokens.begin(); tok_iter != tokens.end();++tok_iter)
{
targetAv = LLUUID(*(tok_iter++));
targetZ = (F32)::atof((*tok_iter).c_str());
LLAvatarListItem* avListItem = nearbyList->getAvatarListItem(targetAv);
if (avListItem != NULL)
{
avListItem->setZOffset((F32)(targetZ));
//llinfos << targetAv << " ::: " << targetZ << llendl;
}
}
}
}