Initial commit

This commit is contained in:
2026-08-06 01:03:27 +01:00
commit aa74300efb
20 changed files with 685 additions and 0 deletions
@@ -0,0 +1,39 @@
package com.shr4pnel.ferretirc
import com.shr4pnel.ferretirc.net.ClientMessage
import com.shr4pnel.ferretirc.net.Connection
import com.shr4pnel.ferretirc.net.MessageReader
import com.shr4pnel.ferretirc.net.MessageWriter
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.launch
import java.net.URL
class IrcClient(val nick: String, val sock: URL) {
val port: Int = sock.port
val hostname: String = sock.host
val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
private val connection = Connection(hostname, port, scope)
lateinit var messages: Channel<String>
init {
require(port != -1, fun() = "A port must be specified in your argument to IRCClient")
require(hostname.isNotEmpty(), fun() = "A port must be specified in your argument to IRCClient")
}
suspend fun connect() {
connection.connect()
messages = connection.reader.incomingMessages
}
fun queueMessage(message: ClientMessage) = scope.launch {
connection.writer.outgoingMessages.send(message)
}
fun close() {
scope.cancel()
}
}