From 8f924f76965cb1be85621180fc70de043959efc9 Mon Sep 17 00:00:00 2001 From: Joakim Kilby Date: Tue, 17 Feb 2015 11:58:03 +0100 Subject: [PATCH] added serialize, deserialize, post sync and pre sync functions for script engine --- include/openspace/scripting/scriptengine.h | 17 +++++++++ src/scripting/scriptengine.cpp | 40 ++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/include/openspace/scripting/scriptengine.h b/include/openspace/scripting/scriptengine.h index f81e033750..63a6dfd30c 100644 --- a/include/openspace/scripting/scriptengine.h +++ b/include/openspace/scripting/scriptengine.h @@ -34,6 +34,8 @@ */ namespace openspace { + class SyncBuffer; + namespace scripting { class ScriptEngine { @@ -67,6 +69,16 @@ public: bool writeDocumentation(const std::string& filename, const std::string& type) const; + void serialize(SyncBuffer* syncBuffer); + + void deserialize(SyncBuffer* syncBuffer); + + void postSynchronizationPreDraw(); + + void preSynchronization(); + + void queueScript(const std::string &script); + std::vector allLuaFunctions() const; private: @@ -80,6 +92,11 @@ private: lua_State* _state; std::set _registeredLibraries; + + //sync variables + std::mutex _mutex; + std::vector _queuedScripts; + std::string _currentSyncedScript; }; } // namespace scripting diff --git a/src/scripting/scriptengine.cpp b/src/scripting/scriptengine.cpp index 2dfb37ce9c..ac6603181c 100644 --- a/src/scripting/scriptengine.cpp +++ b/src/scripting/scriptengine.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include @@ -605,6 +606,45 @@ bool ScriptEngine::writeDocumentation(const std::string& filename, const std::st } } +void ScriptEngine::serialize(SyncBuffer* syncBuffer){ + syncBuffer->encode(_currentSyncedScript); +} + +void ScriptEngine::deserialize(SyncBuffer* syncBuffer){ + syncBuffer->decode(_currentSyncedScript); +} + +void ScriptEngine::postSynchronizationPreDraw(){ + +} + +void ScriptEngine::preSynchronization(){ + if (!_currentSyncedScript.empty()){ + runScript(_currentSyncedScript); + _currentSyncedScript.clear(); + } + + _mutex.lock(); + + if (!_queuedScripts.empty()){ + _currentSyncedScript = _queuedScripts.back(); + _queuedScripts.pop_back(); + } + + _mutex.unlock(); +} + +void ScriptEngine::queueScript(const std::string &script){ + if (script.empty()) + return; + + _mutex.lock(); + + _queuedScripts.insert(_queuedScripts.begin(), script); + + _mutex.unlock(); +} + } // namespace scripting } // namespace openspace