Changeset View
Changeset View
Standalone View
Standalone View
source/lobby/XmppClient.cpp
Show First 20 Lines • Show All 686 Lines • ▼ Show 20 Lines | |||||
bool XmppClient::GuiPollHasPlayerListUpdate() | bool XmppClient::GuiPollHasPlayerListUpdate() | ||||
{ | { | ||||
bool hasUpdate = m_PlayerMapUpdate; | bool hasUpdate = m_PlayerMapUpdate; | ||||
m_PlayerMapUpdate = false; | m_PlayerMapUpdate = false; | ||||
return hasUpdate; | return hasUpdate; | ||||
} | } | ||||
JS::Value XmppClient::GuiPollNewMessage(const ScriptInterface& scriptInterface) | JS::Value XmppClient::GuiPollNewMessages(const ScriptInterface& scriptInterface) | ||||
{ | { | ||||
if (m_GuiMessageQueue.empty()) | if (m_GuiMessageQueue.empty()) | ||||
return JS::UndefinedValue(); | return JS::UndefinedValue(); | ||||
JSContext* cx = scriptInterface.GetContext(); | JSContext* cx = scriptInterface.GetContext(); | ||||
JSAutoRequest rq(cx); | JSAutoRequest rq(cx); | ||||
JS::RootedValue message(cx, m_GuiMessageQueue.front()); | JS::RootedValue messages(cx); | ||||
m_GuiMessageQueue.pop_front(); | ScriptInterface::CreateArray(cx, &messages); | ||||
JS::RootedValue messageCopy(cx); | int j = 0; | ||||
if (JS_StructuredClone(cx, message, &messageCopy, nullptr, nullptr)) | |||||
for (const JS::Heap<JS::Value>& message : m_GuiMessageQueue) | |||||
{ | |||||
JS::RootedValue rootedMessage(cx, message); | |||||
scriptInterface.SetPropertyInt(messages, j++, message); | |||||
JS::RootedValue historicMessage(cx); | |||||
if (JS_StructuredClone(cx, rootedMessage, &historicMessage, nullptr, nullptr)) | |||||
{ | { | ||||
scriptInterface.SetProperty(messageCopy, "historic", true); | scriptInterface.SetProperty(historicMessage, "historic", true); | ||||
scriptInterface.FreezeObject(messageCopy, true); | scriptInterface.FreezeObject(historicMessage, true); | ||||
m_HistoricGuiMessages.push_back(JS::Heap<JS::Value>(messageCopy)); | 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!"); | ||||
} | |||||
return message; | m_GuiMessageQueue.clear(); | ||||
return messages; | |||||
} | } | ||||
JS::Value XmppClient::GuiPollHistoricMessages(const ScriptInterface& scriptInterface) | JS::Value XmppClient::GuiPollHistoricMessages(const ScriptInterface& scriptInterface) | ||||
{ | { | ||||
JSContext* cx = scriptInterface.GetContext(); | JSContext* cx = scriptInterface.GetContext(); | ||||
JSAutoRequest rq(cx); | JSAutoRequest rq(cx); | ||||
JS::RootedValue ret(cx); | JS::RootedValue messages(cx); | ||||
ScriptInterface::CreateArray(cx, &ret); | ScriptInterface::CreateArray(cx, &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) | ||||
scriptInterface.SetPropertyInt(ret, j++, message); | scriptInterface.SetPropertyInt(messages, j++, message); | ||||
return ret; | return 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 597 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator