Create UtilLibrary with sleep function

This commit is contained in:
2020-07-02 20:17:30 +02:00
parent af899cae81
commit 5f1e459977
5 changed files with 49 additions and 16 deletions

View File

@@ -9,19 +9,6 @@ import org.luaj.vm2.lib.TwoArgFunction
import org.luaj.vm2.lib.ZeroArgFunction
import org.luaj.vm2.lib.jse.CoerceJavaToLua
class OfFunction : OneArgFunction() {
override fun call(ip: LuaValue): LuaValue =
CoerceJavaToLua.coerce(SonosDevice(ip.checkjstring()))
}
class DiscoverFunction : ZeroArgFunction() {
override fun call(): LuaTable = LuaValue.tableOf().also { devices ->
SonosDiscovery.discover()
.map { CoerceJavaToLua.coerce(it) }
.forEachIndexed { i, device -> devices.set(i + 1, device) }
}
}
class SonosLibrary : TwoArgFunction() {
override fun call(modname: LuaValue, env: LuaValue): LuaValue {
@@ -34,4 +21,17 @@ class SonosLibrary : TwoArgFunction() {
return LuaValue.NIL
}
class OfFunction : OneArgFunction() {
override fun call(ip: LuaValue): LuaValue =
CoerceJavaToLua.coerce(SonosDevice(ip.checkjstring()))
}
class DiscoverFunction : ZeroArgFunction() {
override fun call(): LuaTable = LuaValue.tableOf().also { devices ->
SonosDiscovery.discover()
.map { CoerceJavaToLua.coerce(it) }
.forEachIndexed { i, device -> devices.set(i + 1, device) }
}
}
}

View File

@@ -0,0 +1,20 @@
package com.bartlomiejpluta.ttsserver.core.lua.lib
import org.luaj.vm2.LuaValue
import org.luaj.vm2.lib.OneArgFunction
import org.luaj.vm2.lib.TwoArgFunction
class UtilLibrary : TwoArgFunction() {
override fun call(modname: LuaValue, env: LuaValue): LuaValue {
env.set("sleep", SleepFunction())
return LuaValue.NIL
}
class SleepFunction : OneArgFunction() {
override fun call(ms: LuaValue): LuaValue {
Thread.sleep(ms.checklong())
return LuaValue.NIL
}
}
}

View File

@@ -3,6 +3,7 @@ package com.bartlomiejpluta.ttsserver.core.lua.sandbox
import com.bartlomiejpluta.ttsserver.core.lua.lib.HTTPLibrary
import com.bartlomiejpluta.ttsserver.core.lua.lib.SonosLibrary
import com.bartlomiejpluta.ttsserver.core.lua.lib.TTSLibrary
import com.bartlomiejpluta.ttsserver.core.lua.lib.UtilLibrary
import org.luaj.vm2.Globals
import org.luaj.vm2.LoadState
import org.luaj.vm2.compiler.LuaC
@@ -14,6 +15,7 @@ import org.luaj.vm2.lib.jse.JseMathLib
import org.luaj.vm2.lib.jse.JseOsLib
class SandboxFactory(
private val utilLibrary: UtilLibrary,
private val httpLibrary: HTTPLibrary,
private val ttsLibrary: TTSLibrary,
private val sonosLibrary: SonosLibrary
@@ -25,6 +27,7 @@ class SandboxFactory(
it.load(StringLib())
it.load(JseMathLib())
it.load(JseOsLib())
it.load(utilLibrary)
it.load(httpLibrary)
it.load(ttsLibrary)
it.load(sonosLibrary)

View File

@@ -4,6 +4,7 @@ import android.content.Context
import com.bartlomiejpluta.ttsserver.core.lua.lib.HTTPLibrary
import com.bartlomiejpluta.ttsserver.core.lua.lib.SonosLibrary
import com.bartlomiejpluta.ttsserver.core.lua.lib.TTSLibrary
import com.bartlomiejpluta.ttsserver.core.lua.lib.UtilLibrary
import com.bartlomiejpluta.ttsserver.core.lua.loader.EndpointLoader
import com.bartlomiejpluta.ttsserver.core.lua.sandbox.SandboxFactory
import com.bartlomiejpluta.ttsserver.core.tts.engine.TTSEngine
@@ -21,8 +22,17 @@ class LuaModule {
@Provides
@Singleton
fun sandboxFactory(httpLibrary: HTTPLibrary, ttsLibrary: TTSLibrary, sonosLibrary: SonosLibrary) =
SandboxFactory(httpLibrary, ttsLibrary, sonosLibrary)
fun sandboxFactory(
utilLibrary: UtilLibrary,
httpLibrary: HTTPLibrary,
ttsLibrary: TTSLibrary,
sonosLibrary: SonosLibrary
) =
SandboxFactory(utilLibrary, httpLibrary, ttsLibrary, sonosLibrary)
@Provides
@Singleton
fun extraLibrary() = UtilLibrary()
@Provides
@Singleton

View File

@@ -114,4 +114,4 @@ class MainActivity : DaggerAppCompatActivity() {
startService(it)
}
}
}
}