51 lines
1.8 KiB
Kotlin
51 lines
1.8 KiB
Kotlin
/*
|
|
* Copyright (c) 2025. Sergey S. Chernov - All Rights Reserved
|
|
*
|
|
* You may use, distribute and modify this code under the
|
|
* terms of the private license, which you must obtain from the author
|
|
*
|
|
* To obtain the license, contact the author: https://t.me/real_sergeych or email to
|
|
* real dot sergeych at gmail.
|
|
*/
|
|
|
|
package net.sergeych.kiloparsec
|
|
|
|
typealias KiloHandler<S> = KiloScope<S>.()->Unit
|
|
/**
|
|
* The local interface to provide functions, register errors for Kiloparsec users. Use it
|
|
* with [KiloClient], [KiloClientConnection], [KiloServerConnection], etc.
|
|
*
|
|
* Base class implementation does the following:
|
|
*
|
|
* - It registers common exceptions from [RemoteInterface] and kotlin/java `IllegalArgumentException` and
|
|
* `IllegalStateException`
|
|
* - It provides [onConnected] handler
|
|
*
|
|
* See [KiloServer] for usage sample.
|
|
*/
|
|
open class KiloInterface<S> : LocalInterface<KiloScope<S>>() {
|
|
|
|
internal val onConnectHandlers = mutableListOf<KiloHandler<S>>()
|
|
|
|
/**
|
|
* Registers handler [f] for [onConnected] event, to the head or the end of handler list.
|
|
*
|
|
* @param addFirst if true, [f] will be added to the beginning of the list of handlers
|
|
*/
|
|
fun onConnected(addFirst: Boolean = false, f: KiloScope<S>.()->Unit) {
|
|
if( addFirst ) onConnectHandlers.add(0, f) else onConnectHandlers += f
|
|
}
|
|
|
|
init {
|
|
registerError { RemoteInterface.UnknownCommand(it) }
|
|
registerError { RemoteInterface.InternalError(it) }
|
|
registerError { RemoteInterface.ClosedException(it) }
|
|
registerError { RemoteInterface.SecurityException(it) }
|
|
registerError { RemoteInterface.InvalidDataException(it) }
|
|
registerError { RemoteInterface.RemoteException(it) }
|
|
registerError { IllegalStateException() }
|
|
registerError { IllegalArgumentException(it) }
|
|
}
|
|
}
|
|
|