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() }