Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/source/lobby/XmppClient.cpp
Show All 28 Lines | |||||
#include "lib/utf8.h" | #include "lib/utf8.h" | ||||
#include "network/NetServer.h" | #include "network/NetServer.h" | ||||
#include "network/NetClient.h" | #include "network/NetClient.h" | ||||
#include "network/StunClient.h" | #include "network/StunClient.h" | ||||
#include "ps/CLogger.h" | #include "ps/CLogger.h" | ||||
#include "ps/ConfigDB.h" | #include "ps/ConfigDB.h" | ||||
#include "ps/GUID.h" | #include "ps/GUID.h" | ||||
#include "ps/Pyrogenesis.h" | #include "ps/Pyrogenesis.h" | ||||
#include "scriptinterface/ScriptExtraHeaders.h" // StructuredClone | |||||
#include "scriptinterface/ScriptInterface.h" | #include "scriptinterface/ScriptInterface.h" | ||||
#include "scriptinterface/StructuredClone.h" | |||||
#include <iostream> | #include <iostream> | ||||
//debug | //debug | ||||
#if 1 | #if 1 | ||||
#define DbgXMPP(x) | #define DbgXMPP(x) | ||||
#else | #else | ||||
#define DbgXMPP(x) std::cout << x << std::endl; | #define DbgXMPP(x) std::cout << x << std::endl; | ||||
▲ Show 20 Lines • Show All 682 Lines • ▼ Show 20 Lines | bool XmppClient::GuiPollHasPlayerListUpdate() | ||||
if (!m_initialLoadComplete) | if (!m_initialLoadComplete) | ||||
return false; | return false; | ||||
bool hasUpdate = m_PlayerMapUpdate; | bool hasUpdate = m_PlayerMapUpdate; | ||||
m_PlayerMapUpdate = false; | m_PlayerMapUpdate = false; | ||||
return hasUpdate; | return hasUpdate; | ||||
} | } | ||||
JS::Value XmppClient::GuiPollNewMessages(const ScriptInterface& scriptInterface) | JS::Value XmppClient::GuiPollNewMessages(const ScriptInterface& guiInterface) | ||||
{ | { | ||||
if ((m_isConnected && !m_initialLoadComplete) || m_GuiMessageQueue.empty()) | if ((m_isConnected && !m_initialLoadComplete) || m_GuiMessageQueue.empty()) | ||||
return JS::UndefinedValue(); | return JS::UndefinedValue(); | ||||
ScriptRequest rq(m_ScriptInterface); | ScriptRequest rq(m_ScriptInterface); | ||||
// Optimize for batch message processing that is more | // Optimize for batch message processing that is more | ||||
// performance demanding than processing a lone message. | // performance demanding than processing a lone message. | ||||
Show All 14 Lines | for (const JS::Heap<JS::Value>& message : m_GuiMessageQueue) | ||||
if (type != "chat") | if (type != "chat") | ||||
continue; | continue; | ||||
std::string level; | std::string level; | ||||
m_ScriptInterface->GetProperty(rootedMessage, "level", level); | m_ScriptInterface->GetProperty(rootedMessage, "level", level); | ||||
if (level != "room-message" && level != "private-message") | if (level != "room-message" && level != "private-message") | ||||
continue; | continue; | ||||
JS::RootedValue historicMessage(rq.cx); | JS::RootedValue historicMessage(rq.cx, Script::DeepCopy(rq, rootedMessage)); | ||||
if (JS_StructuredClone(rq.cx, rootedMessage, &historicMessage, nullptr, nullptr)) | if (true) | ||||
{ | { | ||||
m_ScriptInterface->SetProperty(historicMessage, "historic", true); | m_ScriptInterface->SetProperty(historicMessage, "historic", true); | ||||
m_ScriptInterface->FreezeObject(historicMessage, true); | m_ScriptInterface->FreezeObject(historicMessage, true); | ||||
m_HistoricGuiMessages.push_back(JS::Heap<JS::Value>(historicMessage)); | m_HistoricGuiMessages.push_back(JS::Heap<JS::Value>(historicMessage)); | ||||
} | } | ||||
else | else | ||||
LOGERROR("Could not clone historic lobby GUI message!"); | LOGERROR("Could not clone historic lobby GUI message!"); | ||||
} | } | ||||
m_GuiMessageQueue.clear(); | m_GuiMessageQueue.clear(); | ||||
// Copy the messages over to the caller script interface. | // Copy the messages over to the caller script interface. | ||||
return scriptInterface.CloneValueFromOtherCompartment(*m_ScriptInterface, messages); | return Script::CloneValueFromOtherCompartment(guiInterface, *m_ScriptInterface, messages); | ||||
} | } | ||||
JS::Value XmppClient::GuiPollHistoricMessages(const ScriptInterface& scriptInterface) | JS::Value XmppClient::GuiPollHistoricMessages(const ScriptInterface& guiInterface) | ||||
{ | { | ||||
if (m_HistoricGuiMessages.empty()) | if (m_HistoricGuiMessages.empty()) | ||||
return JS::UndefinedValue(); | return JS::UndefinedValue(); | ||||
ScriptRequest rq(m_ScriptInterface); | ScriptRequest rq(m_ScriptInterface); | ||||
JS::RootedValue messages(rq.cx); | JS::RootedValue messages(rq.cx); | ||||
ScriptInterface::CreateArray(rq, &messages); | ScriptInterface::CreateArray(rq, &messages); | ||||
int j = 0; | int j = 0; | ||||
for (const JS::Heap<JS::Value>& message : m_HistoricGuiMessages) | for (const JS::Heap<JS::Value>& message : m_HistoricGuiMessages) | ||||
m_ScriptInterface->SetPropertyInt(messages, j++, message); | m_ScriptInterface->SetPropertyInt(messages, j++, message); | ||||
// Copy the messages over to the caller script interface. | // Copy the messages over to the caller script interface. | ||||
return scriptInterface.CloneValueFromOtherCompartment(*m_ScriptInterface, messages); | return Script::CloneValueFromOtherCompartment(guiInterface, *m_ScriptInterface, messages); | ||||
} | } | ||||
/** | /** | ||||
* Send a standard MUC textual message. | * Send a standard MUC textual message. | ||||
*/ | */ | ||||
void XmppClient::SendMUCMessage(const std::string& message) | void XmppClient::SendMUCMessage(const std::string& message) | ||||
{ | { | ||||
m_mucRoom->send(message); | m_mucRoom->send(message); | ||||
▲ Show 20 Lines • Show All 708 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator