diff --git a/modules/core_lib/settings.lua b/modules/core_lib/settings.lua index cd2a51b2..bdb90605 100644 --- a/modules/core_lib/settings.lua +++ b/modules/core_lib/settings.lua @@ -1,5 +1,13 @@ Settings = {} +Settings.exists = g_configs.exists +Settings.setNode = g_configs.setNode +Settings.mergeNode = g_configs.mergeNode +Settings.getNode = g_configs.getNode +Settings.remove = g_configs.remove +Settings.setList = g_configs.setList +Settings.getList = g_configs.getList + local function convertSettingValue(value) if type(value) == 'table' then if value.x and value.width then @@ -20,21 +28,10 @@ local function convertSettingValue(value) end end -function Settings.exists(key) - return g_configs.exists(key) -end - -function Settings.remove(key) - g_configs.remove(key) -end - function Settings.set(key, value) g_configs.set(key, convertSettingValue(value)) end -function Settings.setList(key, list) - g_configs.setList(key, list) -end function Settings.setDefault(key, value) if Settings.exists(key) then return false end @@ -49,10 +46,6 @@ function Settings.get(key, default) return g_configs.get(key) end -function Settings.getList(key) - return g_configs.getList(key) -end - function Settings.getString(key, default) return Settings.get(key, default) end diff --git a/src/framework/core/configmanager.cpp b/src/framework/core/configmanager.cpp index fc1ade93..a5aab0df 100644 --- a/src/framework/core/configmanager.cpp +++ b/src/framework/core/configmanager.cpp @@ -112,3 +112,21 @@ void ConfigManager::remove(const std::string& key) if(child) m_confsDoc->removeChild(child); } + +void ConfigManager::setNode(const std::string& key, const OTMLNodePtr& node) +{ + remove(key); + addNode(key, node); +} + +void ConfigManager::addNode(const std::string& key, const OTMLNodePtr& node) +{ + OTMLNodePtr clone = node->clone(); + node->setTag(key); + m_confsDoc->addChild(node); +} + +OTMLNodePtr ConfigManager::getNode(const std::string& key) +{ + return m_confsDoc->get(key); +} diff --git a/src/framework/core/configmanager.h b/src/framework/core/configmanager.h index 575836eb..0e4ee758 100644 --- a/src/framework/core/configmanager.h +++ b/src/framework/core/configmanager.h @@ -37,6 +37,11 @@ public: void setList(const std::string& key, const std::vector& list); std::string get(const std::string& key); std::vector getList(const std::string& key); + + void setNode(const std::string& key, const OTMLNodePtr& node); + void addNode(const std::string& key, const OTMLNodePtr& node); + OTMLNodePtr getNode(const std::string& key); + bool exists(const std::string& key); void remove(const std::string& key); diff --git a/src/framework/luafunctions.cpp b/src/framework/luafunctions.cpp index 243366a6..8068516b 100644 --- a/src/framework/luafunctions.cpp +++ b/src/framework/luafunctions.cpp @@ -381,6 +381,9 @@ void Application::registerLuaFunctions() g_lua.bindClassStaticFunction("g_configs", "getList", std::bind(&ConfigManager::getList, &g_configs, _1)); g_lua.bindClassStaticFunction("g_configs", "exists", std::bind(&ConfigManager::exists, &g_configs, _1)); g_lua.bindClassStaticFunction("g_configs", "remove", std::bind(&ConfigManager::remove, &g_configs, _1)); + g_lua.bindClassStaticFunction("g_configs", "setNode", std::bind(&ConfigManager::setNode, &g_configs, _1, _2)); + g_lua.bindClassStaticFunction("g_configs", "addNode", std::bind(&ConfigManager::addNode, &g_configs, _1, _2)); + g_lua.bindClassStaticFunction("g_configs", "getNode", std::bind(&ConfigManager::getNode, &g_configs, _1)); // PlatformWindow g_lua.registerStaticClass("g_window"); diff --git a/src/framework/luascript/luavaluecasts.cpp b/src/framework/luascript/luavaluecasts.cpp index 0c5a268e..0a9d537f 100644 --- a/src/framework/luascript/luavaluecasts.cpp +++ b/src/framework/luascript/luavaluecasts.cpp @@ -264,7 +264,7 @@ bool luavalue_cast(int index, OTMLNodePtr& node) std::string cnodeName = g_lua.toString(-2); if(g_lua.isTable()) { OTMLNodePtr cnode; - if(luavalue_cast(-1, node)) { + if(luavalue_cast(-1, cnode)) { cnode->setTag(cnodeName); node->addChild(cnode); } diff --git a/src/framework/net/connection.cpp b/src/framework/net/connection.cpp index c30eb986..9625df7d 100644 --- a/src/framework/net/connection.cpp +++ b/src/framework/net/connection.cpp @@ -108,6 +108,10 @@ void Connection::write(uint8* buffer, uint16 size) if(!m_connected) return; + // send old buffer if we can't add more data + if(m_sendBufferSize + size >= SEND_BUFFER_SIZE && m_sendEvent) + m_sendEvent->execute(); + // we can't send right, otherwise we could create tcp congestion memcpy(m_sendBuffer + m_sendBufferSize, buffer, size); m_sendBufferSize += size; @@ -172,7 +176,6 @@ void Connection::onConnect(const boost::system::error_code& error) m_connected = true; // disable nagle's algorithm - //TODO: implement custom cache boost::asio::ip::tcp::no_delay option(true); m_socket.set_option(option);