toStub
Convert a SerializedService to a T for use as a client.
Samples
import com.monkopedia.ksrpc.RpcService
import com.monkopedia.ksrpc.annotation.KsMethod
import com.monkopedia.ksrpc.annotation.KsService
import com.monkopedia.ksrpc.ksrpcEnvironment
import com.monkopedia.ksrpc.rpcObject
import com.monkopedia.ksrpc.serialized
import com.monkopedia.ksrpc.toStub
import kotlinx.serialization.Serializable
fun main() {
//sampleStart
// Implement the service interface
val service = object : GreetingService {
override suspend fun greet(name: String): String = "Hello, $name!"
}
// Serialize for hosting on any transport
val env = ksrpcEnvironment { }
val serialized = service.serialized(env)
//sampleEnd
}import com.monkopedia.ksrpc.RpcBidiService
import com.monkopedia.ksrpc.RpcHostService
import com.monkopedia.ksrpc.RpcService
import com.monkopedia.ksrpc.annotation.KsMethod
import com.monkopedia.ksrpc.annotation.KsService
import com.monkopedia.ksrpc.ksrpcEnvironment
import com.monkopedia.ksrpc.rpcObject
import com.monkopedia.ksrpc.serialized
import com.monkopedia.ksrpc.toStub
fun main() {
//sampleStart
// A @KsMethod can return another @KsService type. The returned service
// is hosted as a sub-service on the same connection, with its own
// channel id managed by the framework.
val factory = object : WorkerFactory {
override suspend fun createWorker(name: String): ScopedWorker = object : ScopedWorker {
override suspend fun execute(command: String): String = "[$name] executed: $command"
}
}
// Serialize and use through a stub -- sub-services work transparently.
val env = ksrpcEnvironment { }
val serialized = factory.serialized(env)
val stub = serialized.toStub<WorkerFactory, String>()
val worker = stub.createWorker("build")
val result = worker.execute("compile")
//sampleEnd
}