diff --git a/kvision-common/src/main/kotlin/pl/treksoft/kvision/remote/ServiceManager.kt b/kvision-common/src/main/kotlin/pl/treksoft/kvision/remote/ServiceManager.kt index b3db5d0e4c0..1f31dec0d02 100644 --- a/kvision-common/src/main/kotlin/pl/treksoft/kvision/remote/ServiceManager.kt +++ b/kvision-common/src/main/kotlin/pl/treksoft/kvision/remote/ServiceManager.kt @@ -41,87 +41,87 @@ enum class HttpMethod { /** * Multiplatform service manager. */ -expect open class ServiceManager(service: T? = null) { +expect open class ServiceManager(service: T) { /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected inline fun bind( - route: String, noinline function: T.(Request?) -> Deferred, + route: String? = null, method: RpcHttpMethod = RpcHttpMethod.POST, prefix: String = "/" ) /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected inline fun bind( - route: String, noinline function: T.(PAR, Request?) -> Deferred, + route: String? = null, method: RpcHttpMethod = RpcHttpMethod.POST, prefix: String = "/" ) /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected inline fun bind( - route: String, noinline function: T.(PAR1, PAR2, Request?) -> Deferred, + route: String? = null, method: RpcHttpMethod = RpcHttpMethod.POST, prefix: String = "/" ) /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected inline fun bind( - route: String, noinline function: T.(PAR1, PAR2, PAR3, Request?) -> Deferred, + route: String? = null, method: RpcHttpMethod = RpcHttpMethod.POST, prefix: String = "/" ) /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected inline fun bind( - route: String, noinline function: T.(PAR1, PAR2, PAR3, PAR4, Request?) -> Deferred, + route: String? = null, method: RpcHttpMethod = RpcHttpMethod.POST, prefix: String = "/" ) /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected inline fun bind( - route: String, noinline function: T.(PAR1, PAR2, PAR3, PAR4, PAR5, Request?) -> Deferred, + route: String? = null, method: RpcHttpMethod = RpcHttpMethod.POST, prefix: String = "/" ) diff --git a/kvision-server/src/main/kotlin/pl/treksoft/kvision/remote/ServiceManager.kt b/kvision-server/src/main/kotlin/pl/treksoft/kvision/remote/ServiceManager.kt index 6c1b47e71ef..50ef770f282 100644 --- a/kvision-server/src/main/kotlin/pl/treksoft/kvision/remote/ServiceManager.kt +++ b/kvision-server/src/main/kotlin/pl/treksoft/kvision/remote/ServiceManager.kt @@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory * Multiplatform service manager. */ @Suppress("EXPERIMENTAL_FEATURE_WARNING") -actual open class ServiceManager actual constructor(val service: T?) { +actual open class ServiceManager actual constructor(val service: T) { companion object { val LOG: Logger = LoggerFactory.getLogger(ServiceManager::class.java.name) @@ -41,20 +41,22 @@ actual open class ServiceManager actual constructor(val service: T?) { protected val routes: MutableList Unit> = mutableListOf() val mapper = jacksonObjectMapper() + var counter: Int = 0 /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected actual inline fun bind( - route: String, - noinline function: T.(Request?) -> Deferred, method: RpcHttpMethod, prefix: String + noinline function: T.(Request?) -> Deferred, + route: String?, method: RpcHttpMethod, prefix: String ) { + val routeDef = if (route != null) route else "route${this::class.simpleName}${counter++}" routes.add({ - call(method, "$prefix$route") { req, res -> + call(method, "$prefix$routeDef") { req, res -> if (service != null) { val jsonRpcRequest = req.body(JsonRpcRequest::class.java) try { @@ -78,17 +80,18 @@ actual open class ServiceManager actual constructor(val service: T?) { /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected actual inline fun bind( - route: String, - noinline function: T.(PAR, Request?) -> Deferred, method: RpcHttpMethod, prefix: String + noinline function: T.(PAR, Request?) -> Deferred, + route: String?, method: RpcHttpMethod, prefix: String ) { + val routeDef = if (route != null) route else "route${this::class.simpleName}${counter++}" routes.add({ - call(method, "$prefix$route") { req, res -> + call(method, "$prefix$routeDef") { req, res -> if (service != null) { val jsonRpcRequest = req.body(JsonRpcRequest::class.java) if (jsonRpcRequest.params.size == 1) { @@ -117,17 +120,18 @@ actual open class ServiceManager actual constructor(val service: T?) { /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected actual inline fun bind( - route: String, - noinline function: T.(PAR1, PAR2, Request?) -> Deferred, method: RpcHttpMethod, prefix: String + noinline function: T.(PAR1, PAR2, Request?) -> Deferred, + route: String?, method: RpcHttpMethod, prefix: String ) { + val routeDef = if (route != null) route else "route${this::class.simpleName}${counter++}" routes.add({ - call(method, "$prefix$route") { req, res -> + call(method, "$prefix$routeDef") { req, res -> if (service != null) { val jsonRpcRequest = req.body(JsonRpcRequest::class.java) if (jsonRpcRequest.params.size == 2) { @@ -157,17 +161,18 @@ actual open class ServiceManager actual constructor(val service: T?) { /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected actual inline fun bind( - route: String, - noinline function: T.(PAR1, PAR2, PAR3, Request?) -> Deferred, method: RpcHttpMethod, prefix: String + noinline function: T.(PAR1, PAR2, PAR3, Request?) -> Deferred, + route: String?, method: RpcHttpMethod, prefix: String ) { + val routeDef = if (route != null) route else "route${this::class.simpleName}${counter++}" routes.add({ - call(method, "$prefix$route") { req, res -> + call(method, "$prefix$routeDef") { req, res -> if (service != null) { val jsonRpcRequest = req.body(JsonRpcRequest::class.java) if (jsonRpcRequest.params.size == 3) { @@ -198,17 +203,18 @@ actual open class ServiceManager actual constructor(val service: T?) { /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected actual inline fun bind( - route: String, - noinline function: T.(PAR1, PAR2, PAR3, PAR4, Request?) -> Deferred, method: RpcHttpMethod, prefix: String + noinline function: T.(PAR1, PAR2, PAR3, PAR4, Request?) -> Deferred, + route: String?, method: RpcHttpMethod, prefix: String ) { + val routeDef = if (route != null) route else "route${this::class.simpleName}${counter++}" routes.add({ - call(method, "$prefix$route") { req, res -> + call(method, "$prefix$routeDef") { req, res -> if (service != null) { val jsonRpcRequest = req.body(JsonRpcRequest::class.java) if (jsonRpcRequest.params.size == 4) { @@ -241,20 +247,21 @@ actual open class ServiceManager actual constructor(val service: T?) { /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected actual inline fun bind( - route: String, noinline function: T.(PAR1, PAR2, PAR3, PAR4, PAR5, Request?) -> Deferred, + route: String?, method: RpcHttpMethod, prefix: String ) { + val routeDef = if (route != null) route else "route${this::class.simpleName}${counter++}" routes.add({ - call(method, "$prefix$route") { req, res -> + call(method, "$prefix$routeDef") { req, res -> if (service != null) { val jsonRpcRequest = req.body(JsonRpcRequest::class.java) if (jsonRpcRequest.params.size == 5) { diff --git a/src/main/kotlin/pl/treksoft/kvision/remote/ServiceManager.kt b/src/main/kotlin/pl/treksoft/kvision/remote/ServiceManager.kt index df3245c3653..fc464154d2a 100644 --- a/src/main/kotlin/pl/treksoft/kvision/remote/ServiceManager.kt +++ b/src/main/kotlin/pl/treksoft/kvision/remote/ServiceManager.kt @@ -26,94 +26,101 @@ import kotlinx.coroutines.experimental.Deferred /** * Multiplatform service manager. */ -actual open class ServiceManager actual constructor(service: T?) { +actual open class ServiceManager actual constructor(service: T) { protected val calls: MutableMap> = mutableMapOf() + var counter: Int = 0 /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected actual inline fun bind( - route: String, - noinline function: T.(Request?) -> Deferred, method: RpcHttpMethod, prefix: String + noinline function: T.(Request?) -> Deferred, + route: String?, method: RpcHttpMethod, prefix: String ) { - calls[function.toString()] = Pair("$prefix$route", method) + val routeDef = if (route != null) route else "route${this::class.simpleName}${counter++}" + calls[function.toString()] = Pair("$prefix$routeDef", method) } /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected actual inline fun bind( - route: String, - noinline function: T.(PAR, Request?) -> Deferred, method: RpcHttpMethod, prefix: String + noinline function: T.(PAR, Request?) -> Deferred, + route: String?, method: RpcHttpMethod, prefix: String ) { - calls[function.toString()] = Pair("$prefix$route", method) + val routeDef = if (route != null) route else "route${this::class.simpleName}${counter++}" + calls[function.toString()] = Pair("$prefix$routeDef", method) } /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected actual inline fun bind( - route: String, - noinline function: T.(PAR1, PAR2, Request?) -> Deferred, method: RpcHttpMethod, prefix: String + noinline function: T.(PAR1, PAR2, Request?) -> Deferred, + route: String?, method: RpcHttpMethod, prefix: String ) { - calls[function.toString()] = Pair("$prefix$route", method) + val routeDef = if (route != null) route else "route${this::class.simpleName}${counter++}" + calls[function.toString()] = Pair("$prefix$routeDef", method) } /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected actual inline fun bind( - route: String, - noinline function: T.(PAR1, PAR2, PAR3, Request?) -> Deferred, method: RpcHttpMethod, prefix: String + noinline function: T.(PAR1, PAR2, PAR3, Request?) -> Deferred, + route: String?, method: RpcHttpMethod, prefix: String ) { - calls[function.toString()] = Pair("$prefix$route", method) + val routeDef = if (route != null) route else "route${this::class.simpleName}${counter++}" + calls[function.toString()] = Pair("$prefix$routeDef", method) } /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected actual inline fun bind( - route: String, - noinline function: T.(PAR1, PAR2, PAR3, PAR4, Request?) -> Deferred, method: RpcHttpMethod, prefix: String + noinline function: T.(PAR1, PAR2, PAR3, PAR4, Request?) -> Deferred, + route: String?, method: RpcHttpMethod, prefix: String ) { - calls[function.toString()] = Pair("$prefix$route", method) + val routeDef = if (route != null) route else "route${this::class.simpleName}${counter++}" + calls[function.toString()] = Pair("$prefix$routeDef", method) } /** * Binds a given route with a function of the receiver. - * @param route a route * @param function a function of the receiver + * @param route a route * @param method a HTTP method * @param prefix an URL address prefix */ protected actual inline fun bind( - route: String, noinline function: T.(PAR1, PAR2, PAR3, PAR4, PAR5, Request?) -> Deferred, + route: String?, method: RpcHttpMethod, prefix: String ) { - calls[function.toString()] = Pair("$prefix$route", method) + val routeDef = if (route != null) route else "route${this::class.simpleName}${counter++}" + calls[function.toString()] = Pair("$prefix$routeDef", method) } /** @@ -127,4 +134,4 @@ actual open class ServiceManager actual constructor(service: T?) { * Returns the map of defined paths. */ actual fun getCalls(): Map> = calls -} +} \ No newline at end of file