JS::Value CMessage::ToJSValCached(ScriptInterface& scriptInterface) const { if (!m_Cached) m_Cached.reset(new JS::PersistentRootedValue(scriptInterface.GetJSRuntime(), ToJSVal(scriptInterface))); return m_Cached->get(); }
CStdDeserializer::CStdDeserializer(ScriptInterface& scriptInterface, std::istream& stream) : m_ScriptInterface(scriptInterface), m_Stream(stream), m_dummyObject(scriptInterface.GetJSRuntime()) { JSContext* cx = m_ScriptInterface.GetContext(); JSAutoRequest rq(cx); JS_AddExtraGCRootsTracer(m_ScriptInterface.GetJSRuntime(), CStdDeserializer::Trace, this); // Add a dummy tag because the serializer uses the tag 0 to indicate that a value // needs to be serialized and then tagged m_dummyObject = JS_NewPlainObject(cx); m_ScriptBackrefs.push_back(JS::Heap<JSObject*>(m_dummyObject)); }
CComponentTypeScript::CComponentTypeScript(ScriptInterface& scriptInterface, JS::HandleValue instance) : m_ScriptInterface(scriptInterface), m_Instance(scriptInterface.GetJSRuntime(), instance) { // Cache the property detection for efficiency JSContext* cx = m_ScriptInterface.GetContext(); JSAutoRequest rq(cx); m_HasCustomSerialize = m_ScriptInterface.HasProperty(m_Instance, "Serialize"); m_HasCustomDeserialize = m_ScriptInterface.HasProperty(m_Instance, "Deserialize"); m_HasNullSerialize = false; if (m_HasCustomSerialize) { JS::RootedValue val(cx); if (m_ScriptInterface.GetProperty(m_Instance, "Serialize", &val) && val.isNull()) m_HasNullSerialize = true; } }
CGameSetupMessage::CGameSetupMessage(ScriptInterface& scriptInterface, JS::HandleValue data) : CNetMessage(NMT_GAME_SETUP), m_ScriptInterface(scriptInterface), m_Data(scriptInterface.GetJSRuntime(), data) { }
CGameSetupMessage::CGameSetupMessage(ScriptInterface& scriptInterface) : CNetMessage(NMT_GAME_SETUP), m_ScriptInterface(scriptInterface), m_Data(scriptInterface.GetJSRuntime()) { }
CSimulationMessage::CSimulationMessage(ScriptInterface& scriptInterface, u32 client, i32 player, u32 turn, JS::HandleValue data) : CNetMessage(NMT_SIMULATION_COMMAND), m_ScriptInterface(&scriptInterface), m_Client(client), m_Player(player), m_Turn(turn), m_Data(scriptInterface.GetJSRuntime(), data) { }
CSimulationMessage::CSimulationMessage(ScriptInterface& scriptInterface) : CNetMessage(NMT_SIMULATION_COMMAND), m_ScriptInterface(&scriptInterface), m_Data(scriptInterface.GetJSRuntime()) { }
CMessageScripted(ScriptInterface& scriptInterface, int mtid, const std::string& name, JS::HandleValue msg) : mtid(mtid), handlerName("On" + name), globalHandlerName("OnGlobal" + name), msg(scriptInterface.GetJSRuntime(), msg) { }