mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-12 05:07:46 +02:00
feat(scripting): ipc global channels
This commit is contained in:
@ -10,7 +10,7 @@ interface IScripting {
|
||||
|
||||
void registerReloadListener(ReloadListener listener);
|
||||
|
||||
void registerIPCListener(String eventName, IPCListener listener);
|
||||
void registerIPCListener(String channel, String eventName, IPCListener listener);
|
||||
|
||||
void sendIPCMessage(String eventName, in String[] args);
|
||||
void sendIPCMessage(String channel, String eventName, in String[] args);
|
||||
}
|
@ -5,8 +5,13 @@ typealias Listener = (Array<out String?>) -> Unit
|
||||
abstract class IPCInterface {
|
||||
abstract fun on(eventName: String, listener: Listener)
|
||||
|
||||
abstract fun onBroadcast(channel: String, eventName: String, listener: Listener)
|
||||
|
||||
abstract fun emit(eventName: String, vararg args: String?)
|
||||
abstract fun broadcast(channel: String, eventName: String, vararg args: String?)
|
||||
|
||||
@Suppress("unused")
|
||||
fun emit(eventName: String) = emit(eventName, *emptyArray())
|
||||
@Suppress("unused")
|
||||
fun emit(channel: String, eventName: String) = broadcast(channel, eventName, *emptyArray())
|
||||
}
|
@ -18,7 +18,6 @@ class CoreScriptRuntime(
|
||||
|
||||
private val scriptHookers = mutableListOf<ScriptHooker>()
|
||||
|
||||
|
||||
fun connect(scriptingInterface: IScripting) {
|
||||
scriptingInterface.apply {
|
||||
registerReloadListener(object: ReloadListener.Stub() {
|
||||
@ -27,31 +26,39 @@ class CoreScriptRuntime(
|
||||
}
|
||||
})
|
||||
|
||||
ipcInterface = object: IPCInterface() {
|
||||
override fun on(eventName: String, listener: Listener) {
|
||||
registerIPCListener(eventName, object: IPCListener.Stub() {
|
||||
override fun onMessage(args: Array<out String?>) {
|
||||
listener(args)
|
||||
}
|
||||
})
|
||||
}
|
||||
buildModuleObject = { module ->
|
||||
putConst("ipc", this, object: IPCInterface() {
|
||||
override fun onBroadcast(channel: String, eventName: String, listener: Listener) {
|
||||
registerIPCListener(channel, eventName, object: IPCListener.Stub() {
|
||||
override fun onMessage(args: Array<out String?>) {
|
||||
listener(args)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun emit(eventName: String, args: Array<out String?>) {
|
||||
sendIPCMessage(eventName, args)
|
||||
override fun on(eventName: String, listener: Listener) {
|
||||
onBroadcast(module.moduleInfo.name, eventName, listener)
|
||||
}
|
||||
|
||||
override fun emit(eventName: String, vararg args: String?) {
|
||||
broadcast(module.moduleInfo.name, eventName, *args)
|
||||
}
|
||||
|
||||
override fun broadcast(channel: String, eventName: String, vararg args: String?) {
|
||||
sendIPCMessage(channel, eventName, args)
|
||||
}
|
||||
})
|
||||
putFunction("findClass") {
|
||||
val className = it?.get(0).toString()
|
||||
classLoader.loadClass(className)
|
||||
}
|
||||
putConst("hooker", this, ScriptHooker(module.moduleInfo, logger, classLoader).also {
|
||||
scriptHookers.add(it)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
buildModuleObject = { module ->
|
||||
putConst("ipc", this, ipcInterface)
|
||||
putFunction("findClass") {
|
||||
val className = it?.get(0).toString()
|
||||
classLoader.loadClass(className)
|
||||
}
|
||||
putConst("hooker", this, ScriptHooker(module.moduleInfo, logger, classLoader).also {
|
||||
scriptHookers.add(it)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
scriptingInterface.enabledScripts.forEach { path ->
|
||||
runCatching {
|
||||
|
Reference in New Issue
Block a user