Docs, logging config, store ref to Server.kt ret by Connection.kt
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
package com.shr4pnel.ferretirc
|
package com.shr4pnel.ferretirc
|
||||||
|
|
||||||
|
import com.shr4pnel.ferretirc.irc.Server
|
||||||
|
import com.shr4pnel.ferretirc.irc.util.Helpers
|
||||||
import com.shr4pnel.ferretirc.net.messages.ClientMessage
|
import com.shr4pnel.ferretirc.net.messages.ClientMessage
|
||||||
import com.shr4pnel.ferretirc.net.Connection
|
import com.shr4pnel.ferretirc.net.Connection
|
||||||
import com.shr4pnel.ferretirc.net.messages.ServerMessage
|
import com.shr4pnel.ferretirc.net.messages.ServerMessage
|
||||||
@@ -9,30 +11,48 @@ import kotlinx.coroutines.Dispatchers
|
|||||||
import kotlinx.coroutines.SupervisorJob
|
import kotlinx.coroutines.SupervisorJob
|
||||||
import kotlinx.coroutines.cancel
|
import kotlinx.coroutines.cancel
|
||||||
|
|
||||||
class IrcClient(hostname: String, port: Int) {
|
class IrcClient(hostname: String, port: Int, enableLogging: Boolean = true) {
|
||||||
init {
|
init {
|
||||||
KotlinLoggingConfiguration.logStartupMessage = false
|
KotlinLoggingConfiguration.logStartupMessage = false
|
||||||
|
Helpers.enableLogging = enableLogging
|
||||||
}
|
}
|
||||||
|
|
||||||
val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
|
val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
|
||||||
|
lateinit var server: Server
|
||||||
|
|
||||||
@PublishedApi
|
@PublishedApi
|
||||||
internal val connection = Connection(hostname, port, scope)
|
internal val connection = Connection(hostname, port, scope)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect to the socket
|
||||||
|
*/
|
||||||
suspend fun connect() {
|
suspend fun connect() {
|
||||||
connection.connect()
|
server = connection.connect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to the IRC server writer
|
||||||
|
* This is asynchronous and ordered
|
||||||
|
* @param message The client message to send to the server
|
||||||
|
*/
|
||||||
suspend fun queueMessage(message: ClientMessage) {
|
suspend fun queueMessage(message: ClientMessage) {
|
||||||
connection.writer.outgoingMessages.send(message)
|
connection.writer.outgoingMessages.send(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to the IRC server writer
|
||||||
|
* This is asynchronous and ordered
|
||||||
|
* @param messages The client messages to send to the server
|
||||||
|
*/
|
||||||
suspend fun queueMessages(vararg messages: ClientMessage) {
|
suspend fun queueMessages(vararg messages: ClientMessage) {
|
||||||
messages.forEach {
|
messages.forEach {
|
||||||
connection.writer.outgoingMessages.send(it)
|
connection.writer.outgoingMessages.send(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close the coroutine scope controlling listeners, readers, writers etc
|
||||||
|
*/
|
||||||
fun close() {
|
fun close() {
|
||||||
scope.cancel()
|
scope.cancel()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user