X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ffreenet%2Fplugin%2FFredPluginConnector.kt;fp=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ffreenet%2Fplugin%2FFredPluginConnector.kt;h=98849c4e0a691ed67ccfe5a4e920288458279aad;hb=d50730f6a330439e0e7ef97ca9329dffe72d5640;hp=0000000000000000000000000000000000000000;hpb=97fe04482ebb8a08e43294acde041c2975cbd8ee;p=Sone.git diff --git a/src/main/kotlin/net/pterodactylus/sone/freenet/plugin/FredPluginConnector.kt b/src/main/kotlin/net/pterodactylus/sone/freenet/plugin/FredPluginConnector.kt new file mode 100644 index 0000000..98849c4 --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/freenet/plugin/FredPluginConnector.kt @@ -0,0 +1,35 @@ +/* Fred’s plugin stuff is mostly deprecated. ¯\_(ツ)_/¯ */ +@file:Suppress("DEPRECATION") + +package net.pterodactylus.sone.freenet.plugin + +import freenet.pluginmanager.* +import freenet.support.* +import freenet.support.api.* +import kotlinx.coroutines.* +import kotlinx.coroutines.channels.* +import javax.inject.* + +/** + * [PluginConnector] implementation that uses a [PluginRespiratorFacade] and coroutines to send + * a request to another plugin and receive a reply. + */ +class FredPluginConnector @Inject constructor(private val pluginRespiratorFacade: PluginRespiratorFacade) : PluginConnector { + + override suspend fun sendRequest(pluginName: String, fields: SimpleFieldSet, data: Bucket?): PluginReply { + val receivedReply = Channel() + val responseReceiver = FredPluginTalker { _, _, responseFields, responseData -> + GlobalScope.launch { + receivedReply.send(PluginReply(responseFields, responseData)) + } + } + try { + val pluginTalker = pluginRespiratorFacade.getPluginTalker(responseReceiver, pluginName, "") + pluginTalker.send(fields, data) + return receivedReply.receive() + } catch (e: PluginNotFoundException) { + throw PluginException(cause = e) + } + } + +}