From d5397f99a3f8905cb5ac8b60be8b5b1849f187b1 Mon Sep 17 00:00:00 2001 From: observer Date: Sat, 12 Sep 2026 20:37:06 +0100 Subject: [PATCH] Docs, logging config, store ref to Server.kt ret by Connection.kt --- .../com/shr4pnel/ferretirc/IrcClient.kt | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/shr4pnel/ferretirc/IrcClient.kt b/src/main/kotlin/com/shr4pnel/ferretirc/IrcClient.kt index 09abbd4..6d4e769 100644 --- a/src/main/kotlin/com/shr4pnel/ferretirc/IrcClient.kt +++ b/src/main/kotlin/com/shr4pnel/ferretirc/IrcClient.kt @@ -1,5 +1,7 @@ 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.Connection import com.shr4pnel.ferretirc.net.messages.ServerMessage @@ -9,30 +11,48 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel -class IrcClient(hostname: String, port: Int) { +class IrcClient(hostname: String, port: Int, enableLogging: Boolean = true) { init { KotlinLoggingConfiguration.logStartupMessage = false + Helpers.enableLogging = enableLogging } val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) + lateinit var server: Server @PublishedApi internal val connection = Connection(hostname, port, scope) + /** + * Connect to the socket + */ 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) { 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) { messages.forEach { connection.writer.outgoingMessages.send(it) } } + /** + * Close the coroutine scope controlling listeners, readers, writers etc + */ fun close() { scope.cancel() }