CHUI-422 : Update the ad-hoc conversation with the known list of on line agents without waiting for server message (which often doesn't come...).
parent
d60609e009
commit
1006e2fd25
|
|
@ -303,9 +303,6 @@ void LLAvatarActions::startConference(const uuid_vec_t& ids, const LLUUID& float
|
|||
}
|
||||
|
||||
LLIMFloater::show(session_id);
|
||||
// gIMMgr->processAgentListUpdates(session_id, LLSD());
|
||||
// gIMMgr->startCall(session_id,LLVoiceChannel::OUTGOING_CALL);
|
||||
// gIMMgr->endCall(session_id);
|
||||
|
||||
make_ui_sound("UISndStartIM");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@
|
|||
#include "llviewerregion.h"
|
||||
#include "message.h"
|
||||
#include "lltrans.h"
|
||||
#include "llsdserialize.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
|
|
@ -110,14 +109,14 @@ namespace
|
|||
const std::string& pollURL, const LLHost& sender)
|
||||
{
|
||||
LLHTTPClient::ResponderPtr result = new LLEventPollResponder(pollURL, sender);
|
||||
llinfos << "Merov debug : LLEventPollResponder::start <" << sCount << "> "
|
||||
llinfos << "LLEventPollResponder::start <" << sCount << "> "
|
||||
<< pollURL << llendl;
|
||||
return result;
|
||||
}
|
||||
|
||||
void LLEventPollResponder::stop()
|
||||
{
|
||||
llinfos << "Merov debug : LLEventPollResponder::stop <" << mCount << "> "
|
||||
llinfos << "LLEventPollResponder::stop <" << mCount << "> "
|
||||
<< mPollURL << llendl;
|
||||
// there should be a way to stop a LLHTTPClient request in progress
|
||||
mDone = true;
|
||||
|
|
@ -135,17 +134,17 @@ namespace
|
|||
LLViewerRegion *regionp = gAgent.getRegion();
|
||||
if (!regionp)
|
||||
{
|
||||
llinfos << "Merov debug : LLEventPoll initialized before region is added." << llendl;
|
||||
llerrs << "LLEventPoll initialized before region is added." << llendl;
|
||||
}
|
||||
mSender = sender.getIPandPort();
|
||||
llinfos << "Merov debug : LLEventPoll initialized with sender " << mSender << llendl;
|
||||
llinfos << "LLEventPoll initialized with sender " << mSender << llendl;
|
||||
makeRequest();
|
||||
}
|
||||
|
||||
LLEventPollResponder::~LLEventPollResponder()
|
||||
{
|
||||
stop();
|
||||
llinfos << "Merov debug : LLEventPollResponder::~Impl <" << mCount << "> "
|
||||
lldebugs << "LLEventPollResponder::~Impl <" << mCount << "> "
|
||||
<< mPollURL << llendl;
|
||||
}
|
||||
|
||||
|
|
@ -155,13 +154,11 @@ namespace
|
|||
const LLChannelDescriptors& channels,
|
||||
const LLIOPipe::buffer_ptr_t& buffer)
|
||||
{
|
||||
llinfos << "Merov debug : LLEventPollResponder::completedRaw url <" << mPollURL << ">, status = " << status << ", reason = " << reason << llendl;
|
||||
if (status == HTTP_BAD_GATEWAY)
|
||||
{
|
||||
// These errors are not parsable as LLSD,
|
||||
// which LLHTTPClient::Responder::completedRaw will try to do.
|
||||
//completed(status, reason, LLSD());
|
||||
error(status, reason);
|
||||
completed(status, reason, LLSD());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -175,12 +172,8 @@ namespace
|
|||
request["ack"] = mAcknowledge;
|
||||
request["done"] = mDone;
|
||||
|
||||
llinfos << "Merov debug : viewer->sim : LLEventPollResponder::makeRequest <" << mCount
|
||||
<< "> ack = " << LLSDXMLStreamer(mAcknowledge)
|
||||
<< ", error = " << mErrorCount
|
||||
<< ", sender = " << mSender
|
||||
<< ", url = " << mPollURL
|
||||
<< ", done = " << mDone << llendl;
|
||||
lldebugs << "LLEventPollResponder::makeRequest <" << mCount << "> ack = "
|
||||
<< LLSDXMLStreamer(mAcknowledge) << llendl;
|
||||
LLHTTPClient::post(mPollURL, request, this);
|
||||
}
|
||||
|
||||
|
|
@ -190,16 +183,13 @@ namespace
|
|||
LLSD message;
|
||||
message["sender"] = mSender;
|
||||
message["body"] = content["body"];
|
||||
llinfos << "Merov debug : sim->viewer : LLEventPollResponder::handleMessage, msg_name = " << msg_name << ", message = " << LLSDOStreamer<LLSDNotationFormatter>(message) << llendl;
|
||||
LLMessageSystem::dispatch(msg_name, message);
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLEventPollResponder::error(U32 status, const std::string& reason)
|
||||
{
|
||||
llinfos << "Merov debug : LLEventPollResponder::error, status = " << status << ", reason = " << reason << llendl;
|
||||
if (mDone) return;
|
||||
llinfos << "Merov debug : LLEventPollResponder::error, status = " << status << ", reason = " << reason << llendl;
|
||||
|
||||
// A HTTP_BAD_GATEWAY (502) error is our standard timeout response
|
||||
// we get this when there are no events.
|
||||
|
|
@ -217,11 +207,11 @@ namespace
|
|||
+ mErrorCount * EVENT_POLL_ERROR_RETRY_SECONDS_INC
|
||||
, this);
|
||||
|
||||
llinfos << "Merov debug : Unexpected HTTP error. status: " << status << ", reason: " << reason << llendl;
|
||||
llwarns << "Unexpected HTTP error. status: " << status << ", reason: " << reason << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
llinfos << "Merov debug : LLEventPollResponder::error: <" << mCount << "> got "
|
||||
llwarns << "LLEventPollResponder::error: <" << mCount << "> got "
|
||||
<< status << ": " << reason
|
||||
<< (mDone ? " -- done" : "") << llendl;
|
||||
stop();
|
||||
|
|
@ -237,7 +227,7 @@ namespace
|
|||
// continue running.
|
||||
if(gAgent.getRegion() && gAgent.getRegion()->getHost().getIPandPort() == mSender)
|
||||
{
|
||||
llinfos << "Merov debug : Forcing disconnect due to stalled main region event poll." << llendl;
|
||||
llwarns << "Forcing disconnect due to stalled main region event poll." << llendl;
|
||||
LLAppViewer::instance()->forceDisconnect(LLTrans::getString("AgentLostConnection"));
|
||||
}
|
||||
}
|
||||
|
|
@ -246,8 +236,8 @@ namespace
|
|||
//virtual
|
||||
void LLEventPollResponder::result(const LLSD& content)
|
||||
{
|
||||
llinfos << "Merov debug : LLEventPollResponder::result <" << mCount << "> "
|
||||
<< (mDone ? " -- done" : "") << ", content = " << LLSDOStreamer<LLSDNotationFormatter>(content) << llendl;
|
||||
lldebugs << "LLEventPollResponder::result <" << mCount << ">"
|
||||
<< (mDone ? " -- done" : "") << llendl;
|
||||
|
||||
if (mDone) return;
|
||||
|
||||
|
|
@ -256,7 +246,7 @@ namespace
|
|||
if (!content.get("events") ||
|
||||
!content.get("id"))
|
||||
{
|
||||
llinfos << "Merov debug : received event poll with no events or id key" << llendl;
|
||||
llwarns << "received event poll with no events or id key" << llendl;
|
||||
makeRequest();
|
||||
return;
|
||||
}
|
||||
|
|
@ -266,11 +256,11 @@ namespace
|
|||
|
||||
if(mAcknowledge.isUndefined())
|
||||
{
|
||||
llinfos << "Merov debug : LLEventPollResponder: id undefined" << llendl;
|
||||
llwarns << "LLEventPollResponder: id undefined" << llendl;
|
||||
}
|
||||
|
||||
// was llinfos but now that CoarseRegionUpdate is TCP @ 1/second, it'd be too verbose for viewer logs. -MG
|
||||
llinfos << "Merov debug : LLEventPollResponder::completed <" << mCount << "> " << events.size() << "events (id "
|
||||
lldebugs << "LLEventPollResponder::completed <" << mCount << "> " << events.size() << "events (id "
|
||||
<< LLSDXMLStreamer(mAcknowledge) << ")" << llendl;
|
||||
|
||||
LLSD::array_const_iterator i = events.beginArray();
|
||||
|
|
|
|||
|
|
@ -238,7 +238,6 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
|
|||
|
||||
//we need to wait for session initialization for outgoing ad-hoc and group chat session
|
||||
//correct session id for initiated ad-hoc chat will be received from the server
|
||||
// Merov : MAINT-1551 : We need to read that mInitialTargetIDs when initializing the conversation
|
||||
if (!LLIMModel::getInstance()->sendStartSession(mSessionID, mOtherParticipantID,
|
||||
mInitialTargetIDs, mType))
|
||||
{
|
||||
|
|
@ -1301,6 +1300,7 @@ bool LLIMModel::sendStartSession(
|
|||
else if ( dialog == IM_SESSION_CONFERENCE_START )
|
||||
{
|
||||
LLSD agents;
|
||||
agents.append(gAgent.getID());
|
||||
for (int i = 0; i < (S32) ids.size(); i++)
|
||||
{
|
||||
agents.append(ids[i]);
|
||||
|
|
@ -1319,6 +1319,7 @@ bool LLIMModel::sendStartSession(
|
|||
data["params"] = agents;
|
||||
|
||||
llinfos << "Merov debug : viewer-> sim : LLIMModel::sendStartSession, session id = " << temp_session_id << ", data = " << LLSDOStreamer<LLSDNotationFormatter>(data) << llendl;
|
||||
llinfos << "Merov debug : Extra info for LLIMModel::sendStartSession, other_participant_id = " << other_participant_id << ", agent id = " << gAgent.getID() << llendl;
|
||||
LLHTTPClient::post(
|
||||
url,
|
||||
data,
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@
|
|||
#include "llviewerobjectlist.h"
|
||||
#include "llvoavatar.h"
|
||||
#include "llworld.h"
|
||||
#include "llsdserialize.h"
|
||||
|
||||
const LLColor4 INACTIVE_COLOR(0.3f, 0.3f, 0.3f, 0.5f);
|
||||
const LLColor4 ACTIVE_COLOR(0.5f, 0.5f, 0.5f, 1.f);
|
||||
|
|
@ -297,23 +296,6 @@ private:
|
|||
LLUUID mSessionID;
|
||||
};
|
||||
|
||||
class UpdateResponder : public LLHTTPClient::Responder
|
||||
{
|
||||
public:
|
||||
UpdateResponder(const LLUUID& session_id)
|
||||
{
|
||||
mSessionID = session_id;
|
||||
}
|
||||
|
||||
virtual void error(U32 status, const std::string& reason)
|
||||
{
|
||||
llinfos << "Merov debug : UpdateResponder error, on " << mSessionID << ", status = " << status << ": " << reason << llendl;
|
||||
}
|
||||
|
||||
private:
|
||||
LLUUID mSessionID;
|
||||
};
|
||||
|
||||
//
|
||||
// LLSpeakerMgr
|
||||
//
|
||||
|
|
@ -322,11 +304,8 @@ LLSpeakerMgr::LLSpeakerMgr(LLVoiceChannel* channelp) :
|
|||
mVoiceChannel(channelp)
|
||||
, mVoiceModerated(false)
|
||||
, mModerateModeHandledFirstTime(false)
|
||||
, mSessionUpdated(false)
|
||||
, mSessionID()
|
||||
{
|
||||
static LLUICachedControl<F32> remove_delay ("SpeakerParticipantRemoveDelay", 10.0);
|
||||
// mSessionID = getSessionID();
|
||||
|
||||
mSpeakerDelayRemover = new LLSpeakersDelayActionsStorage(boost::bind(&LLSpeakerMgr::removeSpeaker, this, _1), remove_delay);
|
||||
}
|
||||
|
|
@ -348,7 +327,6 @@ LLPointer<LLSpeaker> LLSpeakerMgr::setSpeaker(const LLUUID& id, const std::strin
|
|||
mSpeakers.insert(std::make_pair(speakerp->mID, speakerp));
|
||||
mSpeakersSorted.push_back(speakerp);
|
||||
LL_DEBUGS("Speakers") << "Added speaker " << id << llendl;
|
||||
//llinfos << "Merov debug : setSpeaker, add, id = " << id << ", name = " << name << llendl;
|
||||
fireEvent(new LLSpeakerListChangeEvent(this, speakerp->mID), "add");
|
||||
}
|
||||
else
|
||||
|
|
@ -369,7 +347,6 @@ LLPointer<LLSpeaker> LLSpeakerMgr::setSpeaker(const LLUUID& id, const std::strin
|
|||
}
|
||||
else
|
||||
{
|
||||
llinfos << "Merov debug : setSpeaker, speaker not found? id = " << id << ", name = " << name << llendl;
|
||||
LL_WARNS("Speakers") << "Speaker " << id << " not found" << llendl;
|
||||
}
|
||||
}
|
||||
|
|
@ -550,62 +527,24 @@ void LLSpeakerMgr::updateSpeakerList()
|
|||
LLUUID session_id = getSessionID();
|
||||
if ((mSpeakers.size() == 0) && (!session_id.isNull()))
|
||||
{
|
||||
//llinfos << "Merov debug : LLSpeakerMgr::updateSpeakerList: No speakers in " << session_id << llendl;
|
||||
// MAINT-1551 : If the list is empty for too long, we should send a message to the sim so that
|
||||
// it sends the participant list again.
|
||||
updateSession();
|
||||
// If the list is empty, we update it with whatever was used to initiate the call so that it doesn't stay empty too long.
|
||||
// *TODO: Fix the server side code that sometimes forgets to send back the list of agents after a chat started
|
||||
// (IOW, fix why we get no ChatterBoxSessionAgentListUpdates message after the initial ChatterBoxSessionStartReply)
|
||||
LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id);
|
||||
for (uuid_vec_t::iterator it = session->mInitialTargetIDs.begin();it!=session->mInitialTargetIDs.end();++it)
|
||||
{
|
||||
// We only add avatars that are on line
|
||||
if (LLAvatarTracker::instance().isBuddyOnline(*it))
|
||||
{
|
||||
setSpeaker(*it, "", LLSpeaker::STATUS_VOICE_ACTIVE, LLSpeaker::SPEAKER_AGENT);
|
||||
}
|
||||
}
|
||||
// Also add the current agent
|
||||
setSpeaker(gAgentID, "", LLSpeaker::STATUS_VOICE_ACTIVE, LLSpeaker::SPEAKER_AGENT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLSpeakerMgr::updateSession()
|
||||
{
|
||||
// We perform this update if is has never been done or if the session id changed (which happens in ad-hoc sessions)
|
||||
if (mSessionUpdated && (mSessionID == getSessionID()))
|
||||
return;
|
||||
|
||||
std::string url = gAgent.getRegion()->getCapability("ChatSessionRequest");
|
||||
LLSD data;
|
||||
|
||||
// That doesn't work apparently because we are not in the invite list so we get error 500
|
||||
// data["method"] = "accept invitation";
|
||||
// data["session-id"] = getSessionID();
|
||||
|
||||
// That doesn't work because we're not a moderator on an IM session so our request is rejected as such (error 403)
|
||||
data["method"] = "session update";
|
||||
data["session-id"] = getSessionID();
|
||||
data["params"] = LLSD::emptyMap();
|
||||
data["params"]["update_info"] = LLSD::emptyMap();
|
||||
data["params"]["update_info"]["moderated_mode"] = LLSD::emptyMap();
|
||||
data["params"]["update_info"]["moderated_mode"]["voice"] = false;
|
||||
|
||||
// That doesn't work, we eventually time out (error 502)...
|
||||
// data["method"] = "call";
|
||||
// data["session-id"] = getSessionID();
|
||||
|
||||
data["params"] = LLSD::emptyArray();
|
||||
// for (int i = 0; i < count; i++)
|
||||
// {
|
||||
// data["params"].append(ids[i]);
|
||||
// }
|
||||
data["params"].append(gAgentID);
|
||||
data["method"] = "invite";
|
||||
data["session-id"] = getSessionID();
|
||||
|
||||
llinfos << "Merov debug : viewer->sim : LLSpeakerMgr::updateSession, session id = " << getSessionID() << ", data = " << LLSDOStreamer<LLSDNotationFormatter>(data) << llendl;
|
||||
|
||||
LLHTTPClient::post(url, data, new UpdateResponder(getSessionID()));
|
||||
|
||||
// bit of extra in the case of invite being sent
|
||||
data.clear();
|
||||
data["method"] = "accept invitation";
|
||||
data["session-id"] = getSessionID();
|
||||
LLHTTPClient::post(url, data, new UpdateResponder(getSessionID()));
|
||||
|
||||
mSessionUpdated = true;
|
||||
mSessionID = getSessionID();
|
||||
}
|
||||
|
||||
void LLSpeakerMgr::setSpeakerNotInChannel(LLSpeaker* speakerp)
|
||||
{
|
||||
speakerp->mStatus = LLSpeaker::STATUS_NOT_IN_CHANNEL;
|
||||
|
|
@ -872,7 +811,6 @@ void LLIMSpeakerMgr::toggleAllowTextChat(const LLUUID& speaker_id)
|
|||
//current value represents ability to type, so invert
|
||||
data["params"]["mute_info"]["text"] = !speakerp->mModeratorMutedText;
|
||||
|
||||
llinfos << "Merov debug : viewer->sim : LLIMSpeakerMgr::toggleAllowTextChat, session id = " << getSessionID() << ", data = " << LLSDOStreamer<LLSDNotationFormatter>(data) << llendl;
|
||||
LLHTTPClient::post(url, data, new ModerationResponder(getSessionID()));
|
||||
}
|
||||
|
||||
|
|
@ -897,7 +835,6 @@ void LLIMSpeakerMgr::moderateVoiceParticipant(const LLUUID& avatar_id, bool unmu
|
|||
data["params"]["mute_info"] = LLSD::emptyMap();
|
||||
data["params"]["mute_info"]["voice"] = !unmute;
|
||||
|
||||
llinfos << "Merov debug : viewer->sim : LLIMSpeakerMgr::moderateVoiceParticipant, session id = " << getSessionID() << ", data = " << LLSDOStreamer<LLSDNotationFormatter>(data) << llendl;
|
||||
LLHTTPClient::post(
|
||||
url,
|
||||
data,
|
||||
|
|
@ -940,7 +877,6 @@ void LLIMSpeakerMgr::moderateVoiceSession(const LLUUID& session_id, bool disallo
|
|||
data["params"]["update_info"]["moderated_mode"] = LLSD::emptyMap();
|
||||
data["params"]["update_info"]["moderated_mode"]["voice"] = disallow_voice;
|
||||
|
||||
llinfos << "Merov debug : viewer->sim : LLIMSpeakerMgr::moderateVoiceSession, session id = " << session_id << ", data = " << LLSDOStreamer<LLSDNotationFormatter>(data) << llendl;
|
||||
LLHTTPClient::post(url, data, new ModerationResponder(session_id));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -258,10 +258,6 @@ protected:
|
|||
void setSpeakerNotInChannel(LLSpeaker* speackerp);
|
||||
bool removeSpeaker(const LLUUID& speaker_id);
|
||||
|
||||
void updateSession();
|
||||
bool mSessionUpdated;
|
||||
LLUUID mSessionID;
|
||||
|
||||
typedef std::map<LLUUID, LLPointer<LLSpeaker> > speaker_map_t;
|
||||
speaker_map_t mSpeakers;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue