more docs, improved server initialization

This commit is contained in:
sergeych committed 2022-12-10 21:44:56 +01:00
1 parent c5acba1511
commit a1b08f2557
4 files changed
+46 -23

No files matched your search

@@ -21,7 +21,7 @@ fun randomACOLike(): ByteArray {
* ~~~
*
* // Application-specific API declaration
* class TestApiServer<T : WithAdapter> : CommandHost<T>() {
* class TestApiServer<S : WithAdapter> : CommandHost<S>() {
* val foobar by command<Unit, String?>()
* }
*
@@ -48,14 +48,14 @@ fun randomACOLike(): ByteArray {
* @param adapterBuilder block that should implement service-specific api.
* @param D application specific data (included in the session and transferred with registration
* and login)
* @param T service-specific session, class implementing any session-based code specific to the
* @param S service-specific session, class implementing any session-based code specific to the
* application but also implement necessary `superlogin` methods (implementing abstract
* ones) that implement user login data persistence and search.
*/
inline fun <reified D, T : SLServerSession<D>,> Application.SuperloginServer(
api: CommandHost<T>,
crossinline sessionBuilder: suspend AdapterBuilder<T, CommandHost<T>>.()->T,
crossinline adapterBuilder: AdapterBuilder<T, CommandHost<T>>.()->Unit
inline fun <reified D, S : SLServerSession<D>,A: CommandHost<S>> Application.superloginServer(
api: A,
crossinline sessionBuilder: suspend AdapterBuilder<S, A>.()->S,
crossinline adapterBuilder: AdapterBuilder<S, A>.()->Unit
) {
parsec3TransportServer(api) {
setupSuperloginServer { sessionBuilder() }
@@ -67,7 +67,7 @@ inline fun <reified D, T : SLServerSession<D>,> Application.SuperloginServer(
/**
* Set up a superlogin server manually, on a current adapter builder, using some session builder lambda.
* Note that session must inherit [SLServerSession] and implement necessary abstract methods
* that do store and retrieve user data. Usually you can do it easier with [SuperloginServer] call.
* that do store and retrieve user data. Usually you can do it easier with [superloginServer] call.
* If you want to do it manually (fr example using a custom transport), do it like this:
* ```
* parsec3TransportServer(TestApiServer<TestSession>()) {
@@ -5,13 +5,15 @@ import io.ktor.server.engine.*
import io.ktor.server.netty.*
import kotlinx.coroutines.runBlocking
import kotlinx.serialization.Serializable
import net.sergeych.parsec3.*
import net.sergeych.parsec3.CommandHost
import net.sergeych.parsec3.Parsec3WSClient
import net.sergeych.parsec3.WithAdapter
import net.sergeych.superlogin.*
import net.sergeych.superlogin.client.LoginState
import net.sergeych.superlogin.client.Registration
import net.sergeych.superlogin.client.SuperloginClient
import net.sergeych.superlogin.server.SLServerSession
import net.sergeych.superlogin.server.setupSuperloginServer
import net.sergeych.superlogin.server.superloginServer
import net.sergeych.unikrypto.PublicKey
import superlogin.assertThrowsAsync
import kotlin.random.Random
@@ -235,19 +237,8 @@ internal class WsServerKtTest {
}
inline fun <reified D, T : SLServerSession<D>, H : CommandHost<T>> Application.SuperloginServer(
api: H,
crossinline sessionBuilder: suspend AdapterBuilder<T, H>.()->T,
crossinline adapterBuilder: AdapterBuilder<T, H>.()->Unit
) {
parsec3TransportServer(api) {
setupSuperloginServer { sessionBuilder() }
adapterBuilder()
}
}
fun Application.testServerModule() {
SuperloginServer(TestApiServer<TestSession>(), { TestSession() }) {
superloginServer(TestApiServer<TestSession>(), { TestSession() }) {
on(api.loginName) {
println("login name called. now we have $currentLoginName : $superloginData")
currentLoginName